Browse Source

Adopt latest editor, latest language service

Alex Dima 4 years ago
parent
commit
928e5ba14e
3 changed files with 73 additions and 42 deletions
  1. 33 33
      package-lock.json
  2. 8 8
      package.json
  3. 32 1
      src/languageFeatures.ts

+ 33 - 33
package-lock.json

@@ -375,9 +375,9 @@
 			"dev": true
 		},
 		"jsonc-parser": {
-			"version": "2.3.0",
-			"resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.0.tgz",
-			"integrity": "sha512-b0EBt8SWFNnixVdvoR2ZtEGa9ZqLhbJnOjezn+WP+8kspFm+PFYDN8Z4Bc7pRlDjvuVcADSUkroIuTWWn/YiIA==",
+			"version": "2.3.1",
+			"resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz",
+			"integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==",
 			"dev": true
 		},
 		"lines-and-columns": {
@@ -417,15 +417,15 @@
 			}
 		},
 		"monaco-editor-core": {
-			"version": "0.20.0",
-			"resolved": "https://registry.npmjs.org/monaco-editor-core/-/monaco-editor-core-0.20.0.tgz",
-			"integrity": "sha512-4mdmfEejTvRZzrEIn70jqqNl3g15vnkRdTkJ8uMK4jiljntlwhiSc5vknZOLt1QM8za16C3tDrSl2mTL9ma2Sg==",
+			"version": "0.21.0",
+			"resolved": "https://registry.npmjs.org/monaco-editor-core/-/monaco-editor-core-0.21.0.tgz",
+			"integrity": "sha512-buBxOxwexlb7pdQrIHjj7OGmtVmEe735NN7M8GbhN03eYAKQmaeIAs1AyneOOHvbvh1Ntm7PoHH8f196gd2p6w==",
 			"dev": true
 		},
 		"monaco-languages": {
-			"version": "1.10.0",
-			"resolved": "https://registry.npmjs.org/monaco-languages/-/monaco-languages-1.10.0.tgz",
-			"integrity": "sha512-ARAws17Xh0K4WsZYkJY6CqHn9EYdYN8CjzK6w/jgXIwU0owzCdUWxzu+FNJ/LeDLcKxL/YK3phcwGFj9IqX2yw==",
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/monaco-languages/-/monaco-languages-2.1.0.tgz",
+			"integrity": "sha512-c2afUp3lbUCrvEdVrH8EThQYbj5tb2FpvXFnFN3gOJScDlFknWb5nbaxiaVqY9CSIqzJVZpNc5HXpP5FWOuS3g==",
 			"dev": true
 		},
 		"monaco-plugin-helpers": {
@@ -579,15 +579,15 @@
 			}
 		},
 		"prettier": {
-			"version": "2.1.1",
-			"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.1.tgz",
-			"integrity": "sha512-9bY+5ZWCfqj3ghYBLxApy2zf6m+NJo5GzmLTpr9FsApsfjriNnS2dahWReHMi7qNPhhHl9SYHJs2cHZLgexNIw==",
+			"version": "2.1.2",
+			"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz",
+			"integrity": "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==",
 			"dev": true
 		},
 		"pretty-quick": {
-			"version": "3.0.0",
-			"resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.0.0.tgz",
-			"integrity": "sha512-oIXlGQUcUxt3XpoNfQECEWvH1Q9PtKfelF2pdp6UvC1CSQ5QcB7gUYKu0kuJGlm3LMBZzJaO/vbRkxA61pWlcg==",
+			"version": "3.0.2",
+			"resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.0.2.tgz",
+			"integrity": "sha512-4rWOs/Ifdkg7G/YX7Xbco4jZkuXPx445KdhuMI6REnl3nXRDb9+zysb29c76R59jsJzcnkcpAaGi8D/RjAVfSQ==",
 			"dev": true,
 			"requires": {
 				"chalk": "^3.0.0",
@@ -703,9 +703,9 @@
 			}
 		},
 		"terser": {
-			"version": "5.3.0",
-			"resolved": "https://registry.npmjs.org/terser/-/terser-5.3.0.tgz",
-			"integrity": "sha512-XTT3D3AwxC54KywJijmY2mxZ8nJiEjBHVYzq8l9OaYuRFWeQNBwvipuzzYEP4e+/AVcd1hqG/CqgsdIRyT45Fg==",
+			"version": "5.3.2",
+			"resolved": "https://registry.npmjs.org/terser/-/terser-5.3.2.tgz",
+			"integrity": "sha512-H67sydwBz5jCUA32ZRL319ULu+Su1cAoZnnc+lXnenGRYWyLE3Scgkt8mNoAsMx0h5kdo758zdoS0LG9rYZXDQ==",
 			"dev": true,
 			"requires": {
 				"commander": "^2.20.0",
@@ -714,21 +714,21 @@
 			}
 		},
 		"typescript": {
-			"version": "4.0.2",
-			"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz",
-			"integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==",
+			"version": "4.0.3",
+			"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.3.tgz",
+			"integrity": "sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg==",
 			"dev": true
 		},
 		"vscode-json-languageservice": {
-			"version": "3.8.3",
-			"resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-3.8.3.tgz",
-			"integrity": "sha512-8yPag/NQHCuTthahyaTtzK0DHT0FKM/xBU0mFBQ8nMo8C1i2P+FCyIVqICoNoHkRI2BTGlXKomPUpsqjSz0TnQ==",
+			"version": "3.8.4",
+			"resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-3.8.4.tgz",
+			"integrity": "sha512-njDG0+YJvYNKXH+6plQGZMxgbifATFrRpC6Qnm/SAn4IW8bMHxsYunsxrjtpqK42CVSz6Lr7bpbTEZbVuOmFLw==",
 			"dev": true,
 			"requires": {
-				"jsonc-parser": "^2.2.1",
+				"jsonc-parser": "^2.3.1",
 				"vscode-languageserver-textdocument": "^1.0.1",
-				"vscode-languageserver-types": "^3.15.1",
-				"vscode-nls": "^4.1.2",
+				"vscode-languageserver-types": "3.16.0-next.2",
+				"vscode-nls": "^5.0.0",
 				"vscode-uri": "^2.1.2"
 			}
 		},
@@ -739,15 +739,15 @@
 			"dev": true
 		},
 		"vscode-languageserver-types": {
-			"version": "3.15.1",
-			"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.15.1.tgz",
-			"integrity": "sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ==",
+			"version": "3.16.0-next.2",
+			"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0-next.2.tgz",
+			"integrity": "sha512-QjXB7CKIfFzKbiCJC4OWC8xUncLsxo19FzGVp/ADFvvi87PlmBSCAtZI5xwGjF5qE0xkLf0jjKUn3DzmpDP52Q==",
 			"dev": true
 		},
 		"vscode-nls": {
-			"version": "4.1.2",
-			"resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-4.1.2.tgz",
-			"integrity": "sha512-7bOHxPsfyuCqmP+hZXscLhiHwe7CSuFE4hyhbs22xPIhQ4jv99FcR4eBzfYYVLP356HNFpdvz63FFb/xw6T4Iw==",
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.0.0.tgz",
+			"integrity": "sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA==",
 			"dev": true
 		},
 		"vscode-uri": {

+ 8 - 8
package.json

@@ -23,16 +23,16 @@
 	"typings": "./release/esm/monaco.contribution.d.ts",
 	"devDependencies": {
 		"husky": "^4.3.0",
-		"jsonc-parser": "^2.3.0",
-		"monaco-editor-core": "0.20.0",
-		"monaco-languages": "1.10.0",
+		"jsonc-parser": "^2.3.1",
+		"monaco-editor-core": "0.21.0",
+		"monaco-languages": "2.1.0",
 		"monaco-plugin-helpers": "^1.0.3",
-		"prettier": "^2.1.1",
-		"pretty-quick": "^3.0.0",
+		"prettier": "^2.1.2",
+		"pretty-quick": "^3.0.2",
 		"requirejs": "^2.3.6",
-		"typescript": "4.0.2",
-		"terser": "^5.3.0",
-		"vscode-json-languageservice": "3.8.3"
+		"typescript": "4.0.3",
+		"terser": "^5.3.2",
+		"vscode-json-languageservice": "3.8.4"
 	},
 	"husky": {
 		"hooks": {

+ 32 - 1
src/languageFeatures.ts

@@ -192,6 +192,30 @@ function toRange(range: jsonService.Range): Range {
 	);
 }
 
+interface InsertReplaceEdit {
+	/**
+	 * The string to be inserted.
+	 */
+	newText: string;
+	/**
+	 * The range if the insert is requested
+	 */
+	insert: jsonService.Range;
+	/**
+	 * The range if the replace is requested.
+	 */
+	replace: jsonService.Range;
+}
+
+function isInsertReplaceEdit(
+	edit: jsonService.TextEdit | InsertReplaceEdit
+): edit is InsertReplaceEdit {
+	return (
+		typeof (<InsertReplaceEdit>edit).insert !== 'undefined' &&
+		typeof (<InsertReplaceEdit>edit).replace !== 'undefined'
+	);
+}
+
 function toCompletionItemKind(kind: number): languages.CompletionItemKind {
 	let mItemKind = languages.CompletionItemKind;
 
@@ -337,7 +361,14 @@ export class CompletionAdapter implements languages.CompletionItemProvider {
 						kind: toCompletionItemKind(entry.kind)
 					};
 					if (entry.textEdit) {
-						item.range = toRange(entry.textEdit.range);
+						if (isInsertReplaceEdit(entry.textEdit)) {
+							item.range = {
+								insert: toRange(entry.textEdit.insert),
+								replace: toRange(entry.textEdit.replace)
+							};
+						} else {
+							item.range = toRange(entry.textEdit.range);
+						}
 						item.insertText = entry.textEdit.newText;
 					}
 					if (entry.additionalTextEdits) {