mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-26 04:53:34 +00:00
Spec better runnables
This commit is contained in:
parent
0303982119
commit
a83ab820a4
4 changed files with 49 additions and 38 deletions
|
@ -87,6 +87,9 @@ pub fn server_capabilities(client_caps: &ClientCapabilities) -> ServerCapabiliti
|
|||
"ssr": true,
|
||||
"onEnter": true,
|
||||
"parentModule": true,
|
||||
"runnables": {
|
||||
"kinds": [ "cargo" ],
|
||||
},
|
||||
})),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -110,7 +110,7 @@ pub enum Runnables {}
|
|||
impl Request for Runnables {
|
||||
type Params = RunnablesParams;
|
||||
type Result = Vec<Runnable>;
|
||||
const METHOD: &'static str = "rust-analyzer/runnables";
|
||||
const METHOD: &'static str = "experimental/runnables";
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Debug)]
|
||||
|
|
|
@ -311,6 +311,50 @@ Moreover, it would be cool if editors didn't need to implement even basic langua
|
|||
This is how `SelectionRange` request works.
|
||||
* Alternatively, should we perhaps flag certain `SelectionRange`s as being brace pairs?
|
||||
|
||||
## Runnables
|
||||
|
||||
**Issue:** https://github.com/microsoft/language-server-protocol/issues/944
|
||||
|
||||
**Server Capability:** `{ "runnables": { "kinds": string[] } }`
|
||||
|
||||
This request is send from client to server to get the list of things that can be run (tests, binaries, `cargo check -p`).
|
||||
|
||||
**Method:** `experimental/runnables`
|
||||
|
||||
**Request:**
|
||||
|
||||
```typescript
|
||||
interface RunnablesParams {
|
||||
textDocument: TextDocumentIdentifier;
|
||||
/// If null, compute runnables for the whole file.
|
||||
position?: Position;
|
||||
}
|
||||
```
|
||||
|
||||
**Response:** `Runnable[]`
|
||||
|
||||
```typescript
|
||||
interface Runnable {
|
||||
label: string;
|
||||
/// If this Runnable is associated with a specific function/module, etc, the location of this item
|
||||
location?: LocationLink;
|
||||
/// Running things is necessary technology specific, `kind` needs to be advertised via server capabilities,
|
||||
// the type of `args` is specific to `kind`. The actual running is handled by the client.
|
||||
kind: string;
|
||||
args: any;
|
||||
}
|
||||
```
|
||||
|
||||
rust-analyzer supports only one `kind`, `"cargo"`. The `args` for `"cargo"` look like this:
|
||||
|
||||
```typescript
|
||||
{
|
||||
workspaceRoot?: string;
|
||||
cargoArgs: string[];
|
||||
executableArgs: string[];
|
||||
}
|
||||
```
|
||||
|
||||
## Analyzer Status
|
||||
|
||||
**Method:** `rust-analyzer/analyzerStatus`
|
||||
|
@ -399,39 +443,3 @@ interface InlayHint {
|
|||
label: string,
|
||||
}
|
||||
```
|
||||
|
||||
## Runnables
|
||||
|
||||
**Method:** `rust-analyzer/runnables`
|
||||
|
||||
This request is send from client to server to get the list of things that can be run (tests, binaries, `cargo check -p`).
|
||||
Note that we plan to move this request to `experimental/runnables`, as it is not really Rust-specific, but the current API is not necessary the right one.
|
||||
Upstream issue: https://github.com/microsoft/language-server-protocol/issues/944
|
||||
|
||||
**Request:**
|
||||
|
||||
```typescript
|
||||
interface RunnablesParams {
|
||||
textDocument: TextDocumentIdentifier;
|
||||
/// If null, compute runnables for the whole file.
|
||||
position?: Position;
|
||||
}
|
||||
```
|
||||
|
||||
**Response:** `Runnable[]`
|
||||
|
||||
```typescript
|
||||
interface Runnable {
|
||||
/// The range this runnable is applicable for.
|
||||
range: lc.Range;
|
||||
/// The label to show in the UI.
|
||||
label: string;
|
||||
/// The following fields describe a process to spawn.
|
||||
kind: "cargo" | "rustc" | "rustup";
|
||||
args: string[];
|
||||
/// Args for cargo after `--`.
|
||||
extraArgs: string[];
|
||||
env: { [key: string]: string };
|
||||
cwd: string | null;
|
||||
}
|
||||
```
|
||||
|
|
|
@ -56,7 +56,7 @@ export interface Runnable {
|
|||
executableArgs: string[];
|
||||
};
|
||||
}
|
||||
export const runnables = new lc.RequestType<RunnablesParams, Runnable[], void>("rust-analyzer/runnables");
|
||||
export const runnables = new lc.RequestType<RunnablesParams, Runnable[], void>("experimental/runnables");
|
||||
|
||||
export type InlayHint = InlayHint.TypeHint | InlayHint.ParamHint | InlayHint.ChainingHint;
|
||||
|
||||
|
|
Loading…
Reference in a new issue