diff --git a/.vscode/settings.json b/.vscode/settings.json index 24d16b2e..1dc255b6 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -5,6 +5,5 @@ "**/node_modules": true, "**/release": true, "**/out": true - }, - "typescript.tsdk": "./node_modules/typescript/lib" + } } \ No newline at end of file diff --git a/package.json b/package.json index 085e4e63..34e15124 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,13 @@ { "name": "monaco-json", - "version": "1.2.0", + "version": "1.2.1", "description": "JSON plugin for the Monaco Editor", "scripts": { "compile": "gulp compile", "watch": "gulp watch", "prepublish": "gulp release", - "install-service-next": "npm install vscode-json-languageservice@next -f -S", - "install-service-local": "npm install ../vscode-json-languageservice -f -S" + "install-service-next": "npm install vscode-json-languageservice@next -f -D && npm install vscode-languageserver-types@next -f -D", + "install-service-local": "npm install ../vscode-json-languageservice -f -D && npm install ../vscode-languageserver-node/types -f -D" }, "author": "Microsoft Corporation", "license": "MIT", @@ -25,12 +25,12 @@ "gulp-tsb": "^2.0.0", "gulp-uglify": "^1.5.3", "merge-stream": "^1.0.0", - "monaco-editor-core": "^0.8.0", + "monaco-editor-core": "^0.8.1", "monaco-languages": "^0.7.0", "object-assign": "^4.1.0", "rimraf": "^2.5.2", - "typescript": "2.0.3", - "vscode-json-languageservice": "1.1.7", - "vscode-languageserver-types": "1.0.4" + "typescript": "^2.1.5", + "vscode-json-languageservice": "^2.0.0-next.12", + "vscode-languageserver-types": "^3.0.2-beta.5" } } diff --git a/src/languageFeatures.ts b/src/languageFeatures.ts index 929f366f..4aa41833 100644 --- a/src/languageFeatures.ts +++ b/src/languageFeatures.ts @@ -240,18 +240,30 @@ function toCompletionItem(entry: ls.CompletionItem): DataCompletionItem { }; } +function fromInsertText(text: string | monaco.languages.SnippetString) : string { + +} + function fromCompletionItem(entry: DataCompletionItem): ls.CompletionItem { - return { + let item : ls.CompletionItem = { label: entry.label, - insertText: entry.insertText, sortText: entry.sortText, filterText: entry.filterText, documentation: entry.documentation, detail: entry.detail, kind: fromCompletionItemKind(entry.kind), - textEdit: fromTextEdit(entry.textEdit), data: entry.data }; + if (typeof entry.insertText === 'object' && typeof entry.insertText.value === 'string') { + item.insertText = entry.insertText.value; + item.insertTextFormat = ls.InsertTextFormat.Snippet + } else { + item.insertText = entry.insertText; + } + if (entry.range) { + item.textEdit = ls.TextEdit.replace(fromRange(entry.range), item.insertText); + } + return item; } @@ -269,37 +281,35 @@ export class CompletionAdapter implements monaco.languages.CompletionItemProvide const resource = model.uri; return wireCancellationToken(token, this._worker(resource).then(worker => { - return worker.doComplete(resource.toString(), fromPosition(position)).then(info => { - if (!info) { - return; - } - let items: monaco.languages.CompletionItem[] = info.items.map(entry => { - return { - label: entry.label, - insertText: entry.insertText, - sortText: entry.sortText, - filterText: entry.filterText, - documentation: entry.documentation, - detail: entry.detail, - kind: toCompletionItemKind(entry.kind), - textEdit: toTextEdit(entry.textEdit) - }; - }); - - return { - isIncomplete: info.isIncomplete, - items: items + return worker.doComplete(resource.toString(), fromPosition(position)); + }).then(info => { + if (!info) { + return; + } + let items: monaco.languages.CompletionItem[] = info.items.map(entry => { + let item : monaco.languages.CompletionItem = { + label: entry.label, + insertText: entry.insertText, + sortText: entry.sortText, + filterText: entry.filterText, + documentation: entry.documentation, + detail: entry.detail, + kind: toCompletionItemKind(entry.kind), }; + if (entry.textEdit) { + item.range = toRange(entry.textEdit.range); + item.insertText = entry.textEdit.newText; + } + if (entry.insertTextFormat === ls.InsertTextFormat.Snippet) { + item.insertText = { value: item.insertText }; + } + return item; }); - })); - } - resolveCompletionItem(item: monaco.languages.CompletionItem, token: CancellationToken): Thenable { - return wireCancellationToken(token, this._worker().then(worker => { - let lsItem = fromCompletionItem(item); - return worker.doResolve(lsItem).then(result => { - return toCompletionItem(result); - }); + return { + isIncomplete: info.isIncomplete, + items: items + }; })); } }