diff --git a/package-lock.json b/package-lock.json index 3d128356..d3407dde 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,27 +5,27 @@ "requires": true, "dependencies": { "commander": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz", - "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==", + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", "dev": true }, "jsonc-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.0.1.tgz", - "integrity": "sha512-9w/QyN9qF1dTlffzkmyITa6qAYt6sDArlVZqaP+CXnRh66V73wImQGG8GIBkuas0XLAxddWEWYQ8PPFoK5KNQA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.0.2.tgz", + "integrity": "sha512-TSU435K5tEKh3g7bam1AFf+uZrISheoDsLlpmAo6wWZYqjsnd09lHYK1Qo+moK4Ikifev1Gdpa69g4NELKnCrQ==", "dev": true }, "monaco-editor-core": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/monaco-editor-core/-/monaco-editor-core-0.14.1.tgz", - "integrity": "sha512-bWJuPbDEftxaN2bG+JZ29+aJhg0rmq+y6VmCUqPZpmw8bSevoYjuTcdLkt9BbNaGnwosAVy+vSktXgs/JW7OvQ==", + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/monaco-editor-core/-/monaco-editor-core-0.15.0.tgz", + "integrity": "sha512-s1zuo+p6Gl6IC4WJP6HBkr4pWULm+HdFfacB8vOFPQLLi2oJseO20UuSkxYuZTUJQIjvhNrQfLNAmPKLZaf7tg==", "dev": true }, "monaco-languages": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/monaco-languages/-/monaco-languages-1.4.0.tgz", - "integrity": "sha512-39MZMAEKToktfSpOS0Soj05IvkT5vbebL9AIBGPn8fGi8WgJOcfS3YLiMu07gZKViR7CFZ4RyQJKJHglx0fPdA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/monaco-languages/-/monaco-languages-1.6.0.tgz", + "integrity": "sha512-LBEWj8tngYwsq4kasQr+dIhnO4xUIEN36ns+cRepWAQiXZnzcrZ84gFHXm8f4mR4tssxvHVU5Vw7xMUYro6h3g==", "dev": true }, "monaco-plugin-helpers": { @@ -34,7 +34,7 @@ "integrity": "sha512-7kUx8dtd5qVNVgUARBRhnM8oftPglYwlINfigC4yGUiuzqtIN22u1tly8umiOCIPR0eFiBLjt6aN23oZh2QJgg==", "dev": true, "requires": { - "typescript": "2.9.2" + "typescript": "^2.7.2" }, "dependencies": { "typescript": { @@ -46,9 +46,9 @@ } }, "requirejs": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.5.tgz", - "integrity": "sha512-svnO+aNcR/an9Dpi44C7KSAy5fFGLtmPbaaCeQaklUz8BQhS64tWWIIlvEA5jrWICzlO/X9KSzSeXFnZdBu8nw==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", + "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", "dev": true }, "source-map": { @@ -58,19 +58,19 @@ "dev": true }, "typescript": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.0.1.tgz", - "integrity": "sha512-zQIMOmC+372pC/CCVLqnQ0zSBiY7HHodU7mpQdjiZddek4GMj31I3dUJ7gAs9o65X7mnRma6OokOkc6f9jjfBg==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.1.6.tgz", + "integrity": "sha512-tDMYfVtvpb96msS1lDX9MEdHrW4yOuZ4Kdc4Him9oU796XldPYF/t2+uKoX0BBa0hXXwDlqYQbXY5Rzjzc5hBA==", "dev": true }, "uglify-js": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.7.tgz", - "integrity": "sha512-J0M2i1mQA+ze3EdN9SBi751DNdAXmeFLfJrd/MDIkRc3G3Gbb9OPVSx7GIQvVwfWxQARcYV2DTxIkMyDAk3o9Q==", + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", + "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", "dev": true, "requires": { - "commander": "2.16.0", - "source-map": "0.6.1" + "commander": "~2.17.1", + "source-map": "~0.6.1" } }, "vscode-json-languageservice": { @@ -79,10 +79,10 @@ "integrity": "sha512-mUb8EUADnBOf8PM9LSx4dVoSc9fY6sh+MXAD0vxqHPI58RpbvvxWQkTDAbnJDFJZbq+9q3NrY7qenLF/YCXREg==", "dev": true, "requires": { - "jsonc-parser": "2.0.1", - "vscode-languageserver-types": "3.10.1", - "vscode-nls": "3.2.4", - "vscode-uri": "1.0.5" + "jsonc-parser": "^2.0.1", + "vscode-languageserver-types": "^3.10.1", + "vscode-nls": "^3.2.4", + "vscode-uri": "^1.0.5" } }, "vscode-languageserver-types": { diff --git a/package.json b/package.json index 0fce022b..d5640b29 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "scripts": { "compile": "mrmdir ./out && tsc -p ./src/tsconfig.json && tsc -p ./src/tsconfig.esm.json", "watch": "tsc -p ./src --watch", - "prepublish": "mrmdir ./release && npm run compile && node ./scripts/release.js && node ./scripts/bundle && mcopy ./src/monaco.d.ts ./release/monaco.d.ts", + "prepublishOnly": "mrmdir ./release && npm run compile && node ./scripts/release.js && node ./scripts/bundle && mcopy ./src/monaco.d.ts ./release/monaco.d.ts", "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" }, @@ -19,13 +19,13 @@ "url": "https://github.com/Microsoft/monaco-json/issues" }, "devDependencies": { - "jsonc-parser": "^2.0.1", - "monaco-editor-core": "0.14.1", - "monaco-languages": "1.4.0", + "jsonc-parser": "^2.0.2", + "monaco-editor-core": "0.15.0", + "monaco-languages": "1.6.0", "monaco-plugin-helpers": "^1.0.2", - "requirejs": "^2.3.5", - "typescript": "3.0.1", - "uglify-js": "^3.4.7", + "requirejs": "^2.3.6", + "typescript": "3.1.6", + "uglify-js": "^3.4.9", "vscode-json-languageservice": "3.1.5", "vscode-languageserver-types": "3.10.1" } diff --git a/src/jsonWorker.ts b/src/jsonWorker.ts index d272169f..14460ec2 100644 --- a/src/jsonWorker.ts +++ b/src/jsonWorker.ts @@ -29,9 +29,6 @@ class PromiseAdapter implements jsonService.Thenable { public getWrapped(): monaco.Thenable { return this.wrapped; } - public cancel(): void { - this.wrapped.cancel(); - } public static resolve(v: T | Thenable): jsonService.Thenable { return >monaco.Promise.as(v); } diff --git a/src/languageFeatures.ts b/src/languageFeatures.ts index 7781ac16..e56e51a9 100644 --- a/src/languageFeatures.ts +++ b/src/languageFeatures.ts @@ -225,54 +225,6 @@ function toTextEdit(textEdit: ls.TextEdit): monaco.editor.ISingleEditOperation { } } -interface DataCompletionItem extends monaco.languages.CompletionItem { - data?: any; -} - -function toCompletionItem(entry: ls.CompletionItem): DataCompletionItem { - 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), - data: entry.data - }; -} - -function fromMarkdownString(entry: string | monaco.IMarkdownString): ls.MarkupContent { - return { - kind: (typeof entry === 'string' ? ls.MarkupKind.PlainText : ls.MarkupKind.Markdown), - value: (typeof entry === 'string' ? entry : entry.value) - } -} - -function fromCompletionItem(entry: DataCompletionItem): ls.CompletionItem { - let item: ls.CompletionItem = { - label: entry.label, - sortText: entry.sortText, - filterText: entry.filterText, - documentation: fromMarkdownString(entry.documentation), - detail: entry.detail, - kind: fromCompletionItemKind(entry.kind), - 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; -} - - export class CompletionAdapter implements monaco.languages.CompletionItemProvider { constructor(private _worker: WorkerAccessor) { @@ -282,11 +234,11 @@ export class CompletionAdapter implements monaco.languages.CompletionItemProvide return [' ', ':']; } - provideCompletionItems(model: monaco.editor.IReadOnlyModel, position: Position, token: CancellationToken): Thenable { + provideCompletionItems(model: monaco.editor.IReadOnlyModel, position: Position, context: monaco.languages.CompletionContext, token: CancellationToken): Thenable { const wordInfo = model.getWordUntilPosition(position); const resource = model.uri; - return wireCancellationToken(token, this._worker(resource).then(worker => { + return this._worker(resource).then(worker => { return worker.doComplete(resource.toString(), fromPosition(position)); }).then(info => { if (!info) { @@ -295,7 +247,7 @@ export class CompletionAdapter implements monaco.languages.CompletionItemProvide let items: monaco.languages.CompletionItem[] = info.items.map(entry => { let item: monaco.languages.CompletionItem = { label: entry.label, - insertText: entry.insertText, + insertText: entry.insertText || entry.label, sortText: entry.sortText, filterText: entry.filterText, documentation: entry.documentation, @@ -306,17 +258,20 @@ export class CompletionAdapter implements monaco.languages.CompletionItemProvide item.range = toRange(entry.textEdit.range); item.insertText = entry.textEdit.newText; } + if (entry.additionalTextEdits) { + item.additionalTextEdits = entry.additionalTextEdits.map(toTextEdit) + } if (entry.insertTextFormat === ls.InsertTextFormat.Snippet) { - item.insertText = { value: item.insertText }; + item.insertTextRules = monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet; } return item; }); return { isIncomplete: info.isIncomplete, - items: items + suggestions: items }; - })); + }); } } @@ -365,7 +320,7 @@ export class HoverAdapter implements monaco.languages.HoverProvider { provideHover(model: monaco.editor.IReadOnlyModel, position: Position, token: CancellationToken): Thenable { let resource = model.uri; - return wireCancellationToken(token, this._worker(resource).then(worker => { + return this._worker(resource).then(worker => { return worker.doHover(resource.toString(), fromPosition(position)); }).then(info => { if (!info) { @@ -375,7 +330,7 @@ export class HoverAdapter implements monaco.languages.HoverProvider { range: toRange(info.range), contents: toMarkedStringArray(info.contents) }; - })); + }); } } @@ -426,7 +381,7 @@ export class DocumentSymbolAdapter implements monaco.languages.DocumentSymbolPro public provideDocumentSymbols(model: monaco.editor.IReadOnlyModel, token: CancellationToken): Thenable { const resource = model.uri; - return wireCancellationToken(token, this._worker(resource).then(worker => worker.findDocumentSymbols(resource.toString())).then(items => { + return this._worker(resource).then(worker => worker.findDocumentSymbols(resource.toString())).then(items => { if (!items) { return; } @@ -438,7 +393,7 @@ export class DocumentSymbolAdapter implements monaco.languages.DocumentSymbolPro range: toRange(item.location.range), selectionRange: toRange(item.location.range) })); - })); + }); } } @@ -458,14 +413,14 @@ export class DocumentFormattingEditProvider implements monaco.languages.Document public provideDocumentFormattingEdits(model: monaco.editor.IReadOnlyModel, options: monaco.languages.FormattingOptions, token: CancellationToken): Thenable { const resource = model.uri; - return wireCancellationToken(token, this._worker(resource).then(worker => { + return this._worker(resource).then(worker => { return worker.format(resource.toString(), null, fromFormattingOptions(options)).then(edits => { if (!edits || edits.length === 0) { return; } return edits.map(toTextEdit); }); - })); + }); } } @@ -477,14 +432,14 @@ export class DocumentRangeFormattingEditProvider implements monaco.languages.Doc public provideDocumentRangeFormattingEdits(model: monaco.editor.IReadOnlyModel, range: Range, options: monaco.languages.FormattingOptions, token: CancellationToken): Thenable { const resource = model.uri; - return wireCancellationToken(token, this._worker(resource).then(worker => { + return this._worker(resource).then(worker => { return worker.format(resource.toString(), fromRange(range), fromFormattingOptions(options)).then(edits => { if (!edits || edits.length === 0) { return; } return edits.map(toTextEdit); }); - })); + }); } } @@ -496,7 +451,7 @@ export class DocumentColorAdapter implements monaco.languages.DocumentColorProvi public provideDocumentColors(model: monaco.editor.IReadOnlyModel, token: CancellationToken): Thenable { const resource = model.uri; - return wireCancellationToken(token, this._worker(resource).then(worker => worker.findDocumentColors(resource.toString())).then(infos => { + return this._worker(resource).then(worker => worker.findDocumentColors(resource.toString())).then(infos => { if (!infos) { return; } @@ -504,13 +459,13 @@ export class DocumentColorAdapter implements monaco.languages.DocumentColorProvi color: item.color, range: toRange(item.range) })); - })); + }); } public provideColorPresentations(model: monaco.editor.IReadOnlyModel, info: monaco.languages.IColorInformation, token: CancellationToken): Thenable { const resource = model.uri; - return wireCancellationToken(token, this._worker(resource).then(worker => worker.getColorPresentations(resource.toString(), info.color, fromRange(info.range))).then(presentations => { + return this._worker(resource).then(worker => worker.getColorPresentations(resource.toString(), info.color, fromRange(info.range))).then(presentations => { if (!presentations) { return; } @@ -526,7 +481,7 @@ export class DocumentColorAdapter implements monaco.languages.DocumentColorProvi } return item; }); - })); + }); } } @@ -538,7 +493,7 @@ export class FoldingRangeAdapter implements monaco.languages.FoldingRangeProvide public provideFoldingRanges(model: monaco.editor.IReadOnlyModel, context: monaco.languages.FoldingContext, token: CancellationToken): Thenable { const resource = model.uri; - return wireCancellationToken(token, this._worker(resource).then(worker => worker.provideFoldingRanges(resource.toString(), context)).then(ranges => { + return this._worker(resource).then(worker => worker.provideFoldingRanges(resource.toString(), context)).then(ranges => { if (!ranges) { return; } @@ -552,7 +507,7 @@ export class FoldingRangeAdapter implements monaco.languages.FoldingRangeProvide } return result; }); - })); + }); } } @@ -565,13 +520,3 @@ function toFoldingRangeKind(kind: ls.FoldingRangeKind): monaco.languages.Folding } return void 0; } - -/** - * Hook a cancellation token to a WinJS Promise - */ -function wireCancellationToken(token: CancellationToken, promise: Thenable): Thenable { - if ((>promise).cancel) { - token.onCancellationRequested(() => (>promise).cancel()); - } - return promise; -} diff --git a/src/workerManager.ts b/src/workerManager.ts index ebd4fce0..8f5edd5b 100644 --- a/src/workerManager.ts +++ b/src/workerManager.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ 'use strict'; -import {LanguageServiceDefaultsImpl} from './monaco.contribution'; -import {JSONWorker} from './jsonWorker'; +import { LanguageServiceDefaultsImpl } from './monaco.contribution'; +import { JSONWorker } from './jsonWorker'; import Promise = monaco.Promise; import IDisposable = monaco.IDisposable; @@ -82,26 +82,10 @@ export class WorkerManager { getLanguageServiceWorker(...resources: Uri[]): Promise { let _client: JSONWorker; - return toShallowCancelPromise( - this._getClient().then((client) => { - _client = client - }).then(_ => { - return this._worker.withSyncedResources(resources) - }).then(_ => _client) - ); + return this._getClient().then((client) => { + _client = client + }).then(_ => { + return this._worker.withSyncedResources(resources) + }).then(_ => _client); } } - -function toShallowCancelPromise(p: Promise): Promise { - let completeCallback: (value: T) => void; - let errorCallback: (err: any) => void; - - let r = new Promise((c, e) => { - completeCallback = c; - errorCallback = e; - }, () => { }); - - p.then(completeCallback, errorCallback); - - return r; -}