/** * This file mirrors `crates/rust-analyzer/src/req.rs` declarations. */ import * as lc from "vscode-languageclient"; type Option = null | T; type Vec = T[]; type FxHashMap = Record; function request(method: string) { return new lc.RequestType(`rust-analyzer/${method}`); } function notification(method: string) { return new lc.NotificationType(method); } export const analyzerStatus = request("analyzerStatus"); export const collectGarbage = request("collectGarbage"); export interface SyntaxTreeParams { textDocument: lc.TextDocumentIdentifier; range: Option; } export const syntaxTree = request("syntaxTree"); export interface ExpandMacroParams { textDocument: lc.TextDocumentIdentifier; position: Option; } export interface ExpandedMacro { name: string; expansion: string; } export const expandMacro = request>("expandMacro"); export interface FindMatchingBraceParams { textDocument: lc.TextDocumentIdentifier; offsets: Vec; } export const findMatchingBrace = request>("findMatchingBrace"); export interface PublishDecorationsParams { uri: string; decorations: Vec; } export interface Decoration { range: lc.Range; tag: string; bindingHash: Option; } export const decorationsRequest = request>("decorationsRequest"); export const parentModule = request>("parentModule"); export interface JoinLinesParams { textDocument: lc.TextDocumentIdentifier; range: lc.Range; } export const joinLines = request("joinLines"); export const onEnter = request>("onEnter"); export interface RunnablesParams { textDocument: lc.TextDocumentIdentifier; position: Option; } export interface Runnable { range: lc.Range; label: string; bin: string; args: Vec; env: FxHashMap; cwd: Option; } export const runnables = request>("runnables"); export const enum InlayKind { TypeHint = "TypeHint", ParameterHint = "ParameterHint", } export interface InlayHint { range: lc.Range; kind: InlayKind; label: string; } export interface InlayHintsParams { textDocument: lc.TextDocumentIdentifier; } export const inlayHints = request>("inlayHints"); export interface SsrParams { arg: string; } export const ssr = request("ssr"); export const publishDecorations = notification("publishDecorations"); export interface SourceChange { label: string; workspaceEdit: lc.WorkspaceEdit; cursorPosition: Option; }