Switch to LSP inlay hints
This commit is contained in:
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user