From 928e5ba14e90da1be9a0284f4b1aa42d33fdf7ed Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Sat, 19 Sep 2020 01:49:24 +0200 Subject: [PATCH] Adopt latest editor, latest language service --- package-lock.json | 66 ++++++++++++++++++++--------------------- package.json | 16 +++++----- src/languageFeatures.ts | 33 ++++++++++++++++++++- 3 files changed, 73 insertions(+), 42 deletions(-) diff --git a/package-lock.json b/package-lock.json index 662dad22..2ff9b1b1 100644 --- a/package-lock.json +++ b/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": { diff --git a/package.json b/package.json index 164b8a22..023e6066 100644 --- a/package.json +++ b/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": { diff --git a/src/languageFeatures.ts b/src/languageFeatures.ts index 55252c38..e28b8995 100644 --- a/src/languageFeatures.ts +++ b/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 (edit).insert !== 'undefined' && + typeof (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) {