vscode: eliminate floating promises and insane amount of resource handle leaks

This commit is contained in:
Veetaha 2020-02-05 22:39:47 +02:00
parent 8d0f7da2f5
commit 8153b60e1d
8 changed files with 34 additions and 19 deletions

View file

@ -21,7 +21,7 @@
"vscode:prepublish": "tsc && rollup -c",
"package": "vsce package",
"watch": "tsc --watch",
"fmt": "tsfmt -r && tslint -c tslint.json 'src/**/*.ts' --fix"
"fmt": "tsfmt -r && tslint -p tsconfig.json -c tslint.json 'src/**/*.ts' --fix"
},
"dependencies": {
"jsonc-parser": "^2.1.0",

View file

@ -35,7 +35,7 @@ export function showReferences(ctx: Ctx): Cmd {
export function applySourceChange(ctx: Ctx): Cmd {
return async (change: sourceChange.SourceChange) => {
sourceChange.applySourceChange(ctx, change);
await sourceChange.applySourceChange(ctx, change);
};
}

View file

@ -22,6 +22,7 @@ export function syntaxTree(ctx: Ctx): Cmd {
if (doc.languageId !== 'rust') return;
afterLs(() => tdcp.eventEmitter.fire(tdcp.uri));
},
null,
ctx.subscriptions,
);
@ -30,6 +31,7 @@ export function syntaxTree(ctx: Ctx): Cmd {
if (!editor || editor.document.languageId !== 'rust') return;
tdcp.eventEmitter.fire(tdcp.uri);
},
null,
ctx.subscriptions,
);

View file

@ -45,7 +45,7 @@ export class Config {
private prevCargoWatchOptions: null | CargoWatchOptions = null;
constructor(ctx: vscode.ExtensionContext) {
vscode.workspace.onDidChangeConfiguration(_ => this.refresh(), ctx.subscriptions);
vscode.workspace.onDidChangeConfiguration(_ => this.refresh(), null, ctx.subscriptions);
this.refresh();
}

View file

@ -32,6 +32,7 @@ export function activateHighlighting(ctx: Ctx) {
vscode.workspace.onDidChangeConfiguration(
_ => highlighter.removeHighlights(),
null,
ctx.subscriptions,
);
@ -52,6 +53,7 @@ export function activateHighlighting(ctx: Ctx) {
);
highlighter.setHighlights(editor, decorations);
},
null,
ctx.subscriptions,
);
}

View file

@ -5,19 +5,27 @@ import { Ctx, sendRequestWithRetry } from './ctx';
export function activateInlayHints(ctx: Ctx) {
const hintsUpdater = new HintsUpdater(ctx);
vscode.window.onDidChangeVisibleTextEditors(async _ => {
await hintsUpdater.refresh();
}, ctx.subscriptions);
vscode.window.onDidChangeVisibleTextEditors(
async _ => hintsUpdater.refresh(),
null,
ctx.subscriptions
);
vscode.workspace.onDidChangeTextDocument(async e => {
if (e.contentChanges.length === 0) return;
if (e.document.languageId !== 'rust') return;
vscode.workspace.onDidChangeTextDocument(
async event => {
if (event.contentChanges.length !== 0) return;
if (event.document.languageId !== 'rust') return;
await hintsUpdater.refresh();
}, ctx.subscriptions);
},
null,
ctx.subscriptions
);
vscode.workspace.onDidChangeConfiguration(_ => {
hintsUpdater.setEnabled(ctx.config.displayInlayHints);
}, ctx.subscriptions);
vscode.workspace.onDidChangeConfiguration(
async _ => hintsUpdater.setEnabled(ctx.config.displayInlayHints),
null,
ctx.subscriptions
);
ctx.onDidRestart(_ => hintsUpdater.setEnabled(ctx.config.displayInlayHints));
}

View file

@ -9,12 +9,14 @@ const spinnerFrames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '
export function activateStatusDisplay(ctx: Ctx) {
const statusDisplay = new StatusDisplay(ctx.config.cargoWatchOptions.command);
ctx.pushCleanup(statusDisplay);
ctx.onDidRestart(client => {
client.onProgress(WorkDoneProgress.type, 'rustAnalyzer/cargoWatcher', params => statusDisplay.handleProgressNotification(params));
});
ctx.onDidRestart(client => ctx.pushCleanup(client.onProgress(
WorkDoneProgress.type,
'rustAnalyzer/cargoWatcher',
params => statusDisplay.handleProgressNotification(params)
)));
}
class StatusDisplay implements vscode.Disposable, Disposable {
class StatusDisplay implements Disposable {
packageName?: string;
private i: number = 0;

View file

@ -4,6 +4,7 @@
true,
"always"
],
"prefer-const": true
"prefer-const": true,
"no-floating-promises": true
}
}