diff --git a/src/vs/editor/contrib/suggest/browser/suggestInlineCompletions.ts b/src/vs/editor/contrib/suggest/browser/suggestInlineCompletions.ts index 060b60d499d..27d396e0b13 100644 --- a/src/vs/editor/contrib/suggest/browser/suggestInlineCompletions.ts +++ b/src/vs/editor/contrib/suggest/browser/suggestInlineCompletions.ts @@ -11,16 +11,16 @@ import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService'; import { EditorOption, FindComputedEditorOptionValueById } from 'vs/editor/common/config/editorOptions'; -import { Position } from 'vs/editor/common/core/position'; +import { IPosition, Position } from 'vs/editor/common/core/position'; import { Range } from 'vs/editor/common/core/range'; import { IWordAtPosition } from 'vs/editor/common/core/wordHelper'; import { IEditorContribution } from 'vs/editor/common/editorCommon'; -import { InlineCompletion, InlineCompletionContext, InlineCompletions, InlineCompletionsProvider } from 'vs/editor/common/languages'; +import { CompletionItemProvider, CompletionTriggerKind, InlineCompletion, InlineCompletionContext, InlineCompletions, InlineCompletionsProvider } from 'vs/editor/common/languages'; import { ITextModel } from 'vs/editor/common/model'; import { ILanguageFeaturesService } from 'vs/editor/common/services/languageFeatures'; import { CompletionItemInsertTextRule } from 'vs/editor/common/standalone/standaloneEnums'; import { CompletionModel, LineContext } from 'vs/editor/contrib/suggest/browser/completionModel'; -import { CompletionItemModel, provideSuggestionItems, QuickSuggestionsOptions } from 'vs/editor/contrib/suggest/browser/suggest'; +import { CompletionItemModel, CompletionOptions, provideSuggestionItems, QuickSuggestionsOptions } from 'vs/editor/contrib/suggest/browser/suggest'; import { ISuggestMemoryService } from 'vs/editor/contrib/suggest/browser/suggestMemory'; import { WordDistance } from 'vs/editor/contrib/suggest/browser/wordDistance'; import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; @@ -114,15 +114,24 @@ class SuggestInlineCompletions implements InlineCompletionsProvider } | undefined; + + if (!wordInfo.word) { + triggerCharacterInfo = this._getTriggerCharacterInfo(model, position); + } + + if (!wordInfo.word && !triggerCharacterInfo) { + // not at word, not a trigger character return; } let result: InlineCompletionResults; const leadingLineContents = model.getValueInRange(new Range(position.lineNumber, 1, position.lineNumber, position.column)); - if (this._lastResult?.canBeReused(model, position.lineNumber, wordInfo)) { + if (!triggerCharacterInfo && this._lastResult?.canBeReused(model, position.lineNumber, wordInfo)) { // reuse a previous result iff possible, only a refilter is needed // TODO@jrieken this can be improved further and only incomplete results can be updated // console.log(`REUSE with ${wordInfo.word}`); @@ -136,8 +145,8 @@ class SuggestInlineCompletions implements InlineCompletionsProvider(); + for (const provider of this._languageFeatureService.completionProvider.all(model)) { + if (provider.triggerCharacters?.includes(ch)) { + providers.add(provider); + } + } + if (providers.size === 0) { + return undefined; + } + return { providers, ch }; + } } class EditorContribution implements IEditorContribution {