diff --git a/LSP-volar.sublime-settings b/LSP-volar.sublime-settings index 45de0fb..c3b835a 100644 --- a/LSP-volar.sublime-settings +++ b/LSP-volar.sublime-settings @@ -30,6 +30,8 @@ // Set --max-old-space-size option on server process. If you have problem on frequently // "Request textDocument/** failed." error, try setting higher memory(MB) on it. "volar.vueserver.maxOldSpaceSize": null, + // Defines how the host (editor) should sync document changes to the language server. + "volar.vueserver.textDocumentSync": "incremental", // javascript inlay hint "javascript.inlayHints.enumMemberValues.enabled": false, diff --git a/plugin.py b/plugin.py index b7eceb3..909670e 100644 --- a/plugin.py +++ b/plugin.py @@ -1,5 +1,6 @@ from LSP.plugin import ClientConfig from LSP.plugin import WorkspaceFolder +from LSP.plugin.core.protocol import TextDocumentSyncKindIncremental, TextDocumentSyncKindFull, TextDocumentSyncKindNone from LSP.plugin.core.typing import List, Optional from lsp_utils import NpmClientHandler import os @@ -30,6 +31,7 @@ def is_allowed_to_start( ): if not workspace_folders or not configuration: return + configuration.init_options.set('textDocumentSync', get_text_document_sync(configuration)) configuration.init_options.set('languageFeatures', get_language_features(configuration)) configuration.init_options.set('documentFeatures', { "selectionRange": True, @@ -79,6 +81,17 @@ def get_default_attr_name_case(configuration: ClientConfig) -> str: return 'kebabCase' +def get_text_document_sync(configuration: ClientConfig) -> int: + text_document_sync = configuration.settings.get('volar.vueserver.textDocumentSync') + if text_document_sync == 'full': + return TextDocumentSyncKindFull + if text_document_sync == 'none': + return TextDocumentSyncKindNone + return TextDocumentSyncKindIncremental + +def get_ignored_trigger_characters(configuration: ClientConfig) -> str: + return configuration.settings.get('volar.ignoreTriggerCharacters') or "" + def get_language_features(configuration: ClientConfig) -> dict: language_features = { "references": True, @@ -97,6 +110,7 @@ def get_language_features(configuration: ClientConfig) -> dict: "defaultAttrNameCase": get_default_attr_name_case(configuration), "getDocumentNameCasesRequest": False, "getDocumentSelectionRequest": False, + "ignoreTriggerCharacters": get_ignored_trigger_characters(configuration) }, "schemaRequestService": False, "documentHighlight": True, diff --git a/server/package-lock.json b/server/package-lock.json index f28204c..9369cab 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -67,22 +67,22 @@ "integrity": "sha512-qqNS/YD0Nck5wtQLCPHAfGVgWbbGafxSPjNh0ekYPFSNNqnDH2kamnduzYly8IiADmeVx/MfAE1njMEjVeHTMA==" }, "@volar/code-gen": { - "version": "0.40.5", - "resolved": "https://registry.npmjs.org/@volar/code-gen/-/code-gen-0.40.5.tgz", - "integrity": "sha512-M3D/2pmvjyGYalmldcyvTqVXhUnDxMYA2HtThmdQ8pVsTW4BVVzqrjnJAvHKNfM/zU0XA+fzIh1tfJ4Cssoe5w==", + "version": "0.40.7", + "resolved": "https://registry.npmjs.org/@volar/code-gen/-/code-gen-0.40.7.tgz", + "integrity": "sha512-kPorW8O+va1KYYdvM/4Dsm7hz1SIVSwVYZRkFEcrm5N6I2FTqyWSGcQdcrUwBuX8CNyC0pQ8HZSt/urGAJ8DMQ==", "requires": { - "@volar/source-map": "0.40.5" + "@volar/source-map": "0.40.7" } }, "@volar/pug-language-service": { - "version": "0.40.5", - "resolved": "https://registry.npmjs.org/@volar/pug-language-service/-/pug-language-service-0.40.5.tgz", - "integrity": "sha512-Ii0H8TesuUldiReXzkQSVDw4oKXQpPWM/TdTEcAdVhhgbmDLFGSjMb/0IkqPy2tgWo+JNp4u+zPXxTrIn6OtLg==", - "requires": { - "@volar/code-gen": "0.40.5", - "@volar/shared": "0.40.5", - "@volar/source-map": "0.40.5", - "@volar/transforms": "0.40.5", + "version": "0.40.7", + "resolved": "https://registry.npmjs.org/@volar/pug-language-service/-/pug-language-service-0.40.7.tgz", + "integrity": "sha512-NjGb9ecU5D6GAepf3cAhedrqL52o5WPEYh0I5NwBTobRU27ysVt5Jbjqk17VVdPLcrgI8Ul8jqAlNs7TLL3CZg==", + "requires": { + "@volar/code-gen": "0.40.7", + "@volar/shared": "0.40.7", + "@volar/source-map": "0.40.7", + "@volar/transforms": "0.40.7", "pug-lexer": "^5.0.1", "pug-parser": "^6.0.0", "vscode-languageserver-textdocument": "^1.0.5", @@ -90,9 +90,9 @@ } }, "@volar/shared": { - "version": "0.40.5", - "resolved": "https://registry.npmjs.org/@volar/shared/-/shared-0.40.5.tgz", - "integrity": "sha512-wGjZLj/qosDNCztpbrT2VMYVqaNwnzUfczYXuAKMcW/FWiWrBL7fq6dLGKlU6/SJ3DLAKGF8XnKqW55fll5RJA==", + "version": "0.40.7", + "resolved": "https://registry.npmjs.org/@volar/shared/-/shared-0.40.7.tgz", + "integrity": "sha512-CLM75MZE3sGWlChLqSO2t12w/QH3p3E/z4WsiDs9i+N2BOxpQddvuO9MJmxsJ8Y4Enb/RJDro32ie5H5JsCW9w==", "requires": { "upath": "^2.0.1", "vscode-languageserver-protocol": "^3.17.2", @@ -101,9 +101,9 @@ } }, "@volar/source-map": { - "version": "0.40.5", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-0.40.5.tgz", - "integrity": "sha512-HNO+svbNHXmJtDs82muusI1ErWnMpmNPDpz0Hmex5XDEa+q3NlWFXPMAxCflg294fkCfdOizyCxXYqh3UKz3VA==", + "version": "0.40.7", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-0.40.7.tgz", + "integrity": "sha512-d+BrM1CSmrEKee/yWp5qiVzd0dF41fY7QYaLOY/mVf2YGC/lyd7VkCqKDRT+wUvcLjD9iDTX7p2wDK2IRcdgLQ==", "requires": { "@vue/reactivity": "3.2.37" }, @@ -124,42 +124,43 @@ } }, "@volar/transforms": { - "version": "0.40.5", - "resolved": "https://registry.npmjs.org/@volar/transforms/-/transforms-0.40.5.tgz", - "integrity": "sha512-7Kx8gsC7BSOFXcLujdUY7TVxROh0VI0s97V21dFpI+USWgo4JpNJrPkmdi3ZYRF1X6jd3xswNwdTIw2tf6a8Zw==", + "version": "0.40.7", + "resolved": "https://registry.npmjs.org/@volar/transforms/-/transforms-0.40.7.tgz", + "integrity": "sha512-z7KNUSbB2uqe1H/kwFKlA3HvSSuoqfZEV2rDvLXpNcI2Nzo7oHbLEUnLUqzJzNS1a4v+k7GfEhW+d0k11x5chA==", "requires": { - "@volar/shared": "0.40.5", + "@volar/shared": "0.40.7", "vscode-languageserver-types": "^3.17.2" } }, "@volar/typescript-faster": { - "version": "0.40.5", - "resolved": "https://registry.npmjs.org/@volar/typescript-faster/-/typescript-faster-0.40.5.tgz", - "integrity": "sha512-DfIVkQawbesz+8ghbYS1NnlIQjfMIDsSJY/bumIJk98M/tM/2Fykhiil3GDfTr6ju/fAqDpfF8VF8XpYDWPc7w==", + "version": "0.40.7", + "resolved": "https://registry.npmjs.org/@volar/typescript-faster/-/typescript-faster-0.40.7.tgz", + "integrity": "sha512-RJgSJNmG4zpmEPRVXJir0vyGhII7Ocv3eCaMowi3+IrAeto9Lc9/jt983s6FKla3rrI/qh4M5SgNbrcfRnjcNg==", "requires": { "semver": "^7.3.7" } }, "@volar/typescript-language-service": { - "version": "0.40.5", - "resolved": "https://registry.npmjs.org/@volar/typescript-language-service/-/typescript-language-service-0.40.5.tgz", - "integrity": "sha512-ZznQtpgd0teMsc+nBznPgpWcY3TFJa2vvkwu0HrEb5g0MHI9N6jjOMVcGtRPP4Sbxv/zzjoKaqxDTjPaSHguMA==", + "version": "0.40.7", + "resolved": "https://registry.npmjs.org/@volar/typescript-language-service/-/typescript-language-service-0.40.7.tgz", + "integrity": "sha512-ZQ49vZkfeWV+T8t/nnU92KwtPah/NDgpRz1pwaAaVT4R/AvK0pfI8rZMtbqb534EVJJPhjG27B/4HOam4SDHMQ==", "requires": { - "@volar/shared": "0.40.5", + "@volar/shared": "0.40.7", "semver": "^7.3.7", "upath": "^2.0.1", "vscode-languageserver-protocol": "^3.17.2", "vscode-languageserver-textdocument": "^1.0.5", - "vscode-nls": "^5.0.1" + "vscode-nls": "^5.0.1", + "vscode-uri": "^3.0.3" } }, "@volar/vue-language-core": { - "version": "0.40.5", - "resolved": "https://registry.npmjs.org/@volar/vue-language-core/-/vue-language-core-0.40.5.tgz", - "integrity": "sha512-4EpMQdLaORWg3EBZtgqzgkNRm1+qvyvCyLbnWHT2SPkUuHObPcbyA3giXbOEnPB0pnQpr2nVTv+tRLWvksXdyA==", + "version": "0.40.7", + "resolved": "https://registry.npmjs.org/@volar/vue-language-core/-/vue-language-core-0.40.7.tgz", + "integrity": "sha512-Cbp3zRMvDuTg9vzAFHLWZUB6aGD9nOwG9nIZ9kJZ3bSI20MkFeKWUCzkQqb+9Cp4KKX1s2bWZZKjA+j5tf1Ezw==", "requires": { - "@volar/code-gen": "0.40.5", - "@volar/source-map": "0.40.5", + "@volar/code-gen": "0.40.7", + "@volar/source-map": "0.40.7", "@vue/compiler-core": "^3.2.37", "@vue/compiler-dom": "^3.2.37", "@vue/compiler-sfc": "^3.2.37", @@ -168,13 +169,13 @@ } }, "@volar/vue-language-server": { - "version": "0.40.5", - "resolved": "https://registry.npmjs.org/@volar/vue-language-server/-/vue-language-server-0.40.5.tgz", - "integrity": "sha512-aHidCaFfqg3iERuTReEi/ls8vOZqqxY5BkSGNln75OgihvnUJ+VLBqU6sY6+5AFDBCrP4FVv1mjN47TYcOk+gg==", + "version": "0.40.7", + "resolved": "https://registry.npmjs.org/@volar/vue-language-server/-/vue-language-server-0.40.7.tgz", + "integrity": "sha512-WWXCdAGgjoyxn/uzVweuBwvj4RdYKxJBCAP1EHzvVpctqvc+kd2KxRFnIhJ8sIR5NlZF0G4cOPo0YCOaPdbMNA==", "requires": { - "@volar/shared": "0.40.5", - "@volar/vue-language-core": "0.40.5", - "@volar/vue-language-service": "0.40.5", + "@volar/shared": "0.40.7", + "@volar/vue-language-core": "0.40.7", + "@volar/vue-language-service": "0.40.7", "@vue/shared": "^3.2.37", "request-light": "^0.5.8", "upath": "^2.0.1", @@ -186,21 +187,21 @@ } }, "@volar/vue-language-service": { - "version": "0.40.5", - "resolved": "https://registry.npmjs.org/@volar/vue-language-service/-/vue-language-service-0.40.5.tgz", - "integrity": "sha512-QT4AxtiR+ydmQMfb04vkEciOWE3p9cfK0fNVagfObXE/iPHfWrsUdDEw2STCUgDzMJeX1vOXOWMGEO+iAJEYCw==", + "version": "0.40.7", + "resolved": "https://registry.npmjs.org/@volar/vue-language-service/-/vue-language-service-0.40.7.tgz", + "integrity": "sha512-pH9ulEm1D+PQAn5PJXHHKklHAP3oosBnUWXsMi6DoYIEbs/+mXgG9sX9N8SkaUC+XCBpWbj78stGh1xra1piAA==", "requires": { "@johnsoncodehk/html2pug": "^1.0.0", "@johnsoncodehk/pug-beautify": "^0.2.2", - "@volar/pug-language-service": "0.40.5", - "@volar/shared": "0.40.5", - "@volar/source-map": "0.40.5", - "@volar/transforms": "0.40.5", - "@volar/typescript-faster": "0.40.5", - "@volar/typescript-language-service": "0.40.5", - "@volar/vue-language-core": "0.40.5", - "@volar/vue-language-service-types": "0.40.5", - "@volar/vue-typescript": "0.40.5", + "@volar/pug-language-service": "0.40.7", + "@volar/shared": "0.40.7", + "@volar/source-map": "0.40.7", + "@volar/transforms": "0.40.7", + "@volar/typescript-faster": "0.40.7", + "@volar/typescript-language-service": "0.40.7", + "@volar/vue-language-core": "0.40.7", + "@volar/vue-language-service-types": "0.40.7", + "@volar/vue-typescript": "0.40.7", "@vscode/emmet-helper": "^2.8.4", "@vue/compiler-dom": "^3.2.37", "@vue/reactivity": "^3.2.37", @@ -211,26 +212,27 @@ "vscode-html-languageservice": "^5.0.1", "vscode-json-languageservice": "^5.1.0", "vscode-languageserver-protocol": "^3.17.2", - "vscode-languageserver-textdocument": "^1.0.5" + "vscode-languageserver-textdocument": "^1.0.5", + "vscode-uri": "^3.0.3" } }, "@volar/vue-language-service-types": { - "version": "0.40.5", - "resolved": "https://registry.npmjs.org/@volar/vue-language-service-types/-/vue-language-service-types-0.40.5.tgz", - "integrity": "sha512-TIeXtnj8nbHmstKUfIFRRuSnFHj6qWw6E4psP07XoQkqq99W8h3e0iw4kmPKGZRomHSwjqnCWCr2leSK1wexxw==", + "version": "0.40.7", + "resolved": "https://registry.npmjs.org/@volar/vue-language-service-types/-/vue-language-service-types-0.40.7.tgz", + "integrity": "sha512-DASClZu6w7awotLE3W0/gLls822j92iGjJvbErIrRLR6P+qIZ9lz2oNGKp9trpl+Idl6Z1UI1ZkMZ68sO6yTAQ==", "requires": { "vscode-languageserver-protocol": "^3.17.2", "vscode-languageserver-textdocument": "^1.0.5" } }, "@volar/vue-typescript": { - "version": "0.40.5", - "resolved": "https://registry.npmjs.org/@volar/vue-typescript/-/vue-typescript-0.40.5.tgz", - "integrity": "sha512-6OHJ87e8A3Z0xuWmBg72X5aYbW/EatogB168827j/OL371eiy3dExqa5y2+eJuWYjDiRJOmlHzhUElN+OEQRZQ==", + "version": "0.40.7", + "resolved": "https://registry.npmjs.org/@volar/vue-typescript/-/vue-typescript-0.40.7.tgz", + "integrity": "sha512-TlbUCWLnCr+mx4i2RE6oA0rlxQ5Q00rMKUC+aOztzvuVcoG8u1TuJMeVVg938+lCuUu4xJyNiwFMUrtcC9WdjA==", "requires": { - "@volar/code-gen": "0.40.5", - "@volar/typescript-faster": "0.40.5", - "@volar/vue-language-core": "0.40.5" + "@volar/code-gen": "0.40.7", + "@volar/typescript-faster": "0.40.7", + "@volar/vue-language-core": "0.40.7" } }, "@vscode/emmet-helper": { @@ -769,13 +771,13 @@ "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==" }, "vscode-css-languageservice": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.0.1.tgz", - "integrity": "sha512-81n/eeYuJwQdvpoy6IK1258PtPbO720fl13FcJ5YQECPyHMFkmld1qKHwPJkyLbLPfboqJPM53ys4xW8v+iBVw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.1.0.tgz", + "integrity": "sha512-GFXmy6EVceVc/OPKENnoW31EiIksekz9yruczIAkA0eX5BSkNh/ojgeCzwW1ERRFpDymVZj0aLYKSrYZmvU6VA==", "requires": { - "vscode-languageserver-textdocument": "^1.0.4", - "vscode-languageserver-types": "^3.17.1", - "vscode-nls": "^5.0.1", + "vscode-languageserver-textdocument": "^1.0.7", + "vscode-languageserver-types": "^3.17.2", + "vscode-nls": "^5.2.0", "vscode-uri": "^3.0.3" } }, @@ -832,9 +834,9 @@ } }, "vscode-languageserver-textdocument": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.5.tgz", - "integrity": "sha512-1ah7zyQjKBudnMiHbZmxz5bYNM9KKZYz+5VQLj+yr8l+9w3g+WAhCkUkWbhMEdC5u0ub4Ndiye/fDyS8ghIKQg==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.7.tgz", + "integrity": "sha512-bFJH7UQxlXT8kKeyiyu41r22jCZXG8kuuVVA33OEJn1diWOZK5n8zBSPZFHVBOu8kXZ6h0LIRhf5UnCo61J4Hg==" }, "vscode-languageserver-types": { "version": "3.17.2", diff --git a/server/package.json b/server/package.json index 59fc20c..071d6d5 100644 --- a/server/package.json +++ b/server/package.json @@ -2,7 +2,7 @@ "name": "sublime-volar", "version": "0.0.0", "dependencies": { - "@volar/vue-language-server": "^0.40.5", + "@volar/vue-language-server": "^0.40.7", "typescript": "^4.7.4" } } diff --git a/sublime-package.json b/sublime-package.json index 85816e0..b913e18 100644 --- a/sublime-package.json +++ b/sublime-package.json @@ -10,9 +10,32 @@ "definitions": { "PluginConfig": { "properties": { + "initializationOptions": { + "additionalProperties": false, + "properties": { + "typescript": { + "additionalProperties": false, + "properties": { + "serverPath": { + "type": "string", + "description": "Path to tsserverlibrary.js / tsserver.js / typescript.js." + }, + "localizedPath": { + "type": "string", + "description": "Path to lib/xxx/diagnosticMessages.generated.json" + } + } + } + } + }, "settings": { "additionalProperties": false, "properties": { + "volar.ignoreTriggerCharacters": { + "type": "string", + "default": "", + "description": "Do not trigger the auto-complete popup on these characters." + }, "volar.autoCompleteRefs": { "default": false, "description": "Auto-complete Ref value with `.value`.", @@ -77,6 +100,21 @@ ], "type": "string" }, + "volar.vueserver.textDocumentSync": { + "type": "string", + "default": "incremental", + "enum": [ + "incremental", + "full", + "none" + ], + "enumDescriptions": [ + "Documents are synced by sending the full content on open. After that only incremental updates to the document are send.", + "Documents are synced by always sending the full content of the document.", + "Documents should not be synced at all." + ], + "description": "Defines how the host (editor) should sync document changes to the language server. SFC incremental parser only working when config \"incremental\"." + }, "volar.vueserver.maxOldSpaceSize": { "default": null, "description": "Set --max-old-space-size option on server process. If you have problem on frequently \"Request textDocument/** failed.\" error, try setting higher memory(MB) on it.", @@ -252,23 +290,22 @@ ], "markdownDescription": "Run app in browser or uni-app" }, - "experimentalImplicitWrapComponentOptionsWithDefineComponent": { - "enum": [ - true, - false, - "onlyJs" + "experimentalComponentOptionsWrapper": { + "type": "array", + "default": [ + "(await import('vue')).defineComponent(", + ")" ], - "default": "onlyJs", - "markdownDescription": "Implicit wrap object literal component options export with `defineComponent()`." + "markdownDescription": "How to wrap option of `export default { ... }`? Default: `[\"(await import('vue')).default.extend(\", \")\"]` for target < 2.7, `[\"(await import('vue')).defineComponent(\", \")\"]` for target >= 2.7." }, - "experimentalImplicitWrapComponentOptionsWithVue2Extend": { + "experimentalComponentOptionsWrapperEnable": { "enum": [ true, false, "onlyJs" ], - "default": false, - "markdownDescription": "Implicit wrap object literal component options export with `Vue.extend()`." + "default": "onlyJs", + "markdownDescription": "Enable `experimentalComponentOptionsWrapper`?" }, "experimentalDowngradePropsAndEmitsToSetupReturnOnScriptSetup": { "enum": [