Merge from vscode 3c6f6af7347d38e87bc6406024e8dcf9e9bce229 (#8962)

* Merge from vscode 3c6f6af7347d38e87bc6406024e8dcf9e9bce229

* skip failing tests

* update mac build image
This commit is contained in:
Anthony Dresser
2020-01-27 15:28:17 -08:00
committed by Karl Burtram
parent 0eaee18dc4
commit fefe1454de
481 changed files with 12764 additions and 7836 deletions

View File

@@ -8,7 +8,7 @@ import { compare, startsWith } from 'vs/base/common/strings';
import { Position } from 'vs/editor/common/core/position';
import { IRange, Range } from 'vs/editor/common/core/range';
import { ITextModel } from 'vs/editor/common/model';
import { CompletionItem, CompletionItemKind, CompletionItemProvider, CompletionList, LanguageId, CompletionItemInsertTextRule, CompletionContext, CompletionTriggerKind } from 'vs/editor/common/modes';
import { CompletionItem, CompletionItemKind, CompletionItemProvider, CompletionList, LanguageId, CompletionItemInsertTextRule, CompletionContext, CompletionTriggerKind, CompletionItemLabel } from 'vs/editor/common/modes';
import { IModeService } from 'vs/editor/common/services/modeService';
import { SnippetParser } from 'vs/editor/contrib/snippet/snippetParser';
import { localize } from 'vs/nls';
@@ -18,8 +18,7 @@ import { isPatternInWord } from 'vs/base/common/filters';
export class SnippetCompletion implements CompletionItem {
label: string;
detail: string;
label: CompletionItemLabel;
insertText: string;
documentation?: MarkdownString;
range: IRange | { insert: IRange, replace: IRange };
@@ -31,8 +30,11 @@ export class SnippetCompletion implements CompletionItem {
readonly snippet: Snippet,
range: IRange | { insert: IRange, replace: IRange }
) {
this.label = snippet.prefix;
this.detail = localize('detail.snippet', "{0} ({1})", snippet.description || snippet.name, snippet.source);
this.label = {
name: snippet.prefix,
type: localize('detail.snippet', "{0} ({1})", snippet.description || snippet.name, snippet.source)
};
this.insertText = snippet.codeSnippet;
this.range = range;
this.sortText = `${snippet.snippetSource === SnippetSource.Extension ? 'z' : 'a'}-${snippet.prefix}`;
@@ -46,7 +48,7 @@ export class SnippetCompletion implements CompletionItem {
}
static compareByLabel(a: SnippetCompletion, b: SnippetCompletion): number {
return compare(a.label, b.label);
return compare(a.label.name, b.label.name);
}
}
@@ -139,14 +141,15 @@ export class SnippetCompletionProvider implements CompletionItemProvider {
let item = suggestions[i];
let to = i + 1;
for (; to < suggestions.length && item.label === suggestions[to].label; to++) {
suggestions[to].label = localize('snippetSuggest.longLabel', "{0}, {1}", suggestions[to].label, suggestions[to].snippet.name);
suggestions[to].label.name = localize('snippetSuggest.longLabel', "{0}, {1}", suggestions[to].label.name, suggestions[to].snippet.name);
}
if (to > i + 1) {
suggestions[i].label = localize('snippetSuggest.longLabel', "{0}, {1}", suggestions[i].label, suggestions[i].snippet.name);
suggestions[i].label.name = localize('snippetSuggest.longLabel', "{0}, {1}", suggestions[i].label.name, suggestions[i].snippet.name);
i = to;
}
}
return { suggestions, isDetailsResolved: true };
return { suggestions };
});
}

View File

@@ -83,7 +83,10 @@ suite('SnippetsService', function () {
return provider.provideCompletionItems(model, new Position(1, 4), context)!.then(result => {
assert.equal(result.incomplete, undefined);
assert.equal(result.suggestions.length, 1);
assert.equal(result.suggestions[0].label, 'bar');
assert.deepEqual(result.suggestions[0].label, {
name: 'bar',
type: 'barTest ()'
});
assert.equal((result.suggestions[0].range as any).insert.startColumn, 1);
assert.equal(result.suggestions[0].insertText, 'barCodeSnippet');
});
@@ -115,10 +118,16 @@ suite('SnippetsService', function () {
await provider.provideCompletionItems(model, new Position(1, 3), context)!.then(result => {
assert.equal(result.incomplete, undefined);
assert.equal(result.suggestions.length, 2);
assert.equal(result.suggestions[0].label, 'bar');
assert.deepEqual(result.suggestions[0].label, {
name: 'bar',
type: 'barTest ()'
});
assert.equal(result.suggestions[0].insertText, 's1');
assert.equal((result.suggestions[0].range as any).insert.startColumn, 1);
assert.equal(result.suggestions[1].label, 'bar-bar');
assert.deepEqual(result.suggestions[1].label, {
name: 'bar-bar',
type: 'name ()'
});
assert.equal(result.suggestions[1].insertText, 's2');
assert.equal((result.suggestions[1].range as any).insert.startColumn, 1);
});
@@ -126,7 +135,10 @@ suite('SnippetsService', function () {
await provider.provideCompletionItems(model, new Position(1, 5), context)!.then(result => {
assert.equal(result.incomplete, undefined);
assert.equal(result.suggestions.length, 1);
assert.equal(result.suggestions[0].label, 'bar-bar');
assert.deepEqual(result.suggestions[0].label, {
name: 'bar-bar',
type: 'name ()'
});
assert.equal(result.suggestions[0].insertText, 's2');
assert.equal((result.suggestions[0].range as any).insert.startColumn, 1);
});
@@ -134,10 +146,16 @@ suite('SnippetsService', function () {
await provider.provideCompletionItems(model, new Position(1, 6), context)!.then(result => {
assert.equal(result.incomplete, undefined);
assert.equal(result.suggestions.length, 2);
assert.equal(result.suggestions[0].label, 'bar');
assert.deepEqual(result.suggestions[0].label, {
name: 'bar',
type: 'barTest ()'
});
assert.equal(result.suggestions[0].insertText, 's1');
assert.equal((result.suggestions[0].range as any).insert.startColumn, 5);
assert.equal(result.suggestions[1].label, 'bar-bar');
assert.deepEqual(result.suggestions[1].label, {
name: 'bar-bar',
type: 'name ()'
});
assert.equal(result.suggestions[1].insertText, 's2');
assert.equal((result.suggestions[1].range as any).insert.startColumn, 1);
});
@@ -225,8 +243,14 @@ suite('SnippetsService', function () {
return provider.provideCompletionItems(model, new Position(1, 1), context)!.then(result => {
assert.equal(result.suggestions.length, 2);
let [first, second] = result.suggestions;
assert.equal(first.label, 'first');
assert.equal(second.label, 'second');
assert.deepEqual(first.label, {
name: 'first',
type: 'first ()'
});
assert.deepEqual(second.label, {
name: 'second',
type: 'second ()'
});
});
});
@@ -309,7 +333,10 @@ suite('SnippetsService', function () {
let result = await provider.provideCompletionItems(model, new Position(1, 9), context)!;
assert.equal(result.suggestions.length, 1);
assert.equal(result.suggestions[0].label, 'mytemplate');
assert.deepEqual(result.suggestions[0].label, {
name: 'mytemplate',
type: 'mytemplate ()'
});
});
test('No snippets suggestion beyond character 100 if not at end of line #60247', async function () {