Skip to content

Commit 790e61b

Browse files
committed
load user and extension snippets only when needed
1 parent fe38e9b commit 790e61b

11 files changed

Lines changed: 437 additions & 392 deletions

File tree

src/vs/platform/actions/test/common/menuService.test.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -219,11 +219,19 @@ suite('MenuService', function () {
219219

220220
MenuRegistry.addCommand({ id: 'b', title: 'Implicit' });
221221

222-
const [first, second] = MenuRegistry.getMenuItems(MenuId.CommandPalette);
223-
assert.equal(first.command.id, 'a');
224-
assert.equal(first.command.title, 'Explicit');
225-
226-
assert.equal(second.command.id, 'b');
227-
assert.equal(second.command.title, 'Implicit');
222+
let foundA = false;
223+
let foundB = false;
224+
for (const item of MenuRegistry.getMenuItems(MenuId.CommandPalette)) {
225+
if (item.command.id === 'a') {
226+
assert.equal(item.command.title, 'Explicit');
227+
foundA = true;
228+
}
229+
if (item.command.id === 'b') {
230+
assert.equal(item.command.title, 'Implicit');
231+
foundB = true;
232+
}
233+
}
234+
assert.equal(foundA, true);
235+
assert.equal(foundB, true);
228236
});
229237
});

src/vs/workbench/parts/snippets/electron-browser/TMSnippets.ts

Lines changed: 0 additions & 199 deletions
This file was deleted.

src/vs/workbench/parts/snippets/electron-browser/insertSnippet.ts

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { IQuickOpenService, IPickOpenEntry } from 'vs/platform/quickOpen/common/
1212
import { IModeService } from 'vs/editor/common/services/modeService';
1313
import { LanguageId } from 'vs/editor/common/modes';
1414
import { ICommandService, CommandsRegistry } from 'vs/platform/commands/common/commands';
15-
import { ISnippetsService, ISnippet } from 'vs/workbench/parts/snippets/electron-browser/snippetsService';
15+
import { ISnippetsService, ISnippet } from 'vs/workbench/parts/snippets/electron-browser/snippets.contribution';
1616
import { SnippetController2 } from 'vs/editor/contrib/snippet/browser/snippetController2';
1717
import { EditorContextKeys } from 'vs/editor/common/editorContextKeys';
1818

@@ -75,14 +75,14 @@ class InsertSnippetAction extends EditorAction {
7575
const { lineNumber, column } = editor.getPosition();
7676
let { snippet, name, langId } = Args.fromUser(arg);
7777

78-
return new TPromise<ISnippet>((resolve, reject) => {
78+
return new TPromise<ISnippet>(async (resolve, reject) => {
7979

8080
if (snippet) {
8181
return resolve({
8282
codeSnippet: snippet,
8383
description: undefined,
8484
name: undefined,
85-
extensionName: undefined,
85+
source: undefined,
8686
prefix: undefined
8787
});
8888
}
@@ -105,7 +105,7 @@ class InsertSnippetAction extends EditorAction {
105105

106106
if (name) {
107107
// take selected snippet
108-
snippetService.visitSnippets(languageId, snippet => {
108+
(await snippetService.getSnippets(languageId)).every(snippet => {
109109
if (snippet.name !== name) {
110110
return true;
111111
}
@@ -114,14 +114,12 @@ class InsertSnippetAction extends EditorAction {
114114
});
115115
} else {
116116
// let user pick a snippet
117-
const picks: ISnippetPick[] = [];
118-
snippetService.visitSnippets(languageId, snippet => {
119-
picks.push({
117+
const picks: ISnippetPick[] = (await snippetService.getSnippets(languageId)).map(snippet => {
118+
return {
120119
label: snippet.prefix,
121120
detail: snippet.description,
122121
snippet
123-
});
124-
return true;
122+
};
125123
});
126124
return quickOpenService.pick(picks, { matchOnDetail: true }).then(pick => resolve(pick && pick.snippet), reject);
127125
}

src/vs/workbench/parts/snippets/electron-browser/snippets.contribution.ts

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,6 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55
'use strict';
6-
7-
import 'vs/workbench/parts/snippets/electron-browser/snippetsService';
8-
import 'vs/workbench/parts/snippets/electron-browser/insertSnippet';
9-
import 'vs/workbench/parts/snippets/electron-browser/tabCompletion';
10-
116
import { CommandsRegistry } from 'vs/platform/commands/common/commands';
127
import { fileExists, writeFile } from 'vs/base/node/pfs';
138
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
@@ -21,10 +16,31 @@ import { Registry } from 'vs/platform/registry/common/platform';
2116
import * as errors from 'vs/base/common/errors';
2217
import * as JSONContributionRegistry from 'vs/platform/jsonschemas/common/jsonContributionRegistry';
2318
import * as nls from 'vs/nls';
24-
import * as snippetsTracker from './snippetsTracker';
25-
import * as tmSnippets from './TMSnippets';
26-
import * as winjs from 'vs/base/common/winjs.base';
27-
import * as workbenchContributions from 'vs/workbench/common/contributions';
19+
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
20+
import { LanguageId } from 'vs/editor/common/modes';
21+
import { TPromise } from 'vs/base/common/winjs.base';
22+
23+
export const ISnippetsService = createDecorator<ISnippetsService>('snippetService');
24+
25+
export interface ISnippetsService {
26+
27+
_serviceBrand: any;
28+
29+
getSnippets(languageId: LanguageId): TPromise<ISnippet[]>;
30+
31+
getSnippetsSync(languageId: LanguageId): ISnippet[];
32+
}
33+
34+
35+
export interface ISnippet {
36+
readonly name: string;
37+
readonly prefix: string;
38+
readonly description: string;
39+
readonly codeSnippet: string;
40+
readonly source: string;
41+
readonly isBogous?: boolean;
42+
readonly isFromExtension?: boolean;
43+
}
2844

2945
namespace OpenSnippetsAction {
3046

@@ -37,7 +53,7 @@ namespace OpenSnippetsAction {
3753
const environmentService = accessor.get(IEnvironmentService);
3854
const windowsService = accessor.get(IWindowsService);
3955

40-
function openFile(filePath: string): winjs.TPromise<void> {
56+
function openFile(filePath: string): TPromise<void> {
4157
return windowsService.openWindow([filePath], { forceReuseWindow: true });
4258
}
4359

@@ -86,7 +102,7 @@ namespace OpenSnippetsAction {
86102
});
87103
});
88104
}
89-
return winjs.TPromise.as(null);
105+
return TPromise.as(null);
90106
});
91107
});
92108

@@ -136,11 +152,3 @@ const schema: IJSONSchema = {
136152
Registry
137153
.as<JSONContributionRegistry.IJSONContributionRegistry>(JSONContributionRegistry.Extensions.JSONContribution)
138154
.registerSchema(schemaId, schema);
139-
140-
Registry
141-
.as<workbenchContributions.IWorkbenchContributionsRegistry>(workbenchContributions.Extensions.Workbench)
142-
.registerWorkbenchContribution(snippetsTracker.SnippetsTracker);
143-
144-
Registry
145-
.as<workbenchContributions.IWorkbenchContributionsRegistry>(workbenchContributions.Extensions.Workbench)
146-
.registerWorkbenchContribution(tmSnippets.MainProcessTextMateSnippet);

0 commit comments

Comments
 (0)