Skip to content

Commit a009221

Browse files
committed
Merge remote-tracking branch 'origin/master' into joao/tree-dnd
2 parents 39e2460 + 6528137 commit a009221

83 files changed

Lines changed: 2396 additions & 2316 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

cgmanifest.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,18 @@
105105
"license": "MIT",
106106
"version": "0.14.0"
107107
},
108+
{
109+
"component": {
110+
"type": "git",
111+
"git": {
112+
"name": "vscode-octicons-font",
113+
"repositoryUrl": "https://github.com/Microsoft/vscode-octicons-font",
114+
"commitHash": "174697a8d28a65dc6600c44d239bd75f7d157c71"
115+
}
116+
},
117+
"license": "MIT",
118+
"version": "1.0.0"
119+
},
108120
{
109121
"component": {
110122
"type": "npm",

extensions/npm/src/features/packageJSONContribution.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export class PackageJSONContribution implements IJSONContribution {
2626
'shelljs', 'gulp', 'yargs', 'browserify', 'minimatch', 'react', 'less', 'prompt', 'inquirer', 'ws', 'event-stream', 'inherits', 'mysql', 'esprima',
2727
'jsdom', 'stylus', 'when', 'readable-stream', 'aws-sdk', 'concat-stream', 'chai', 'Thenable', 'wrench'];
2828

29-
private knownScopes = ['@types', '@angular'];
29+
private knownScopes = ['@types', '@angular', '@babel', '@nuxtjs', '@vue', '@bazel'];
3030
private xhr: XHRRequest;
3131

3232
public getDocumentSelector(): DocumentSelector {
@@ -163,16 +163,20 @@ export class PackageJSONContribution implements IJSONContribution {
163163
}
164164
} else if (segments.length === 2 && segments[0].length > 1) {
165165
let scope = segments[0].substr(1);
166-
let queryUrl = `https://registry.npmjs.org/-/v1/search?text=scope:${scope}%20${segments[1]}&size=${SCOPED_LIMIT}&popularity=1.0`;
166+
let name = segments[1];
167+
if (name.length < 4) {
168+
name = '';
169+
}
170+
let queryUrl = `https://api.npms.io/v2/search?q=scope:${scope}%20${name}&size=250`;
167171
return this.xhr({
168172
url: queryUrl,
169173
agent: USER_AGENT
170174
}).then((success) => {
171175
if (success.status === 200) {
172176
try {
173177
const obj = JSON.parse(success.responseText);
174-
if (obj && Array.isArray(obj.objects)) {
175-
const objects = <{ package: { name: string; version: string, description: string; } }[]>obj.objects;
178+
if (obj && Array.isArray(obj.results)) {
179+
const objects = <{ package: { name: string; version: string, description: string; } }[]>obj.results;
176180
for (let object of objects) {
177181
if (object.package && object.package.name) {
178182
const name = object.package.name;

extensions/typescript-language-features/src/features/completions.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,7 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider
480480
item.additionalTextEdits = codeAction.additionalTextEdits;
481481

482482
if (detail && item.useCodeSnippet) {
483-
const shouldCompleteFunction = await this.isValidFunctionCompletionContext(filepath, item.position, token);
483+
const shouldCompleteFunction = await this.isValidFunctionCompletionContext(filepath, item.position, item.document, token);
484484
if (shouldCompleteFunction) {
485485
const { snippet, parameterCount } = snippetForFunctionCall(item, detail.displayParts);
486486
item.insertText = snippet;
@@ -630,30 +630,33 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider
630630
private async isValidFunctionCompletionContext(
631631
filepath: string,
632632
position: vscode.Position,
633+
document: vscode.TextDocument,
633634
token: vscode.CancellationToken
634635
): Promise<boolean> {
635636
// Workaround for https://github.com/Microsoft/TypeScript/issues/12677
636637
// Don't complete function calls inside of destructive assigments or imports
637638
try {
638639
const args: Proto.FileLocationRequestArgs = typeConverters.Position.toFileLocationRequestArgs(filepath, position);
639640
const response = await this.client.execute('quickinfo', args, token);
640-
if (response.type !== 'response') {
641+
if (response.type !== 'response' || !response.body) {
641642
return true;
642643
}
643644

644-
const { body } = response;
645-
switch (body && body.kind) {
645+
switch (response.body.kind) {
646646
case 'var':
647647
case 'let':
648648
case 'const':
649649
case 'alias':
650650
return false;
651-
default:
652-
return true;
653651
}
654652
} catch (e) {
655653
return true;
656654
}
655+
656+
// Don't complete function call if there is already something that looks like a funciton call
657+
// https://github.com/Microsoft/vscode/issues/18131
658+
const after = document.lineAt(position.line).text.slice(position.character);
659+
return after.match(/^\s*\(/g) === null;
657660
}
658661
}
659662

extensions/typescript-language-features/src/test/completions.test.ts

Lines changed: 106 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,35 +10,46 @@ import { disposeAll } from '../utils/dispose';
1010

1111
const testDocumentUri = vscode.Uri.parse('untitled:test.ts');
1212

13-
const configOverrides: { readonly [key: string]: any } = Object.freeze({
14-
'editor.suggestSelection': 'first',
15-
'typescript.suggest.completeFunctionCalls': false,
16-
});
13+
type VsCodeConfiguration = { [key: string]: any };
14+
15+
async function updateConfig(newConfig: VsCodeConfiguration): Promise<VsCodeConfiguration> {
16+
const oldConfig: VsCodeConfiguration = {};
17+
const config = vscode.workspace.getConfiguration(undefined, testDocumentUri);
18+
for (const configKey of Object.keys(newConfig)) {
19+
oldConfig[configKey] = config.get(configKey);
20+
await new Promise((resolve, reject) =>
21+
config.update(configKey, newConfig[configKey], vscode.ConfigurationTarget.Global)
22+
.then(() => resolve(), reject));
23+
}
24+
return oldConfig;
25+
}
26+
27+
namespace Config {
28+
export const suggestSelection = 'editor.suggestSelection';
29+
export const completeFunctionCalls = 'typescript.suggest.completeFunctionCalls';
30+
}
1731

1832
suite('TypeScript Completions', () => {
33+
const configDefaults: VsCodeConfiguration = Object.freeze({
34+
[Config.suggestSelection]: 'first',
35+
[Config.completeFunctionCalls]: false,
36+
});
37+
1938
const _disposables: vscode.Disposable[] = [];
2039
let oldConfig: { [key: string]: any } = {};
2140

2241
setup(async () => {
2342
await wait(100);
2443

25-
// save off config and update overrides
26-
oldConfig = {};
27-
const config = vscode.workspace.getConfiguration(undefined, testDocumentUri);
28-
for (const configKey of Object.keys(configOverrides)) {
29-
oldConfig[configKey] = config.get(configKey);
30-
await new Promise((resolve, reject) => config.update(configKey, configOverrides[configKey], vscode.ConfigurationTarget.Global).then(() => resolve(), reject));
31-
}
44+
// Save off config and apply defaults
45+
oldConfig = await updateConfig(configDefaults);
3246
});
3347

3448
teardown(async () => {
3549
disposeAll(_disposables);
3650

3751
// Restore config
38-
const config = vscode.workspace.getConfiguration(undefined, testDocumentUri);
39-
for (const configKey of Object.keys(oldConfig)) {
40-
await new Promise((resolve, reject) => config.update(configKey, oldConfig[configKey], vscode.ConfigurationTarget.Global).then(() => resolve(), reject));
41-
}
52+
await updateConfig(oldConfig);
4253

4354
return vscode.commands.executeCommand('workbench.action.closeAllEditors');
4455
});
@@ -176,6 +187,83 @@ suite('TypeScript Completions', () => {
176187
`abc`
177188
));
178189
});
190+
191+
test('completeFunctionCalls should complete function parameters when at end of word', async () => {
192+
await updateConfig({
193+
[Config.completeFunctionCalls]: true,
194+
});
195+
196+
// Complete with-in word
197+
await createTestEditor(testDocumentUri,
198+
`function abcdef(x, y, z) { }`,
199+
`abcdef$0`
200+
);
201+
202+
const document = await acceptFirstSuggestion(testDocumentUri, _disposables);
203+
assert.strictEqual(
204+
document.getText(),
205+
joinLines(
206+
`function abcdef(x, y, z) { }`,
207+
`abcdef(x, y, z)`
208+
));
209+
});
210+
211+
test.skip('completeFunctionCalls should complete function parameters when within word', async () => {
212+
await updateConfig({
213+
[Config.completeFunctionCalls]: true,
214+
});
215+
216+
await createTestEditor(testDocumentUri,
217+
`function abcdef(x, y, z) { }`,
218+
`abcd$0ef`
219+
);
220+
221+
const document = await acceptFirstSuggestion(testDocumentUri, _disposables);
222+
assert.strictEqual(
223+
document.getText(),
224+
joinLines(
225+
`function abcdef(x, y, z) { }`,
226+
`abcdef(x, y, z)`
227+
));
228+
});
229+
230+
test('completeFunctionCalls should not complete function parameters at end of word if we are already in something that looks like a function call, #18131', async () => {
231+
await updateConfig({
232+
[Config.completeFunctionCalls]: true,
233+
});
234+
235+
await createTestEditor(testDocumentUri,
236+
`function abcdef(x, y, z) { }`,
237+
`abcdef$0(1, 2, 3)`
238+
);
239+
240+
const document = await acceptFirstSuggestion(testDocumentUri, _disposables);
241+
assert.strictEqual(
242+
document.getText(),
243+
joinLines(
244+
`function abcdef(x, y, z) { }`,
245+
`abcdef(1, 2, 3)`
246+
));
247+
});
248+
249+
test.skip('completeFunctionCalls should not complete function parameters within word if we are already in something that looks like a function call, #18131', async () => {
250+
await updateConfig({
251+
[Config.completeFunctionCalls]: true,
252+
});
253+
254+
await createTestEditor(testDocumentUri,
255+
`function abcdef(x, y, z) { }`,
256+
`abcd$0ef(1, 2, 3)`
257+
);
258+
259+
const document = await acceptFirstSuggestion(testDocumentUri, _disposables);
260+
assert.strictEqual(
261+
document.getText(),
262+
joinLines(
263+
`function abcdef(x, y, z) { }`,
264+
`abcdef(1, 2, 3)`
265+
));
266+
});
179267
});
180268

181269
const joinLines = (...args: string[]) => args.join('\n');
@@ -187,6 +275,9 @@ async function acceptFirstSuggestion(uri: vscode.Uri, _disposables: vscode.Dispo
187275
const didSuggest = onDidSuggest(_disposables);
188276
await vscode.commands.executeCommand('editor.action.triggerSuggest');
189277
await didSuggest;
278+
// TODO: depends on reverting fix for https://github.com/Microsoft/vscode/issues/64257
279+
// Make sure we have time to resolve the suggestion because `acceptSelectedSuggestion` doesn't
280+
await wait(40);
190281
await vscode.commands.executeCommand('acceptSelectedSuggestion');
191282
return await didChangeDocument;
192283
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
"vscode-nsfw": "1.1.1",
5252
"vscode-proxy-agent": "0.2.0",
5353
"vscode-ripgrep": "^1.2.5",
54-
"vscode-sqlite3": "4.0.6",
54+
"vscode-sqlite3": "4.0.7",
5555
"vscode-textmate": "^4.0.1",
5656
"vscode-xterm": "3.10.0-beta11-reflow",
5757
"winreg": "^1.2.4",

src/tsconfig.strictNullChecks.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,7 @@
241241
"./vs/editor/contrib/referenceSearch/test/referencesModel.test.ts",
242242
"./vs/editor/contrib/rename/rename.ts",
243243
"./vs/editor/contrib/rename/renameInputField.ts",
244+
"./vs/editor/contrib/snippet/snippetController2.ts",
244245
"./vs/editor/contrib/snippet/snippetParser.ts",
245246
"./vs/editor/contrib/snippet/snippetVariables.ts",
246247
"./vs/editor/contrib/snippet/test/snippetParser.test.ts",
@@ -548,6 +549,7 @@
548549
"./vs/workbench/browser/parts/quickinput/quickInputBox.ts",
549550
"./vs/workbench/browser/parts/quickinput/quickInputUtils.ts",
550551
"./vs/workbench/browser/parts/quickopen/quickopen.ts",
552+
"./vs/workbench/browser/parts/sidebar/sidebarPart.ts",
551553
"./vs/workbench/browser/parts/statusbar/statusbar.ts",
552554
"./vs/workbench/browser/parts/statusbar/statusbarPart.ts",
553555
"./vs/workbench/browser/parts/views/panelViewlet.ts",
@@ -571,6 +573,7 @@
571573
"./vs/workbench/common/theme.ts",
572574
"./vs/workbench/common/viewlet.ts",
573575
"./vs/workbench/common/views.ts",
576+
"./vs/workbench/electron-browser/actions.ts",
574577
"./vs/workbench/electron-browser/resources.ts",
575578
"./vs/workbench/electron-browser/window.ts",
576579
"./vs/workbench/parts/backup/common/backupRestorer.ts",
@@ -638,6 +641,7 @@
638641
"./vs/workbench/parts/output/common/output.ts",
639642
"./vs/workbench/parts/output/common/outputLinkComputer.ts",
640643
"./vs/workbench/parts/output/common/outputLinkProvider.ts",
644+
"./vs/workbench/parts/performance/electron-browser/startupTimings.ts",
641645
"./vs/workbench/parts/preferences/browser/settingsWidgets.ts",
642646
"./vs/workbench/parts/preferences/common/smartSnippetInserter.ts",
643647
"./vs/workbench/parts/preferences/test/common/smartSnippetInserter.test.ts",
@@ -856,6 +860,7 @@
856860
"./vs/workbench/services/themes/common/workbenchThemeService.ts",
857861
"./vs/workbench/services/themes/electron-browser/fileIconThemeData.ts",
858862
"./vs/workbench/services/themes/electron-browser/fileIconThemeStore.ts",
863+
"./vs/workbench/services/timer/electron-browser/timerService.ts",
859864
"./vs/workbench/services/title/common/titleService.ts",
860865
"./vs/workbench/services/viewlet/browser/viewlet.ts",
861866
"./vs/workbench/services/workspace/common/workspaceEditing.ts",
@@ -869,4 +874,4 @@
869874
"exclude": [
870875
"./typings/require-monaco.d.ts"
871876
]
872-
}
877+
}

src/vs/base/browser/htmlContentRenderer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import * as DOM from 'vs/base/browser/dom';
77
import { defaultGenerator } from 'vs/base/common/idGenerator';
88
import { escape } from 'vs/base/common/strings';
9-
import { removeMarkdownEscapes, IMarkdownString, MarkdownString } from 'vs/base/common/htmlContent';
9+
import { removeMarkdownEscapes, IMarkdownString } from 'vs/base/common/htmlContent';
1010
import * as marked from 'vs/base/common/marked/marked';
1111
import { IMouseEvent } from 'vs/base/browser/mouseEvent';
1212
import { IDisposable } from 'vs/base/common/lifecycle';
@@ -211,7 +211,7 @@ export function renderMarkdown(markdown: IMarkdownString, options: RenderOptions
211211
}
212212

213213
const markedOptions: marked.MarkedOptions = {
214-
sanitize: markdown instanceof MarkdownString ? markdown.sanitize : true,
214+
sanitize: true,
215215
renderer
216216
};
217217

src/vs/base/browser/ui/octiconLabel/octicons/README.md

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)