diff --git a/README.md b/README.md index b680930..15ffdc5 100644 --- a/README.md +++ b/README.md @@ -8,10 +8,10 @@ ### 安装方式一(推荐) -安装[vsix](./vscode/tsl-devkit-1.0.0.vsix)扩展 +安装[vsix](./vscode/)扩展 ```bash -code --install-extension tsl-devkit-1.0.0.vsix # 具体版本号以vsix文件为准 +code --install-extension tsl-tools-1.0.0.vsix # 具体版本号以vsix文件为准 ``` ### 安装方式二 @@ -33,7 +33,7 @@ npm install npx vsce package # 安装 -code --install-extension tsl-devkit-1.0.0.vsix # 具体版本号以vsix文件为准 +code --install-extension tsl-tools-1.0.0.vsix # 具体版本号以vsix文件为准 ``` ## Vim @@ -52,9 +52,9 @@ autocmd BufNewFile,BufRead *.ts[lf] setf tsl ```json "languageserver": { "tsl-server": { - "command": "tsl-server", - "filetypes": ["tsl", "tsf"] + "command": "tsl-server", + "args": ["--log=trace", "--log=stderr"], + "filetypes": ["tsl", "tsf"] } } ``` - diff --git a/test/test.tsl b/test/test.tsl index 1cf68b4..9a19ae0 100644 --- a/test/test.tsl +++ b/test/test.tsl @@ -1,13 +1,22 @@ // SYNTAX TEST "tsl" -// 字符串,数字,注释 // 注释 TODO -// abc(); -a := "string"; // 字符串 -b := 123; // 数字 -c := 1.23; // 浮点数 -a := "字符串函数func()"; +// TODO: 注释 +{aaaaa TODO} +(* abcdef *) +// 数字 +num6 := 123; // 数字 +num7 := 1.23; // 浮点数 +num1 := 0xAF123; +num2 := 0O12357; +num3 := 0B010111; +num4 := 1.2e-12; +num5 := +3E15; + +// 字符串 +string1 := '123'; +string2 := "func2()"; // 类相关 type MyClass = class @@ -20,6 +29,8 @@ public property P1 write param1_ read param1_; private + [weakref]obj: integer; + [weakref]b: MyClass; param1_: real; param2_: array of string; end; @@ -30,7 +41,7 @@ end; function MyClass.Func3(a: real = 1; b: string = "123"): array of string; begin - obj.P1; + obj.P1.P2; self.P1; end @@ -42,7 +53,8 @@ data.items.count; // 函数声明 function f(); // 无参数 function f(a, b); // 参数无类型 -function f(a: real; b: DD); // 参数有类型 +function f(a: real; b: DD); // 参数有类型1 +function f(a: real, b: DD); // 参数有类型2 function f(a: real = 1; b: string = "123"; c: number = abc.CONST1): def; // 带返回类型 // 函数调用 @@ -70,3 +82,15 @@ b := array((1, 2), (3, 4)); sql += "update ts_xbcheck result set isvalid = "$status$remark$" where checkid in ('"$array2str (checkid[(i-1)*len:], "','")$"');\r\n" sql += + +// tsl-web块 + + +
++ +
+ + + + diff --git a/vim/tsl.vim b/vim/tsl.vim index 26ec6a7..5c69542 100644 --- a/vim/tsl.vim +++ b/vim/tsl.vim @@ -20,7 +20,7 @@ syn keyword tslPrimitiveType string integer boolean int64 real array # 类型系统和面向对象 syn keyword tslClassType type class fakeclass new -syn keyword tslClassModifier override overload virtual property self inherited +syn keyword tslClassModifier override overload virtual property inherited self syn keyword tslAccessModifier public protected private published syn keyword tslConstructor create destroy operator syn keyword tslReferenceModifier weakref autoref @@ -66,15 +66,17 @@ syn keyword tslBoolean false true syn keyword tslNull nil syn keyword tslMathConstant inf nan +# todo syn keyword tslTodo FIXME NOTE NOTES TODO XXX contained # Function definitions -syn match tslFuncName '\%(\h\w*\.\)\?\h\w*' contained nextgroup=tslFuncParams skipwhite contains=tslTypeNameInFunc,tslDotInFunc,tslFuncNamePart -syn match tslTypeNameInFunc '\h\w*\ze\.\h\w*' contained -syn match tslDotInFunc '\.' contained -syn match tslFuncName '\.\@<=\h\w*' contained +syn match tslFuncName '\%(\h\w*\.\)\?\h\w*' contained nextgroup=tslFuncParams skipwhite contains=tslTypeNameInFunc,tslDotInFunc +syn match tslTypeNameInFunc '\h\w*\ze\.\h\w*' contained +syn match tslDotInFunc '\.' contained +syn match tslFuncName '\.\@<=\h\w*' contained syn region tslFuncParams + \ matchgroup=Delimiter \ start='(' \ end=')' \ contained @@ -87,12 +89,8 @@ syn match tslReturnType ':\s*[^;]*' contained contains=tslColon syn match tslParamSep '[;,]' contained syn match tslColon ':' contained -syn match tslVarDecl '\(?\s\)\@' contains=tslObjectName,tslPropertyDot,tslPropertyName syn match tslObjectName '\h\w*\ze\.\h\w*' contained syn match tslPropertyDot '\.' contained syn match tslPropertyName '\.\@<=\h\w*\%(\ze\.\|\ze\s*[^(]\|\ze\s*$\)' contained @@ -107,7 +105,7 @@ syn region tslFuncCall \ contains=tslFuncCallName,tslFuncCall,tslNamedParam,tslPositionalParam,tslString,tslRawString,tslNumber,tslIdentifier,tslOperator,tslParamSep \ transparent -syn match tslNamedParam '\h\w*\s*:\s*[^;,)]*' contained +syn match tslNamedParam '\%((\|;\s*\)\zs\h\w*\s*:\s*[^;,)]*' contained \ contains=tslParamName,tslParamColon,tslParamValue syn match tslParamName '\h\w*\ze\s*:' contained @@ -118,8 +116,21 @@ syn match tslParamValue ':\s*\zs[^;,)]*' contained syn match tslPositionalParam '[^;,():]*' contained \ contains=tslString,tslNumber,tslIdentifier,tslOperator,tslFuncCall,tslFuncCallName -syn match tslParamSep '[;,]' contained +# Variable declaration +syn match tslVarDeclWithTag '\]\@<=\s*\h\w*\ze\s*:\%(=\)\@!' + \ nextgroup=tslVarTypeDecl skipwhite + \ contains=tslVarName +syn match tslVarDeclStart '\%(^\s*\|;\s*\)\zs\h\w*\ze\s*:\%(=\)\@!' + \ nextgroup=tslVarTypeDecl skipwhite + \ contains=tslVarName + +syn match tslVarName '\h\w*' contained +syn region tslVarTypeDecl + \ matchgroup=tslVarDelimiter start=':\%(=\)\@!' end=';' + \ contained keepend oneline + \ contains=tslVarType +syn match tslVarType '[^;]*' contained # Operators and delimiters syn match tslOperator '[+\-*/<>=!&|^~%]' @@ -144,6 +155,7 @@ syn match tslNumber '\<\d\+[eE][+-]\=\d\+[jJ]\=\>' syn match tslNumber '\<\d\+\.\%([eE][+-]\=\d\+\)\=[jJ]\=\%(\W\|$\)\@=' syn match tslNumber '\%(^\|\W\)\zs\d*\.\d\+\%([eE][+-]\=\d\+\)\=[jJ]\=\>' + # Highlight links hi def link tslProgramStructure Statement hi def link tslModuleStructure Statement @@ -179,8 +191,8 @@ hi def link tslNull Constant hi def link tslMathConstant Number # 其他元素的高亮链接保持不变 -hi def link tslClassName Type -hi def link tslDot Operator +hi def link tslObjectName Type +hi def link tslPropertyDot Operator hi def link tslPropertyName Special hi def link tslFuncName Function diff --git a/vscode/CHANGELOG.md b/vscode/CHANGELOG.md index 2d29a69..48656c9 100644 --- a/vscode/CHANGELOG.md +++ b/vscode/CHANGELOG.md @@ -1,6 +1,23 @@ # Change Log -Notable changes to the `TSL` extension will be documented in this file. +Notable changes to the `TSL` extension will be documented in thio file. + +## [2.3.1]: 2025-07-10 + +- 修复:关键字`initialization`拼写错误 + +## [2.3.0]: 2025-07-03 + +- 修改插件名为`tsl-tools` +- 支持设置参数 + - `tsl.server.executable`: `tsl-server`的执行路径 + - `tsl.server.arguments`: `tsl-server`的启动参数 + - `tsl.interpreter.executable`: `tsl`解释器的路径 + +## [2.3.0]: 2025-08-29 + +- 支持`begin|else|do|then`等换行增加缩进 +- 支持`end`等换行减少缩进 ## [2.2.0]: 2025-07-02 diff --git a/vscode/bin/tsl-server b/vscode/bin/tsl-server index d57fbd6..f1854af 100644 Binary files a/vscode/bin/tsl-server and b/vscode/bin/tsl-server differ diff --git a/vscode/bin/tsl-server.exe b/vscode/bin/tsl-server.exe index 780ad5a..3efbcac 100644 Binary files a/vscode/bin/tsl-server.exe and b/vscode/bin/tsl-server.exe differ diff --git a/vscode/generate_extension.sh b/vscode/generate_extension.sh deleted file mode 100644 index f6472ca..0000000 --- a/vscode/generate_extension.sh +++ /dev/null @@ -1,3 +0,0 @@ -cp ../lsp-server/build/arch/tsl-server ./bin/tsl-server -cp ../lsp-server/build/msys2/tsl-server.exe ./bin/tsl-server.exe -npx vsce package diff --git a/vscode/language-configuration.json b/vscode/language-configuration.json index 75fa918..c335dc9 100644 --- a/vscode/language-configuration.json +++ b/vscode/language-configuration.json @@ -22,15 +22,9 @@ ["\"", "\""], ["'", "'"] ], - "folding": { - "markers": { - "start": "^\\s*\\{\\s*$", - "end": "^\\s*\\}\\s*$" - } - }, "wordPattern": "\\b[a-zA-Z_][a-zA-Z0-9_]*\\b", "indentationRules": { - "increaseIndentPattern": "^.*(\\{[^}\"']*|\\([^)\"']*|\\[[^\\]\"']*)$", - "decreaseIndentPattern": "^(.*\\*\\/)?\\s*[\\}\\]\\)].*$" + "increaseIndentPattern": "^.*\\b([Bb][Ee][Gg][Ii][Nn]|[Dd][Oo]|[Tt][Hh][Ee][Nn]|[Ee][Ll][Ss][Ee])\\b.*$", + "decreaseIndentPattern": "^\\s*\\b([Ee][Nn][Dd])\\b.*$" } } diff --git a/vscode/package-lock.json b/vscode/package-lock.json index 3052b59..44e318e 100644 --- a/vscode/package-lock.json +++ b/vscode/package-lock.json @@ -1,12 +1,12 @@ { "name": "tsl-devkit", - "version": "2.1.0", + "version": "2.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "tsl-devkit", - "version": "2.1.0", + "version": "2.3.0", "license": "AGPL-3.0-or-later", "dependencies": { "vscode-languageclient": "^9.0.1" @@ -14,7 +14,7 @@ "devDependencies": { "@types/node": "^24.0.3", "@types/vscode": "^1.101.0", - "@vscode/vsce": "^3.5.0", + "@vscode/vsce": "^3.6.0", "prettier": "^3.5.3", "typescript": "^5.8.3" }, @@ -367,64 +367,64 @@ } }, "node_modules/@secretlint/config-creator": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/@secretlint/config-creator/-/config-creator-9.3.4.tgz", - "integrity": "sha512-GRMYfHJ+rewwB26CC3USVObqSQ/mDLXzXcUMJw/wJisPr3HDZmdsYlcsNnaAcGN+EZmvqSDkgSibQm1hyZpzbg==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@secretlint/config-creator/-/config-creator-10.1.1.tgz", + "integrity": "sha512-TJ42CHZqqnEe9ORvIXVVMqdu3KAtyZRxLspjFexo6XgrwJ6CoFHQYzIihilqRjo2sJh9HMrpnYSj/5hopofGrA==", "dev": true, "license": "MIT", "dependencies": { - "@secretlint/types": "^9.3.4" + "@secretlint/types": "^10.1.1" }, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=20.0.0" } }, "node_modules/@secretlint/config-loader": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/@secretlint/config-loader/-/config-loader-9.3.4.tgz", - "integrity": "sha512-sy+yWDWh4cbAbpQYLiO39DjwNGEK1EUhTqNamLLBo163BdJP10FIWhqpe8mtGQBSBXRtxr8Hg/gc3Xe4meIoww==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@secretlint/config-loader/-/config-loader-10.1.1.tgz", + "integrity": "sha512-jBClVFmS6Yu/zI5ejBCRF5a5ASYsE4gOjogjB+WsaHbQHtGvnyY7I26Qtdg4ihCc/VPKYQg0LdM75pLTXzwsjg==", "dev": true, "license": "MIT", "dependencies": { - "@secretlint/profiler": "^9.3.4", - "@secretlint/resolver": "^9.3.4", - "@secretlint/types": "^9.3.4", + "@secretlint/profiler": "^10.1.1", + "@secretlint/resolver": "^10.1.1", + "@secretlint/types": "^10.1.1", "ajv": "^8.17.1", "debug": "^4.4.1", "rc-config-loader": "^4.1.3" }, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=20.0.0" } }, "node_modules/@secretlint/core": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/@secretlint/core/-/core-9.3.4.tgz", - "integrity": "sha512-ErIVHI6CJd191qdNKuMkH3bZQo9mWJsrSg++bQx64o0WFuG5nPvkYrDK0p/lebf+iQuOnzvl5HrZU6GU9a6o+Q==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@secretlint/core/-/core-10.1.1.tgz", + "integrity": "sha512-COLCxSoH/iVQdLeaZPVtBj0UWKOagO09SqYkCQgfFfZ+soGxKVK405dL317r4PnH9Pm8/s8xQC6OSY5rWTRObQ==", "dev": true, "license": "MIT", "dependencies": { - "@secretlint/profiler": "^9.3.4", - "@secretlint/types": "^9.3.4", + "@secretlint/profiler": "^10.1.1", + "@secretlint/types": "^10.1.1", "debug": "^4.4.1", "structured-source": "^4.0.0" }, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=20.0.0" } }, "node_modules/@secretlint/formatter": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/@secretlint/formatter/-/formatter-9.3.4.tgz", - "integrity": "sha512-ARpoBOKz6WP3ocLITCFkR1/Lj636ugpBknylhlpc45r5aLdvmyvWAJqodlw5zmUCfgD6JXeAMf3Hi60aAiuqWQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@secretlint/formatter/-/formatter-10.1.1.tgz", + "integrity": "sha512-Gpd8gTPN121SJ0h/9e6nWlZU7PitfhXUiEzW7Kyswg6kNGs+bSqmgTgWFtbo1VQ4ygJYiveWPNT05RCImBexJw==", "dev": true, "license": "MIT", "dependencies": { - "@secretlint/resolver": "^9.3.4", - "@secretlint/types": "^9.3.4", - "@textlint/linter-formatter": "^14.7.2", - "@textlint/module-interop": "^14.7.2", - "@textlint/types": "^14.7.2", + "@secretlint/resolver": "^10.1.1", + "@secretlint/types": "^10.1.1", + "@textlint/linter-formatter": "^14.8.4", + "@textlint/module-interop": "^14.8.4", + "@textlint/types": "^14.8.4", "chalk": "^4.1.2", "debug": "^4.4.1", "pluralize": "^8.0.0", @@ -433,47 +433,47 @@ "terminal-link": "^2.1.1" }, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=20.0.0" } }, "node_modules/@secretlint/node": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/@secretlint/node/-/node-9.3.4.tgz", - "integrity": "sha512-S0u8i+CnPmyAKtuccgot9L5cmw6DqJc0F+b3hhVIALd8kkeLt3RIXOOej15tU7N0V1ISph90Gz92V72ovsprgQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@secretlint/node/-/node-10.1.1.tgz", + "integrity": "sha512-AhN+IGqljVObm8a+B33b23FY79wihu5E61Nd3oYSoZV7SxUvMjpafqhLfpt4frNSY7Ghf/pirWu7JY7GMujFrA==", "dev": true, "license": "MIT", "dependencies": { - "@secretlint/config-loader": "^9.3.4", - "@secretlint/core": "^9.3.4", - "@secretlint/formatter": "^9.3.4", - "@secretlint/profiler": "^9.3.4", - "@secretlint/source-creator": "^9.3.4", - "@secretlint/types": "^9.3.4", + "@secretlint/config-loader": "^10.1.1", + "@secretlint/core": "^10.1.1", + "@secretlint/formatter": "^10.1.1", + "@secretlint/profiler": "^10.1.1", + "@secretlint/source-creator": "^10.1.1", + "@secretlint/types": "^10.1.1", "debug": "^4.4.1", - "p-map": "^4.0.0" + "p-map": "^7.0.3" }, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=20.0.0" } }, "node_modules/@secretlint/profiler": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/@secretlint/profiler/-/profiler-9.3.4.tgz", - "integrity": "sha512-99WmaHd4dClNIm5BFsG++E6frNIZ3qVwg6s804Ql/M19pDmtZOoVCl4/UuzWpwNniBqLIgn9rHQZ/iGlIW3wyw==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@secretlint/profiler/-/profiler-10.1.1.tgz", + "integrity": "sha512-kReI+Wr7IQz0LbVwYByzlnPbx4BEF2oEWJBc4Oa45g24alCjHu+jD9h9mzkTJqYUgMnVYD3o7HfzeqxFrV+9XA==", "dev": true, "license": "MIT" }, "node_modules/@secretlint/resolver": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/@secretlint/resolver/-/resolver-9.3.4.tgz", - "integrity": "sha512-L1lIrcjzqcspPzZttmOvMmOFDpJTYFyRBONg94TZBWrpv4x0w5G2SYR+K7EE1SbYQAiPxw1amoXT1YRP8cZF2A==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@secretlint/resolver/-/resolver-10.1.1.tgz", + "integrity": "sha512-GdQzxnBtdBRjBULvZ8ERkaRqDp0njVwXrzBCav1pb0XshVk76C1cjeDqtTqM4RJ1Awo/g5U5MIWYztYv67v5Gg==", "dev": true, "license": "MIT" }, "node_modules/@secretlint/secretlint-formatter-sarif": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/@secretlint/secretlint-formatter-sarif/-/secretlint-formatter-sarif-9.3.4.tgz", - "integrity": "sha512-IpAl5gzKwpTRqoivKOTJB89l6b7uvBwjSNKzJb3oIGD9Jg3vXcQunSntvLv5XGynYtdi1NhANfEpbhavlmMSyA==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-formatter-sarif/-/secretlint-formatter-sarif-10.1.1.tgz", + "integrity": "sha512-Dyq8nzy6domjSlZKX1E5PEzuWxeTqjQJWrlXBmVmOjwLBLfRZDlm5Vq+AduBmEk03KEIKIZi4cZQwsniuRPO9Q==", "dev": true, "license": "MIT", "dependencies": { @@ -481,50 +481,50 @@ } }, "node_modules/@secretlint/secretlint-rule-no-dotenv": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-no-dotenv/-/secretlint-rule-no-dotenv-9.3.4.tgz", - "integrity": "sha512-lMSVwTrJiZ/zL9VIzpT7tMcb0ClI6u4cyJo2YKGSbuJErJG1zB4gQKtjIwCSt7px5JF6U+aFtpb9M8+s40WWCQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-no-dotenv/-/secretlint-rule-no-dotenv-10.1.1.tgz", + "integrity": "sha512-a3/sOUUtEHuw1HCadtxUjViNeomiiohfJj+rwtHxJkCq4pjITS3HSYhQBXnNvkctQNljKIzFm7JUA/4QJ6I4sQ==", "dev": true, "license": "MIT", "dependencies": { - "@secretlint/types": "^9.3.4" + "@secretlint/types": "^10.1.1" }, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=20.0.0" } }, "node_modules/@secretlint/secretlint-rule-preset-recommend": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-preset-recommend/-/secretlint-rule-preset-recommend-9.3.4.tgz", - "integrity": "sha512-RvzrLNN2A0B2bYQgRSRjh2dkdaIDuhXjj4SO5bElK1iBtJNiD6VBTxSSY1P3hXYaBeva7MEF+q1PZ3cCL8XYOA==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@secretlint/secretlint-rule-preset-recommend/-/secretlint-rule-preset-recommend-10.1.1.tgz", + "integrity": "sha512-+GeISCXVgpnoeRZE4ZPsuO97+fm6z8Ge23LNq6LvR9ZJAq018maXVftkJhHj4hnvYB5URUAEerBBkPGNk5/Ong==", "dev": true, "license": "MIT", "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=20.0.0" } }, "node_modules/@secretlint/source-creator": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/@secretlint/source-creator/-/source-creator-9.3.4.tgz", - "integrity": "sha512-I9ZA1gm9HJNaAhZiQdInY9VM04VTAGDV4bappVbEJzMUDnK/LTbYqfQ88RPqgCGCqa6ee8c0/j5Bn7ypweouIw==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@secretlint/source-creator/-/source-creator-10.1.1.tgz", + "integrity": "sha512-IWjvHcE0bhC/x88a9M9jbZlFRZGUEbBzujxrs2KzI5IQ2BXTBRBRhRSjE/BEpWqDHILB22c3mfam8X+UjukphA==", "dev": true, "license": "MIT", "dependencies": { - "@secretlint/types": "^9.3.4", + "@secretlint/types": "^10.1.1", "istextorbinary": "^9.5.0" }, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=20.0.0" } }, "node_modules/@secretlint/types": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/@secretlint/types/-/types-9.3.4.tgz", - "integrity": "sha512-z9rdKHNeL4xa48+367RQJVw1d7/Js9HIQ+gTs/angzteM9osfgs59ad3iwVRhCGYbeUoUUDe2yxJG2ylYLaH3Q==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@secretlint/types/-/types-10.1.1.tgz", + "integrity": "sha512-/JGAvVkurVHkargk3AC7UxRy+Ymc+52AVBO/fZA5pShuLW2dX4O/rKc4n8cyhQiOb/3ym5ACSlLQuQ8apPfxrQ==", "dev": true, "license": "MIT", "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=20.0.0" } }, "node_modules/@sindresorhus/merge-streams": { @@ -541,24 +541,24 @@ } }, "node_modules/@textlint/ast-node-types": { - "version": "14.8.1", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.8.1.tgz", - "integrity": "sha512-fW5Tx5F3ZmTZeKNins9uRhoDCVLHcuUijGNQRfCmJX8R6MjL0yBFt3hHlrvXDpZg5t2PELCvBA25id83LhNMSg==", + "version": "14.8.4", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.8.4.tgz", + "integrity": "sha512-+fI7miec/r9VeniFV9ppL4jRCmHNsTxieulTUf/4tvGII3db5hGriKHC4p/diq1SkQ9Sgs7kg6UyydxZtpTz1Q==", "dev": true, "license": "MIT" }, "node_modules/@textlint/linter-formatter": { - "version": "14.8.1", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-14.8.1.tgz", - "integrity": "sha512-guraonRgEZJ9MnysT+pCvXFDaT5VeHwAHZAsr7uDRSviqEldmG2oqtXf4lxaQ1Qo4SL16bzSEr6F7+j5k8QONQ==", + "version": "14.8.4", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-14.8.4.tgz", + "integrity": "sha512-sZ0UfYRDBNHnfMVBqLqqYnqTB7Ec169ljlmo+SEHR1T+dHUPYy1/DZK4p7QREXlBSFL4cnkswETCbc9xRodm4Q==", "dev": true, "license": "MIT", "dependencies": { "@azu/format-text": "^1.0.2", "@azu/style-format": "^1.0.1", - "@textlint/module-interop": "^14.8.1", - "@textlint/resolver": "^14.8.1", - "@textlint/types": "^14.8.1", + "@textlint/module-interop": "14.8.4", + "@textlint/resolver": "14.8.4", + "@textlint/types": "14.8.4", "chalk": "^4.1.2", "debug": "^4.4.1", "js-yaml": "^3.14.1", @@ -578,27 +578,27 @@ "license": "MIT" }, "node_modules/@textlint/module-interop": { - "version": "14.8.1", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.8.1.tgz", - "integrity": "sha512-Lt3Qjb81e09nPElcJM6rOml5uPyZLKHScAoI9LlpcVca5oS2ZjnPr6M92tKxf/kfkqL4lDkg0LY61W1r5MI7Zg==", + "version": "14.8.4", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.8.4.tgz", + "integrity": "sha512-1LdPYLAVpa27NOt6EqvuFO99s4XLB0c19Hw9xKSG6xQ1K82nUEyuWhzTQKb3KJ5Qx7qj14JlXZLfnEuL6A16Bw==", "dev": true, "license": "MIT" }, "node_modules/@textlint/resolver": { - "version": "14.8.1", - "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-14.8.1.tgz", - "integrity": "sha512-aAOKXQJhVnq8LXBibEpo0dgEr8ImCw4waj3kAeC+Nj+a9nQkOitg4Veul/IO6he7mNxvYRgqWWoMaN9JRqp34w==", + "version": "14.8.4", + "resolved": "https://registry.npmjs.org/@textlint/resolver/-/resolver-14.8.4.tgz", + "integrity": "sha512-nMDOgDAVwNU9ommh+Db0U+MCMNDPbQ/1HBNjbnHwxZkCpcT6hsAJwBe38CW/DtWVUv8yeR4R40IYNPT84srNwA==", "dev": true, "license": "MIT" }, "node_modules/@textlint/types": { - "version": "14.8.1", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.8.1.tgz", - "integrity": "sha512-8ncGYcEoKLE3JP2s9+2IlxMbMLWpNmvptOZmF3qI188vW3g/a00r3hBRNMcKxJg3phYDtgLOyXdv44/jwJxsLw==", + "version": "14.8.4", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.8.4.tgz", + "integrity": "sha512-9nyY8vVXlr8hHKxa6+37omJhXWCwovMQcgMteuldYd4dOxGm14AK2nXdkgtKEUQnzLGaXy46xwLCfhQy7V7/YA==", "dev": true, "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "^14.8.1" + "@textlint/ast-node-types": "14.8.4" } }, "node_modules/@types/node": { @@ -648,17 +648,17 @@ } }, "node_modules/@vscode/vsce": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-3.5.0.tgz", - "integrity": "sha512-2Eb6fBh8OzNhWqviCjeUPA1MW+d2GCb1QlVxrpOR8lrLHGk8x7HD4LbfELnZPyOz2X33Myz9FE9t4LwYbmeMRg==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-3.6.0.tgz", + "integrity": "sha512-u2ZoMfymRNJb14aHNawnXJtXHLXDVKc1oKZaH4VELKT/9iWKRVgtQOdwxCgtwSxJoqYvuK4hGlBWQJ05wxADhg==", "dev": true, "license": "MIT", "dependencies": { "@azure/identity": "^4.1.0", - "@secretlint/node": "^9.3.4", - "@secretlint/secretlint-formatter-sarif": "^9.3.4", - "@secretlint/secretlint-rule-no-dotenv": "^9.3.4", - "@secretlint/secretlint-rule-preset-recommend": "^9.3.4", + "@secretlint/node": "^10.1.1", + "@secretlint/secretlint-formatter-sarif": "^10.1.1", + "@secretlint/secretlint-rule-no-dotenv": "^10.1.1", + "@secretlint/secretlint-rule-preset-recommend": "^10.1.1", "@vscode/vsce-sign": "^2.0.0", "azure-devops-node-api": "^12.5.0", "chalk": "^4.1.2", @@ -675,7 +675,7 @@ "minimatch": "^3.0.3", "parse-semver": "^1.1.1", "read": "^1.0.7", - "secretlint": "^9.3.4", + "secretlint": "^10.1.1", "semver": "^7.5.2", "tmp": "^0.2.3", "typed-rest-client": "^1.8.4", @@ -849,20 +849,6 @@ "node": ">= 14" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ajv": { "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", @@ -1227,16 +1213,6 @@ "license": "ISC", "optional": true }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/cockatiel": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.2.1.tgz", @@ -2141,16 +2117,6 @@ "node": ">= 4" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -2853,16 +2819,13 @@ } }, "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", + "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", "dev": true, "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -3363,16 +3326,16 @@ "license": "ISC" }, "node_modules/secretlint": { - "version": "9.3.4", - "resolved": "https://registry.npmjs.org/secretlint/-/secretlint-9.3.4.tgz", - "integrity": "sha512-iNOzgMX/+W1SQNW/TW6eikGChyaPiazr2AEXjzjpoB0R6QJEulvlwhn0KLT1/xjPfdYrk3yiXZM40csUqET8uQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/secretlint/-/secretlint-10.1.1.tgz", + "integrity": "sha512-q50i+I9w6HH8P6o34LVq6M3hm5GZn2Eq5lYGHkEByOAbVqBHn8gsMGgyxjP1xSrSv1QjDtjxs/zKPm6JtkNzGw==", "dev": true, "license": "MIT", "dependencies": { - "@secretlint/config-creator": "^9.3.4", - "@secretlint/formatter": "^9.3.4", - "@secretlint/node": "^9.3.4", - "@secretlint/profiler": "^9.3.4", + "@secretlint/config-creator": "^10.1.1", + "@secretlint/formatter": "^10.1.1", + "@secretlint/node": "^10.1.1", + "@secretlint/profiler": "^10.1.1", "debug": "^4.4.1", "globby": "^14.1.0", "read-pkg": "^8.1.0" @@ -3381,7 +3344,7 @@ "secretlint": "bin/secretlint.js" }, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=20.0.0" } }, "node_modules/semver": { diff --git a/vscode/package.json b/vscode/package.json index 14bceed..3ce1f91 100644 --- a/vscode/package.json +++ b/vscode/package.json @@ -1,8 +1,8 @@ { - "name": "tsl-devkit", + "name": "tsl-tools", "displayName": "TSL", - "version": "2.2.0", - "description": "TSL syntax highlighter support for VSCode.", + "version": "2.3.0", + "description": "VSCode extension for TSL, with syntax highlighting, code completion, and formatting", "publisher": "csh", "homepage": "https://git.mytsl.cn/csh/tsl-devkit", "author": { @@ -46,6 +46,33 @@ "path": "./syntaxes/tsl.tmLanguage.json" } ], + "configuration": { + "type": "object", + "title": "TSL", + "properties": { + "tsl.server.executable": { + "type": "string", + "default": "", + "description": "Path to tsl-server executable (leave empty for auto-detection)" + }, + "tsl.server.arguments": { + "type": "array", + "default": [ + "--log=info", + "--log-stderr" + ], + "description": "Arguments for TSL server", + "items": { + "type": "string" + } + }, + "tsl.interpreter.executable": { + "type": "string", + "default": "", + "description": "Path to TSL interpreter executable (leave empty for auto-detection)" + } + } + }, "commands": [ { "command": "extension.start", @@ -59,11 +86,11 @@ "watch": "tsc -watch -p ." }, "devDependencies": { - "@vscode/vsce": "^3.5.0", - "typescript": "^5.8.3", "@types/node": "^24.0.3", "@types/vscode": "^1.101.0", - "prettier": "^3.5.3" + "@vscode/vsce": "^3.6.0", + "prettier": "^3.5.3", + "typescript": "^5.8.3" }, "engines": { "vscode": "^1.101.0" diff --git a/vscode/src/extension.ts b/vscode/src/extension.ts index e5ebbf9..60edfcd 100644 --- a/vscode/src/extension.ts +++ b/vscode/src/extension.ts @@ -20,16 +20,25 @@ function findSystemTslServer(): string | null { } export function activate(context: vscode.ExtensionContext) { - const bundledPath = context.asAbsolutePath( - path.join('bin', process.platform === 'win32' ? 'tsl-server.exe' : 'tsl-server') - ) + // server配置项 + const config = vscode.workspace.getConfiguration('tsl') + const customExecutable = config.get