1111 */
1212
1313import type * as Monaco from "monaco-editor/esm/vs/editor/editor.api.js" ;
14- import type { ExtensionHostClient , ProviderRegistration } from "../extensionHostClient" ;
1514import type { DocumentSelectorPayload , ProviderKind } from "../ehProtocol" ;
15+ import type { ExtensionHostClient , ProviderRegistration } from "../extensionHostClient" ;
16+ import type {
17+ rangeToMonaco
18+ } from "./typeAdapters" ;
1619import {
1720 codeActionToMonaco ,
1821 codeLensToMonaco ,
@@ -27,7 +30,6 @@ import {
2730 locationToMonaco ,
2831 monacoPositionToPayload ,
2932 monacoRangeToPayload ,
30- rangeToMonaco ,
3133 selectionRangeToMonaco ,
3234 signatureHelpToMonaco ,
3335 symbolInformationToMonaco ,
@@ -82,15 +84,25 @@ export class MonacoProviderBridge {
8284 case "completion" : {
8385 const provider : Monaco . languages . CompletionItemProvider = {
8486 triggerCharacters,
85- provideCompletionItems : async ( model , position ) => {
87+ provideCompletionItems : async ( model , position , context ) => {
8688 const word = model . getWordAtPosition ( position ) ;
8789 const defaultRange = word
8890 ? { startLineNumber : position . lineNumber , endLineNumber : position . lineNumber , startColumn : word . startColumn , endColumn : word . endColumn }
8991 : { startLineNumber : position . lineNumber , endLineNumber : position . lineNumber , startColumn : position . column , endColumn : position . column } ;
92+ // Forward Monaco's CompletionContext verbatim (triggerKind + triggerCharacter).
93+ // Many language servers (including yaml-language-server via vscode-languageclient)
94+ // return `isIncomplete: true` and rely on `TriggerForIncompleteCompletions` on
95+ // subsequent requests while the user keeps typing. Hard-coding `Invoke` breaks
96+ // that contract and yields empty or generic-looking suggestion lists.
9097 const result = await this . invoke ( reg . providerId , "provideCompletionItems" , {
9198 uri : model . uri . toString ( ) ,
9299 position : monacoPositionToPayload ( position ) ,
93- context : { triggerKind : 0 } ,
100+ context : {
101+ triggerKind : context . triggerKind ,
102+ ...( context . triggerCharacter != null && context . triggerCharacter !== ""
103+ ? { triggerCharacter : context . triggerCharacter }
104+ : { } ) ,
105+ } ,
94106 } ) ;
95107 return completionListToMonaco ( result as Parameters < typeof completionListToMonaco > [ 0 ] , defaultRange ) ?? undefined ;
96108 } ,
0 commit comments