|
4 | 4 | *--------------------------------------------------------------------------------------------*/
|
5 | 5 |
|
6 | 6 | import * as assert from 'assert';
|
7 |
| -import { SnippetCompletionProvider } from 'vs/workbench/contrib/snippets/browser/snippetCompletionProvider'; |
| 7 | +import { SnippetCompletion, SnippetCompletionProvider } from 'vs/workbench/contrib/snippets/browser/snippetCompletionProvider'; |
8 | 8 | import { Position } from 'vs/editor/common/core/position';
|
9 | 9 | import { ModesRegistry } from 'vs/editor/common/modes/modesRegistry';
|
10 | 10 | import { ModeServiceImpl } from 'vs/editor/common/services/modeServiceImpl';
|
@@ -91,12 +91,17 @@ suite('SnippetsService', function () {
|
91 | 91 | });
|
92 | 92 | });
|
93 | 93 |
|
94 |
| - test('snippet completions - simple 2', function () { |
| 94 | + test('snippet completions - simple 2', async function () { |
95 | 95 |
|
96 | 96 | const provider = new SnippetCompletionProvider(modeService, snippetService);
|
97 | 97 | const model = disposables.add(createTextModel('hello ', undefined, 'fooLang'));
|
98 | 98 |
|
99 |
| - return provider.provideCompletionItems(model, new Position(1, 6), context)!.then(result => { |
| 99 | + await provider.provideCompletionItems(model, new Position(1, 6) /* hello| */, context)!.then(result => { |
| 100 | + assert.strictEqual(result.incomplete, undefined); |
| 101 | + assert.strictEqual(result.suggestions.length, 0); |
| 102 | + }); |
| 103 | + |
| 104 | + await provider.provideCompletionItems(model, new Position(1, 7) /* hello |*/, context)!.then(result => { |
100 | 105 | assert.strictEqual(result.incomplete, undefined);
|
101 | 106 | assert.strictEqual(result.suggestions.length, 2);
|
102 | 107 | });
|
@@ -640,4 +645,67 @@ suite('SnippetsService', function () {
|
640 | 645 | assert.strictEqual(result.suggestions.length, 1);
|
641 | 646 | model.dispose();
|
642 | 647 | });
|
| 648 | + |
| 649 | + test('Snippet suggestions are too eager #138707 (word)', async function () { |
| 650 | + snippetService = new SimpleSnippetService([ |
| 651 | + new Snippet(['fooLang'], 'tys', 'tys', '', 'value', '', SnippetSource.User), |
| 652 | + new Snippet(['fooLang'], 'hell_or_tell', 'hell_or_tell', '', 'value', '', SnippetSource.User), |
| 653 | + new Snippet(['fooLang'], '^y', '^y', '', 'value', '', SnippetSource.User), |
| 654 | + ]); |
| 655 | + |
| 656 | + const provider = new SnippetCompletionProvider(modeService, snippetService); |
| 657 | + let model = createTextModel('\'hellot\'', undefined, 'fooLang'); |
| 658 | + |
| 659 | + let result = await provider.provideCompletionItems( |
| 660 | + model, |
| 661 | + new Position(1, 8), |
| 662 | + { triggerKind: CompletionTriggerKind.Invoke } |
| 663 | + )!; |
| 664 | + |
| 665 | + assert.strictEqual(result.suggestions.length, 2); |
| 666 | + assert.strictEqual((<SnippetCompletion>result.suggestions[0]).label.label, '^y'); |
| 667 | + assert.strictEqual((<SnippetCompletion>result.suggestions[1]).label.label, 'hell_or_tell'); |
| 668 | + model.dispose(); |
| 669 | + }); |
| 670 | + |
| 671 | + test('Snippet suggestions are too eager #138707 (no word)', async function () { |
| 672 | + snippetService = new SimpleSnippetService([ |
| 673 | + new Snippet(['fooLang'], 'tys', 'tys', '', 'value', '', SnippetSource.User), |
| 674 | + new Snippet(['fooLang'], 't', 't', '', 'value', '', SnippetSource.User), |
| 675 | + new Snippet(['fooLang'], '^y', '^y', '', 'value', '', SnippetSource.User), |
| 676 | + ]); |
| 677 | + |
| 678 | + const provider = new SnippetCompletionProvider(modeService, snippetService); |
| 679 | + let model = createTextModel(')*&^', undefined, 'fooLang'); |
| 680 | + |
| 681 | + let result = await provider.provideCompletionItems( |
| 682 | + model, |
| 683 | + new Position(1, 5), |
| 684 | + { triggerKind: CompletionTriggerKind.Invoke } |
| 685 | + )!; |
| 686 | + |
| 687 | + assert.strictEqual(result.suggestions.length, 1); |
| 688 | + assert.strictEqual((<SnippetCompletion>result.suggestions[0]).label.label, '^y'); |
| 689 | + model.dispose(); |
| 690 | + }); |
| 691 | + |
| 692 | + test('Snippet suggestions are too eager #138707 (word/word)', async function () { |
| 693 | + snippetService = new SimpleSnippetService([ |
| 694 | + new Snippet(['fooLang'], 'async arrow function', 'async arrow function', '', 'value', '', SnippetSource.User), |
| 695 | + new Snippet(['fooLang'], 'foobarrrrrr', 'foobarrrrrr', '', 'value', '', SnippetSource.User), |
| 696 | + ]); |
| 697 | + |
| 698 | + const provider = new SnippetCompletionProvider(modeService, snippetService); |
| 699 | + let model = createTextModel('foobar', undefined, 'fooLang'); |
| 700 | + |
| 701 | + let result = await provider.provideCompletionItems( |
| 702 | + model, |
| 703 | + new Position(1, 7), |
| 704 | + { triggerKind: CompletionTriggerKind.Invoke } |
| 705 | + )!; |
| 706 | + |
| 707 | + assert.strictEqual(result.suggestions.length, 1); |
| 708 | + assert.strictEqual((<SnippetCompletion>result.suggestions[0]).label.label, 'foobarrrrrr'); |
| 709 | + model.dispose(); |
| 710 | + }); |
643 | 711 | });
|
0 commit comments