5782: Fix StatusNotification r=matklad a=vsrs

This PR fixes the following:

As per specification `params` property in [NotificationMessage ](https://microsoft.github.io/language-server-protocol/specifications/specification-current/#notificationMessage) should be `array | object` while RA uses `"loading" | "ready" | "invalid" | "needsReload"`.

Co-authored-by: vsrs <vit@conrlab.com>
This commit is contained in:
bors[bot] 2020-08-17 14:23:03 +00:00 committed by GitHub
commit 6826dd044a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 22 additions and 5 deletions

View file

@ -237,8 +237,13 @@ pub enum Status {
Invalid, Invalid,
} }
#[derive(Deserialize, Serialize)]
pub struct StatusParams {
pub status: Status,
}
impl Notification for StatusNotification { impl Notification for StatusNotification {
type Params = Status; type Params = StatusParams;
const METHOD: &'static str = "rust-analyzer/status"; const METHOD: &'static str = "rust-analyzer/status";
} }

View file

@ -13,6 +13,7 @@ use crate::{
lsp_ext, lsp_ext,
main_loop::Task, main_loop::Task,
}; };
use lsp_ext::StatusParams;
impl GlobalState { impl GlobalState {
pub(crate) fn update_configuration(&mut self, config: Config) { pub(crate) fn update_configuration(&mut self, config: Config) {
@ -85,7 +86,9 @@ impl GlobalState {
Status::Invalid => lsp_ext::Status::Invalid, Status::Invalid => lsp_ext::Status::Invalid,
Status::NeedsReload => lsp_ext::Status::NeedsReload, Status::NeedsReload => lsp_ext::Status::NeedsReload,
}; };
self.send_notification::<lsp_ext::StatusNotification>(lsp_status); self.send_notification::<lsp_ext::StatusNotification>(StatusParams {
status: lsp_status,
});
} }
} }
pub(crate) fn fetch_workspaces(&mut self) { pub(crate) fn fetch_workspaces(&mut self) {

View file

@ -412,7 +412,13 @@ Reloads project information (that is, re-executes `cargo metadata`).
**Method:** `rust-analyzer/status` **Method:** `rust-analyzer/status`
**Notification:** `"loading" | "ready" | "invalid" | "needsReload"` **Notification:**
```typescript
interface StatusParams {
status: "loading" | "ready" | "invalid" | "needsReload",
}
```
This notification is sent from server to client. This notification is sent from server to client.
The client can use it to display persistent status to the user (in modline). The client can use it to display persistent status to the user (in modline).

View file

@ -36,7 +36,7 @@ export class Ctx {
res.pushCleanup(client.start()); res.pushCleanup(client.start());
await client.onReady(); await client.onReady();
client.onNotification(ra.status, (status) => res.setStatus(status)); client.onNotification(ra.status, (params) => res.setStatus(params.status));
return res; return res;
} }

View file

@ -8,7 +8,10 @@ export const analyzerStatus = new lc.RequestType<null, string, void>("rust-analy
export const memoryUsage = new lc.RequestType<null, string, void>("rust-analyzer/memoryUsage"); export const memoryUsage = new lc.RequestType<null, string, void>("rust-analyzer/memoryUsage");
export type Status = "loading" | "ready" | "invalid" | "needsReload"; export type Status = "loading" | "ready" | "invalid" | "needsReload";
export const status = new lc.NotificationType<Status>("rust-analyzer/status"); export interface StatusParams {
status: Status;
}
export const status = new lc.NotificationType<StatusParams>("rust-analyzer/status");
export const reloadWorkspace = new lc.RequestType<null, null, void>("rust-analyzer/reloadWorkspace"); export const reloadWorkspace = new lc.RequestType<null, null, void>("rust-analyzer/reloadWorkspace");