Ver código fonte

Adapt SnippetString, publish 1.2.1

Martin Aeschlimann 8 anos atrás
pai
commit
3549972fdf
3 arquivos alterados com 49 adições e 40 exclusões
  1. 1 2
      .vscode/settings.json
  2. 7 7
      package.json
  3. 41 31
      src/languageFeatures.ts

+ 1 - 2
.vscode/settings.json

@@ -5,6 +5,5 @@
 		"**/node_modules": true,
 		"**/release": true,
 		"**/out": true
-	},
-	"typescript.tsdk": "./node_modules/typescript/lib"
+	}
 }

+ 7 - 7
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"
   }
 }

+ 41 - 31
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 = <string> 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 <monaco.languages.CompletionList>{
-					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: <string> item.insertText };
+				}
+				return item;
 			});
-		}));
-	}
 
-	resolveCompletionItem(item: monaco.languages.CompletionItem, token: CancellationToken): Thenable<monaco.languages.CompletionItem> {
-		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
+			};
 		}));
 	}
 }