Switch to LSP inlay hints

This commit is contained in:
Laurențiu Nicola
2022-04-08 13:20:21 +03:00
parent bc56920757
commit d3d6267112
11 changed files with 76 additions and 223 deletions

View File

@@ -1,55 +0,0 @@
import * as vscode from 'vscode';
import * as ra from './lsp_ext';
import { Ctx, Disposable } from './ctx';
import { sendRequestWithRetry, isRustDocument } from './util';
export function activateInlayHints(ctx: Ctx) {
const maybeUpdater = {
hintsProvider: null as Disposable | null,
updateHintsEventEmitter: new vscode.EventEmitter<void>(),
async onConfigChange() {
this.dispose();
const anyEnabled = ctx.config.inlayHints.typeHints
|| ctx.config.inlayHints.parameterHints
|| ctx.config.inlayHints.chainingHints
|| ctx.config.inlayHints.closureReturnTypeHints;
const enabled = ctx.config.inlayHints.enable && anyEnabled;
if (!enabled) return;
const event = this.updateHintsEventEmitter.event;
this.hintsProvider = vscode.languages.registerInlayHintsProvider({ scheme: 'file', language: 'rust' }, new class implements vscode.InlayHintsProvider {
onDidChangeInlayHints = event;
async provideInlayHints(document: vscode.TextDocument, range: vscode.Range, token: vscode.CancellationToken): Promise<vscode.InlayHint[]> {
const request = { textDocument: { uri: document.uri.toString() }, range: { start: range.start, end: range.end } };
const hints = await sendRequestWithRetry(ctx.client, ra.inlayHints, request, token).catch(_ => null);
if (hints == null) {
return [];
} else {
return hints;
}
}
});
},
onDidChangeTextDocument({ contentChanges, document }: vscode.TextDocumentChangeEvent) {
if (contentChanges.length === 0 || !isRustDocument(document)) return;
this.updateHintsEventEmitter.fire();
},
dispose() {
this.hintsProvider?.dispose();
this.hintsProvider = null;
this.updateHintsEventEmitter.dispose();
},
};
ctx.pushCleanup(maybeUpdater);
vscode.workspace.onDidChangeConfiguration(maybeUpdater.onConfigChange, maybeUpdater, ctx.subscriptions);
vscode.workspace.onDidChangeTextDocument(maybeUpdater.onDidChangeTextDocument, maybeUpdater, ctx.subscriptions);
maybeUpdater.onConfigChange().catch(console.error);
}

View File

@@ -2,7 +2,6 @@
* This file mirrors `crates/rust-analyzer/src/lsp_ext.rs` declarations.
*/
import { InlayHint } from "vscode";
import * as lc from "vscode-languageclient";
export interface AnalyzerStatusParams {
@@ -102,12 +101,6 @@ export interface TestInfo {
export const relatedTests = new lc.RequestType<lc.TextDocumentPositionParams, TestInfo[], void>("rust-analyzer/relatedTests");
export interface InlayHintsParams {
textDocument: lc.TextDocumentIdentifier;
range: lc.Range;
}
export const inlayHints = new lc.RequestType<InlayHintsParams, InlayHint[], void>("experimental/inlayHints");
export interface SsrParams {
query: string;
parseOnly: boolean;

View File

@@ -2,7 +2,6 @@ import * as vscode from 'vscode';
import * as os from "os";
import * as commands from './commands';
import { activateInlayHints } from './inlay_hints';
import { Ctx } from './ctx';
import { Config } from './config';
import { log, isValidExecutable, isRustDocument } from './util';
@@ -54,7 +53,6 @@ async function tryActivate(context: vscode.ExtensionContext) {
}
await initCommonContext(context, ctx);
activateInlayHints(ctx);
warnAboutExtensionConflicts();
ctx.pushCleanup(configureLanguage());