Ver código fonte

Adopt new editor & new npm deps

Alex Dima 6 anos atrás
pai
commit
3731f02b7f
4 arquivos alterados com 56 adições e 123 exclusões
  1. 24 24
      package-lock.json
  2. 6 6
      package.json
  3. 19 70
      src/languageFeatures.ts
  4. 7 23
      src/workerManager.ts

+ 24 - 24
package-lock.json

@@ -5,21 +5,21 @@
   "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
     },
     "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": {
@@ -28,7 +28,7 @@
       "integrity": "sha512-7kUx8dtd5qVNVgUARBRhnM8oftPglYwlINfigC4yGUiuzqtIN22u1tly8umiOCIPR0eFiBLjt6aN23oZh2QJgg==",
       "dev": true,
       "requires": {
-        "typescript": "2.9.2"
+        "typescript": "^2.7.2"
       },
       "dependencies": {
         "typescript": {
@@ -40,9 +40,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": {
@@ -52,19 +52,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-html-languageservice": {
@@ -73,9 +73,9 @@
       "integrity": "sha512-DXgotbJaLgD+IuhzCdLenBb+G3MKa8P8FpDc2LvhAbTm6QR8Dl3McrEGIYQi2/dhmB6NJxJgwZtUF5A9aiuRrg==",
       "dev": true,
       "requires": {
-        "vscode-languageserver-types": "3.10.0",
-        "vscode-nls": "3.2.4",
-        "vscode-uri": "1.0.5"
+        "vscode-languageserver-types": "^3.10.0",
+        "vscode-nls": "^3.2.4",
+        "vscode-uri": "^1.0.5"
       }
     },
     "vscode-languageserver-types": {

+ 6 - 6
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-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"
   },
@@ -19,12 +19,12 @@
     "url": "https://github.com/Microsoft/monaco-editor/issues"
   },
   "devDependencies": {
-    "monaco-editor-core": "0.14.1",
-    "monaco-languages": "^1.4.0",
+    "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-html-languageservice": "^2.1.5",
     "vscode-languageserver-types": "^3.10.0"
   }

+ 19 - 70
src/languageFeatures.ts

@@ -217,50 +217,6 @@ 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 = <string>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) {
@@ -270,11 +226,11 @@ export class CompletionAdapter implements monaco.languages.CompletionItemProvide
 		return ['.', ':', '<', '"', '=', '/'];
 	}
 
-	provideCompletionItems(model: monaco.editor.IReadOnlyModel, position: Position, token: CancellationToken): Thenable<monaco.languages.CompletionList> {
+	provideCompletionItems(model: monaco.editor.IReadOnlyModel, position: Position, context: monaco.languages.CompletionContext, token: CancellationToken): Thenable<monaco.languages.CompletionList> {
 		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) {
@@ -283,7 +239,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,
@@ -294,17 +250,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: <string>item.insertText };
+					item.insertTextRules = monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet;
 				}
 				return item;
 			});
 
 			return {
 				isIncomplete: info.isIncomplete,
-				items: items
+				suggestions: items
 			};
-		}));
+		});
 	}
 }
 
@@ -354,7 +313,7 @@ export class DocumentHighlightAdapter implements monaco.languages.DocumentHighli
 	public provideDocumentHighlights(model: monaco.editor.IReadOnlyModel, position: Position, token: CancellationToken): Thenable<monaco.languages.DocumentHighlight[]> {
 		const resource = model.uri;
 
-		return wireCancellationToken(token, this._worker(resource).then(worker => worker.findDocumentHighlights(resource.toString(), fromPosition(position))).then(items => {
+		return this._worker(resource).then(worker => worker.findDocumentHighlights(resource.toString(), fromPosition(position))).then(items => {
 			if (!items) {
 				return;
 			}
@@ -362,7 +321,7 @@ export class DocumentHighlightAdapter implements monaco.languages.DocumentHighli
 				range: toRange(item.range),
 				kind: toHighlighKind(item.kind)
 			}));
-		}));
+		});
 	}
 }
 
@@ -374,7 +333,7 @@ export class DocumentLinkAdapter implements monaco.languages.LinkProvider {
 	public provideLinks(model: monaco.editor.IReadOnlyModel, token: CancellationToken): Thenable<monaco.languages.ILink[]> {
 		const resource = model.uri;
 
-		return wireCancellationToken(token, this._worker(resource).then(worker => worker.findDocumentLinks(resource.toString())).then(items => {
+		return this._worker(resource).then(worker => worker.findDocumentLinks(resource.toString())).then(items => {
 			if (!items) {
 				return;
 			}
@@ -382,7 +341,7 @@ export class DocumentLinkAdapter implements monaco.languages.LinkProvider {
 				range: toRange(item.range),
 				url: item.target
 			}));
-		}));
+		});
 	}
 }
 
@@ -402,14 +361,14 @@ export class DocumentFormattingEditProvider implements monaco.languages.Document
 	public provideDocumentFormattingEdits(model: monaco.editor.IReadOnlyModel, options: monaco.languages.FormattingOptions, token: CancellationToken): Thenable<monaco.editor.ISingleEditOperation[]> {
 		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);
 			});
-		}));
+		});
 	}
 }
 
@@ -421,14 +380,14 @@ export class DocumentRangeFormattingEditProvider implements monaco.languages.Doc
 	public provideDocumentRangeFormattingEdits(model: monaco.editor.IReadOnlyModel, range: Range, options: monaco.languages.FormattingOptions, token: CancellationToken): Thenable<monaco.editor.ISingleEditOperation[]> {
 		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);
 			});
-		}));
+		});
 	}
 }
 
@@ -440,7 +399,7 @@ export class FoldingRangeAdapter implements monaco.languages.FoldingRangeProvide
 	public provideFoldingRanges(model: monaco.editor.IReadOnlyModel, context: monaco.languages.FoldingContext, token: CancellationToken): Thenable<monaco.languages.FoldingRange[]> {
 		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;
 			}
@@ -454,7 +413,7 @@ export class FoldingRangeAdapter implements monaco.languages.FoldingRangeProvide
 				}
 				return result;
 			});
-		}));
+		});
 	}
 
 }
@@ -467,13 +426,3 @@ function toFoldingRangeKind(kind: ls.FoldingRangeKind): monaco.languages.Folding
 	}
 	return void 0;
 }
-
-/**
- * Hook a cancellation token to a WinJS Promise
- */
-function wireCancellationToken<T>(token: CancellationToken, promise: Thenable<T>): Thenable<T> {
-	if ((<Promise<T>>promise).cancel) {
-		token.onCancellationRequested(() => (<Promise<T>>promise).cancel());
-	}
-	return promise;
-}

+ 7 - 23
src/workerManager.ts

@@ -4,8 +4,8 @@
  *--------------------------------------------------------------------------------------------*/
 'use strict';
 
-import {LanguageServiceDefaultsImpl} from './monaco.contribution';
-import {HTMLWorker} from './htmlWorker';
+import { LanguageServiceDefaultsImpl } from './monaco.contribution';
+import { HTMLWorker } from './htmlWorker';
 
 import Promise = monaco.Promise;
 import IDisposable = monaco.IDisposable;
@@ -81,26 +81,10 @@ export class WorkerManager {
 
 	getLanguageServiceWorker(...resources: Uri[]): Promise<HTMLWorker> {
 		let _client: HTMLWorker;
-		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<T>(p: Promise<T>): Promise<T> {
-	let completeCallback: (value: T) => void;
-	let errorCallback: (err: any) => void;
-
-	let r = new Promise<T>((c, e) => {
-		completeCallback = c;
-		errorCallback = e;
-	}, () => { });
-
-	p.then(completeCallback, errorCallback);
-
-	return r;
-}