From f1b96cadd5996161d6caaa3dfdf7c39b381053e8 Mon Sep 17 00:00:00 2001 From: Martin Aeschlimann Date: Fri, 27 Jan 2017 16:02:29 +0100 Subject: [PATCH] Adopt SnippetString and publish 1.2.1 --- package.json | 14 ++++---- src/languageFeatures.ts | 71 ++++++++++++++++++++------------------ src/monaco.contribution.ts | 6 ++-- src/monaco.d.ts | 2 ++ 4 files changed, 51 insertions(+), 42 deletions(-) diff --git a/package.json b/package.json index 10bf6f95..45bfb5d4 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,13 @@ { "name": "monaco-html", - "version": "1.2.0", + "version": "1.2.1", "description": "HTML plugin for the Monaco Editor", "scripts": { "compile": "gulp compile", "watch": "gulp watch", "prepublish": "gulp release", - "install-service-next": "npm install vscode-html-languageservice@next -f -D", - "install-service-local": "npm install ../vscode-html-languageservice -f -D" + "install-service-next": "npm install vscode-html-languageservice@next -f -D && npm install vscode-languageserver-types@next -f -D", + "install-service-local": "npm install ../vscode-html-languageservice -f -D && npm install ../vscode-languageserver-node/types -f -D" }, "author": "Microsoft Corporation", "license": "MIT", @@ -25,13 +25,13 @@ "gulp-tsb": "^2.0.0", "gulp-uglify": "^1.5.3", "merge-stream": "^1.0.0", - "monaco-editor-core": "^0.7.0", + "monaco-editor-core": "^0.8.1", "monaco-languages": "^0.6.1", "monaco-typescript": "^2.0.1", "object-assign": "^4.1.0", "rimraf": "^2.5.2", - "typescript": "2.0.3", - "vscode-html-languageservice": "1.0.0-next.6", - "vscode-languageserver-types": "^1.0.4-next.2" + "typescript": "^2.1.5", + "vscode-html-languageservice": "^2.0.0-next.6", + "vscode-languageserver-types": "^3.0.2-beta.5" } } diff --git a/src/languageFeatures.ts b/src/languageFeatures.ts index 767a011d..43a647ea 100644 --- a/src/languageFeatures.ts +++ b/src/languageFeatures.ts @@ -204,16 +204,6 @@ function toTextEdit(textEdit: ls.TextEdit): monaco.editor.ISingleEditOperation { } } -function fromTextEdit(editOp: monaco.editor.ISingleEditOperation): ls.TextEdit { - if (!editOp) { - return void 0; - } - return { - range: fromRange(Range.lift(editOp.range)), - newText: editOp.text - } -} - interface DataCompletionItem extends monaco.languages.CompletionItem { data?: any; } @@ -233,17 +223,25 @@ function toCompletionItem(entry: ls.CompletionItem): DataCompletionItem { } 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; } @@ -261,28 +259,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; }); + + return { + isIncomplete: info.isIncomplete, + items: items + }; })); } } diff --git a/src/monaco.contribution.ts b/src/monaco.contribution.ts index 33e26793..6e0f33fd 100644 --- a/src/monaco.contribution.ts +++ b/src/monaco.contribution.ts @@ -47,13 +47,15 @@ const formatDefaults: monaco.languages.html.HTMLFormatConfiguration = { tabSize: 4, insertSpaces: false, wrapLineLength: 120, - unformatted: 'a, abbr, acronym, b, bdo, big, br, button, cite, code, dfn, em, i, img, input, kbd, label, map, object, q, samp, script, select, small, span, strong, sub, sup, textarea, tt, var', + unformatted: 'default": "a, abbr, acronym, b, bdo, big, br, button, cite, code, dfn, em, i, img, input, kbd, label, map, object, q, samp, select, small, span, strong, sub, sup, textarea, tt, var', + contentUnformatted: 'pre', indentInnerHtml: false, preserveNewLines: true, maxPreserveNewLines: null, indentHandlebars: false, endWithNewline: false, - extraLiners: 'head, body, /html' + extraLiners: 'head, body, /html', + wrapAttributes: 'auto' }; const htmlOptionsDefault: monaco.languages.html.Options = { diff --git a/src/monaco.d.ts b/src/monaco.d.ts index 62b8c3b4..12eec4c5 100644 --- a/src/monaco.d.ts +++ b/src/monaco.d.ts @@ -9,12 +9,14 @@ declare module monaco.languages.html { readonly insertSpaces: boolean; readonly wrapLineLength: number; readonly unformatted: string; + readonly contentUnformatted: string; readonly indentInnerHtml: boolean; readonly preserveNewLines: boolean; readonly maxPreserveNewLines: number; readonly indentHandlebars: boolean; readonly endWithNewline: boolean; readonly extraLiners: string; + readonly wrapAttributes: 'auto' | 'force' | 'force-aligned' | 'force-expand-multiline'; } export interface CompletionConfiguration {