Skip to content

Commit 22f0337

Browse files
committed
cache the scripts for the hover
1 parent 73b7246 commit 22f0337

3 files changed

Lines changed: 26 additions & 10 deletions

File tree

extensions/npm/src/main.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ import * as httpRequest from 'request-light';
88
import * as vscode from 'vscode';
99
import { addJSONProviders } from './features/jsonContributions';
1010
import { NpmScriptsTreeDataProvider } from './npmView';
11-
import { invalidateScriptsCache, NpmTaskProvider } from './tasks';
12-
import { NpmScriptHoverProvider } from './scriptHover';
11+
import { invalidateTasksCache, NpmTaskProvider } from './tasks';
12+
import { invalidateHoverScriptsCache, NpmScriptHoverProvider } from './scriptHover';
1313

1414
export async function activate(context: vscode.ExtensionContext): Promise<void> {
1515
const taskProvider = registerTaskProvider(context);
@@ -20,7 +20,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<void>
2020
vscode.workspace.onDidChangeConfiguration((e) => {
2121
configureHttpRequest();
2222
if (e.affectsConfiguration('npm.exclude')) {
23-
invalidateScriptsCache();
23+
invalidateTasksCache();
2424
if (treeDataProvider) {
2525
treeDataProvider.refresh();
2626
}
@@ -35,11 +35,17 @@ export async function activate(context: vscode.ExtensionContext): Promise<void>
3535
}
3636

3737
function registerTaskProvider(context: vscode.ExtensionContext): vscode.Disposable | undefined {
38+
39+
function invalidateScriptCaches() {
40+
invalidateHoverScriptsCache();
41+
invalidateTasksCache();
42+
}
43+
3844
if (vscode.workspace.workspaceFolders) {
3945
let watcher = vscode.workspace.createFileSystemWatcher('**/package.json');
40-
watcher.onDidChange((_e) => invalidateScriptsCache());
41-
watcher.onDidDelete((_e) => invalidateScriptsCache());
42-
watcher.onDidCreate((_e) => invalidateScriptsCache());
46+
watcher.onDidChange((_e) => invalidateScriptCaches());
47+
watcher.onDidDelete((_e) => invalidateScriptCaches());
48+
watcher.onDidCreate((_e) => invalidateScriptCaches());
4349
context.subscriptions.push(watcher);
4450

4551
let provider: vscode.TaskProvider = new NpmTaskProvider(context);
@@ -74,7 +80,6 @@ function registerHoverProvider(context: vscode.ExtensionContext): NpmScriptHover
7480
return undefined;
7581
}
7682

77-
7883
function configureHttpRequest() {
7984
const httpSettings = vscode.workspace.getConfiguration('http');
8085
httpRequest.configure(httpSettings.get<string>('proxy', ''), httpSettings.get<boolean>('proxyStrictSSL', true));

extensions/npm/src/scriptHover.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@ import * as nls from 'vscode-nls';
1515

1616
const localize = nls.loadMessageBundle();
1717

18+
let cachedDocument: Uri | undefined = undefined;
19+
let cachedScriptsMap: Map<string, [number, number, string]> | undefined = undefined;
20+
21+
export function invalidateHoverScriptsCache() {
22+
cachedDocument = undefined;
23+
}
24+
1825
export class NpmScriptHoverProvider implements HoverProvider {
1926
private extensionContext: ExtensionContext;
2027

@@ -25,10 +32,14 @@ export class NpmScriptHoverProvider implements HoverProvider {
2532
}
2633

2734
public provideHover(document: TextDocument, position: Position, _token: CancellationToken): ProviderResult<Hover> {
28-
let result = findAllScriptRanges(document.getText());
2935
let hover: Hover | undefined = undefined;
3036

31-
result.forEach((value, key) => {
37+
if (!cachedDocument || cachedDocument.fsPath !== document.uri.fsPath) {
38+
cachedScriptsMap = findAllScriptRanges(document.getText());
39+
cachedDocument = document.uri;
40+
}
41+
42+
cachedScriptsMap!.forEach((value, key) => {
3243
let start = document.positionAt(value[0]);
3344
let end = document.positionAt(value[0] + value[1]);
3445
let range = new Range(start, end);

extensions/npm/src/tasks.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export class NpmTaskProvider implements TaskProvider {
4141
}
4242
}
4343

44-
export function invalidateScriptsCache() {
44+
export function invalidateTasksCache() {
4545
cachedTasks = undefined;
4646
}
4747

0 commit comments

Comments
 (0)