From d6706a2e60acfcd820909dfc620b0927fe64e3f8 Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Mon, 16 Dec 2019 22:17:05 +0100 Subject: [PATCH] Fixes #1352: Ensure completion items have a range set --- .../completion-provider-example/sample.js | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/website/playground/new-samples/extending-language-services/completion-provider-example/sample.js b/website/playground/new-samples/extending-language-services/completion-provider-example/sample.js index f6e3fdca..05b0269f 100644 --- a/website/playground/new-samples/extending-language-services/completion-provider-example/sample.js +++ b/website/playground/new-samples/extending-language-services/completion-provider-example/sample.js @@ -1,4 +1,4 @@ -function createDependencyProposals() { +function createDependencyProposals(range) { // returning a static list of proposals, not even looking at the prefix (filtering is done by the Monaco editor), // here you could do a server side lookup return [ @@ -6,26 +6,30 @@ function createDependencyProposals() { label: '"lodash"', kind: monaco.languages.CompletionItemKind.Function, documentation: "The Lodash library exported as Node.js modules.", - insertText: '"lodash": "*"' + insertText: '"lodash": "*"', + range: range }, { label: '"express"', kind: monaco.languages.CompletionItemKind.Function, documentation: "Fast, unopinionated, minimalist web framework", - insertText: '"express": "*"' + insertText: '"express": "*"', + range: range }, { label: '"mkdirp"', kind: monaco.languages.CompletionItemKind.Function, documentation: "Recursively mkdir, like mkdir -p", - insertText: '"mkdirp": "*"' + insertText: '"mkdirp": "*"', + range: range }, { label: '"my-third-party-library"', kind: monaco.languages.CompletionItemKind.Function, documentation: "Describe your library here", insertText: '"${1:my-third-party-library}": "${2:1.2.3}"', - insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet + insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, + range: range } ]; } @@ -36,9 +40,18 @@ monaco.languages.registerCompletionItemProvider('json', { // find out if we are completing a property in the 'dependencies' object. var textUntilPosition = model.getValueInRange({startLineNumber: 1, startColumn: 1, endLineNumber: position.lineNumber, endColumn: position.column}); var match = textUntilPosition.match(/"dependencies"\s*:\s*\{\s*("[^"]*"\s*:\s*"[^"]*"\s*,\s*)*([^"]*)?$/); - var suggestions = match ? createDependencyProposals() : []; + if (!match) { + return { suggestions: [] }; + } + var word = model.getWordUntilPosition(position); + var range = { + startLineNumber: position.lineNumber, + endLineNumber: position.lineNumber, + startColumn: word.startColumn, + endColumn: word.endColumn + }; return { - suggestions: suggestions + suggestions: createDependencyProposals(range) }; } }); @@ -46,4 +59,4 @@ monaco.languages.registerCompletionItemProvider('json', { monaco.editor.create(document.getElementById("container"), { value: "{\n\t\"dependencies\": {\n\t\t\n\t}\n}\n", language: "json" -}); \ No newline at end of file +});