mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-29 13:25:09 +00:00
Encapsulate inlay hints activation
This commit is contained in:
parent
b8368f09b4
commit
9ead314005
2 changed files with 39 additions and 38 deletions
|
@ -1,6 +1,42 @@
|
||||||
import * as vscode from 'vscode';
|
import * as vscode from 'vscode';
|
||||||
import * as lc from 'vscode-languageclient';
|
import * as lc from 'vscode-languageclient';
|
||||||
import { Server } from './server';
|
import { Server } from './server';
|
||||||
|
import { Ctx } from './ctx';
|
||||||
|
|
||||||
|
export function activateInlayHints(ctx: Ctx) {
|
||||||
|
const hintsUpdater = new HintsUpdater();
|
||||||
|
hintsUpdater.refreshHintsForVisibleEditors().then(() => {
|
||||||
|
// vscode may ignore top level hintsUpdater.refreshHintsForVisibleEditors()
|
||||||
|
// so update the hints once when the focus changes to guarantee their presence
|
||||||
|
let editorChangeDisposable: vscode.Disposable | null = null;
|
||||||
|
editorChangeDisposable = vscode.window.onDidChangeActiveTextEditor(
|
||||||
|
_ => {
|
||||||
|
if (editorChangeDisposable !== null) {
|
||||||
|
editorChangeDisposable.dispose();
|
||||||
|
}
|
||||||
|
return hintsUpdater.refreshHintsForVisibleEditors();
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
ctx.pushCleanup(
|
||||||
|
vscode.window.onDidChangeVisibleTextEditors(_ =>
|
||||||
|
hintsUpdater.refreshHintsForVisibleEditors(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
ctx.pushCleanup(
|
||||||
|
vscode.workspace.onDidChangeTextDocument(e =>
|
||||||
|
hintsUpdater.refreshHintsForVisibleEditors(e),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
ctx.pushCleanup(
|
||||||
|
vscode.workspace.onDidChangeConfiguration(_ =>
|
||||||
|
hintsUpdater.toggleHintsDisplay(
|
||||||
|
Server.config.displayInlayHints,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
interface InlayHintsParams {
|
interface InlayHintsParams {
|
||||||
textDocument: lc.TextDocumentIdentifier;
|
textDocument: lc.TextDocumentIdentifier;
|
||||||
|
@ -18,7 +54,7 @@ const typeHintDecorationType = vscode.window.createTextEditorDecorationType({
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
export class HintsUpdater {
|
class HintsUpdater {
|
||||||
private displayHints = true;
|
private displayHints = true;
|
||||||
|
|
||||||
public async toggleHintsDisplay(displayHints: boolean): Promise<void> {
|
public async toggleHintsDisplay(displayHints: boolean): Promise<void> {
|
||||||
|
|
|
@ -2,7 +2,7 @@ import * as vscode from 'vscode';
|
||||||
import * as lc from 'vscode-languageclient';
|
import * as lc from 'vscode-languageclient';
|
||||||
|
|
||||||
import * as commands from './commands';
|
import * as commands from './commands';
|
||||||
import { HintsUpdater } from './inlay_hints';
|
import { activateInlayHints } from './inlay_hints';
|
||||||
import { StatusDisplay } from './status_display';
|
import { StatusDisplay } from './status_display';
|
||||||
import * as events from './events';
|
import * as events from './events';
|
||||||
import * as notifications from './notifications';
|
import * as notifications from './notifications';
|
||||||
|
@ -37,10 +37,6 @@ export async function activate(context: vscode.ExtensionContext) {
|
||||||
);
|
);
|
||||||
ctx.pushCleanup(watchStatus);
|
ctx.pushCleanup(watchStatus);
|
||||||
|
|
||||||
function disposeOnDeactivation(disposable: vscode.Disposable) {
|
|
||||||
context.subscriptions.push(disposable);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Notifications are events triggered by the language server
|
// Notifications are events triggered by the language server
|
||||||
const allNotifications: [string, lc.GenericNotificationHandler][] = [
|
const allNotifications: [string, lc.GenericNotificationHandler][] = [
|
||||||
[
|
[
|
||||||
|
@ -71,38 +67,7 @@ export async function activate(context: vscode.ExtensionContext) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Server.config.displayInlayHints) {
|
if (Server.config.displayInlayHints) {
|
||||||
const hintsUpdater = new HintsUpdater();
|
activateInlayHints(ctx);
|
||||||
hintsUpdater.refreshHintsForVisibleEditors().then(() => {
|
|
||||||
// vscode may ignore top level hintsUpdater.refreshHintsForVisibleEditors()
|
|
||||||
// so update the hints once when the focus changes to guarantee their presence
|
|
||||||
let editorChangeDisposable: vscode.Disposable | null = null;
|
|
||||||
editorChangeDisposable = vscode.window.onDidChangeActiveTextEditor(
|
|
||||||
_ => {
|
|
||||||
if (editorChangeDisposable !== null) {
|
|
||||||
editorChangeDisposable.dispose();
|
|
||||||
}
|
|
||||||
return hintsUpdater.refreshHintsForVisibleEditors();
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
disposeOnDeactivation(
|
|
||||||
vscode.window.onDidChangeVisibleTextEditors(_ =>
|
|
||||||
hintsUpdater.refreshHintsForVisibleEditors(),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
disposeOnDeactivation(
|
|
||||||
vscode.workspace.onDidChangeTextDocument(e =>
|
|
||||||
hintsUpdater.refreshHintsForVisibleEditors(e),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
disposeOnDeactivation(
|
|
||||||
vscode.workspace.onDidChangeConfiguration(_ =>
|
|
||||||
hintsUpdater.toggleHintsDisplay(
|
|
||||||
Server.config.displayInlayHints,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue