diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..3c58ccd1 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,2 @@ +/out/ +/release/ diff --git a/package-lock.json b/package-lock.json index d038e243..dc01124a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -714,47 +714,47 @@ "dev": true }, "vscode-css-languageservice": { - "version": "4.0.3-next.25", - "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-4.0.3-next.25.tgz", - "integrity": "sha512-c6qoSiYUJUDYizqQRZw5tb7n3IjCgGeFg74aWV0IsihrLWKPmMwDdRDzIDohWwlOf5myrEvuHmbPo7wTaspG+w==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-4.3.3.tgz", + "integrity": "sha512-b2b+0oHvPmBHygDtOXX3xBvpQCa6eIQSvXnGDNSDmIC1894ZTJ2yX10vjplOO/PvV7mwhyvGPwHyY4X2HGxtKw==", "dev": true, "requires": { - "vscode-languageserver-textdocument": "^1.0.0-next.4", - "vscode-languageserver-types": "^3.15.0-next.6", - "vscode-nls": "^4.1.1", - "vscode-uri": "^2.1.1" + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-languageserver-types": "3.16.0-next.2", + "vscode-nls": "^4.1.2", + "vscode-uri": "^2.1.2" }, "dependencies": { - "vscode-languageserver-textdocument": { - "version": "1.0.0-next.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.0-next.5.tgz", - "integrity": "sha512-1jp/zAidN/bF/sqPimhBX1orH5G4rzRw63k75TesukJDuxm8yW79ECStWbDSy41BHGOwSGN4M69QFvhancSr5A==", + "vscode-languageserver-types": { + "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-languageserver-textdocument": { - "version": "1.0.0-next.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.0-next.5.tgz", - "integrity": "sha512-1jp/zAidN/bF/sqPimhBX1orH5G4rzRw63k75TesukJDuxm8yW79ECStWbDSy41BHGOwSGN4M69QFvhancSr5A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz", + "integrity": "sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA==", "dev": true }, "vscode-languageserver-types": { - "version": "3.15.0-next.9", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.15.0-next.9.tgz", - "integrity": "sha512-Rl/8qJ6932nrHCdPn+9y0x08uLVQaSLRG+U4JzhyKpWU4eJbVaDRoAcz1Llj7CErJGbPr6kdBvShPy5fRfR+Uw==", + "version": "3.15.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.15.1.tgz", + "integrity": "sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ==", "dev": true }, "vscode-nls": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-4.1.1.tgz", - "integrity": "sha512-4R+2UoUUU/LdnMnFjePxfLqNhBS8lrAFyX7pjb2ud/lqDkrUavFUTcG7wR0HBZFakae0Q6KLBFjMS6W93F403A==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-4.1.2.tgz", + "integrity": "sha512-7bOHxPsfyuCqmP+hZXscLhiHwe7CSuFE4hyhbs22xPIhQ4jv99FcR4eBzfYYVLP356HNFpdvz63FFb/xw6T4Iw==", "dev": true }, "vscode-uri": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.1.tgz", - "integrity": "sha512-eY9jmGoEnVf8VE8xr5znSah7Qt1P/xsCdErz+g8HYZtJ7bZqKH5E3d+6oVNm1AC/c6IHUDokbmVXKOi4qPAC9A==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz", + "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==", "dev": true }, "which": { diff --git a/package.json b/package.json index 04e85d21..f4c9538f 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "2.7.0", "description": "CSS, LESS and SCSS plugin for the Monaco Editor", "scripts": { - "compile": "mrmdir ./out && tsc -p ./src/tsconfig.json && tsc -p ./src/tsconfig.esm.json && node ./scripts/dts", + "compile": "mrmdir ./out && tsc -p ./src/tsconfig.json && tsc -p ./src/tsconfig.esm.json && node ./scripts/dts && prettier --write ./monaco.d.ts", "watch": "tsc -p ./src --watch", "prepublishOnly": "mrmdir ./release && npm run compile && node ./scripts/release.js && node ./scripts/bundle && mcopy ./monaco.d.ts ./release/monaco.d.ts && mcopy ./out/esm/monaco.contribution.d.ts ./release/esm/monaco.contribution.d.ts && mcopy ./out/esm/fillers/monaco-editor-core.d.ts ./release/esm/fillers/monaco-editor-core.d.ts", "install-service-next": "npm install vscode-css-languageservice@next -f -D && npm install vscode-languageserver-types@next -f -D", @@ -22,7 +22,7 @@ "module": "./release/esm/monaco.contribution.js", "typings": "./release/esm/monaco.contribution.d.ts", "devDependencies": { - "husky": "^4.2.5", + "husky": "^4.3.0", "monaco-editor-core": "0.20.0", "monaco-languages": "1.10.0", "monaco-plugin-helpers": "^1.0.3", @@ -31,9 +31,9 @@ "requirejs": "^2.3.6", "typescript": "4.0.2", "terser": "^5.3.0", - "vscode-css-languageservice": "4.0.3-next.25", - "vscode-languageserver-types": "3.15.0-next.9", - "vscode-languageserver-textdocument": "^1.0.0-next.5" + "vscode-css-languageservice": "4.3.3", + "vscode-languageserver-types": "3.15.1", + "vscode-languageserver-textdocument": "^1.0.1" }, "husky": { "hooks": { diff --git a/src/languageFeatures.ts b/src/languageFeatures.ts index d5b2e19b..164bf03d 100644 --- a/src/languageFeatures.ts +++ b/src/languageFeatures.ts @@ -18,6 +18,7 @@ import { IDisposable, MarkerSeverity } from './fillers/monaco-editor-core'; +import { InsertReplaceEdit, TextEdit } from 'vscode-css-languageservice'; export interface WorkerAccessor { (first: Uri, ...more: Uri[]): Promise; @@ -183,6 +184,15 @@ function toRange(range: cssService.Range): Range { ); } +function isInsertReplaceEdit( + edit: TextEdit | InsertReplaceEdit +): edit is InsertReplaceEdit { + return ( + typeof (edit).insert !== 'undefined' && + typeof (edit).replace !== 'undefined' + ); +} + function toCompletionItemKind(kind: number): languages.CompletionItemKind { let mItemKind = languages.CompletionItemKind; @@ -282,7 +292,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) {