lsp-server first commit

This commit is contained in:
csh
2025-06-23 20:29:48 +08:00
parent cbcff7d1b4
commit 4f5bf9d781
43 changed files with 1851 additions and 11 deletions
+11
View File
@@ -0,0 +1,11 @@
{
"$schema": "https://json.schemastore.org/prettierrc",
"bracketSpacing": false,
"arrowParens": "avoid",
"printWidth": 120,
"singleQuote": true,
"trailingComma": "none",
"tabWidth": 2,
"proseWrap": "never",
"semi": false
}
+3
View File
@@ -1 +1,4 @@
src/
*.ts
tsconfig*.json
.gitignore
+5 -1
View File
@@ -2,7 +2,11 @@
Notable changes to the `TSL` extension will be documented in this file.
## [1.4.0]: 2025-6-17
## [2.0.0]: 2025-06-22
- 初步支持`LSP`--关键字补全
## [1.4.0]: 2025-06-17
- 修复:`[weakref]typename: type;`时,变量和类型高亮失效
- 调整关键字分类
+5 -2
View File
@@ -1,3 +1,6 @@
# TSL
# TSL-Devkit
`VSCode``ts[lf]`语法插件
`tsl``vscode`插件工具集
- 支持`textMate`语法高亮
- 支持`LSP`补全
Binary file not shown.
Binary file not shown.
+3
View File
@@ -0,0 +1,3 @@
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
+117 -5
View File
@@ -1,15 +1,22 @@
{
"name": "tsl-devkit",
"version": "1.2.0",
"version": "1.4.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "tsl-devkit",
"version": "1.2.0",
"license": "Please see LICENSE.txt",
"version": "1.4.0",
"license": "AGPL-3.0-or-later",
"dependencies": {
"vscode-languageclient": "^9.0.1"
},
"devDependencies": {
"@types/node": "^24.0.3",
"@types/vscode": "^1.101.0",
"@vscode/vsce": "^3.5.0",
"cp": "^0.2.0",
"prettier": "^3.5.3",
"typescript": "^5.8.3"
},
"engines": {
@@ -595,6 +602,16 @@
"@textlint/ast-node-types": "^14.8.1"
}
},
"node_modules/@types/node": {
"version": "24.0.3",
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.3.tgz",
"integrity": "sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==",
"dev": true,
"license": "MIT",
"dependencies": {
"undici-types": "~7.8.0"
}
},
"node_modules/@types/normalize-package-data": {
"version": "2.4.4",
"resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
@@ -609,6 +626,13 @@
"dev": true,
"license": "MIT"
},
"node_modules/@types/vscode": {
"version": "1.101.0",
"resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.101.0.tgz",
"integrity": "sha512-ZWf0IWa+NGegdW3iU42AcDTFHWW7fApLdkdnBqwYEtHVIBGbTu0ZNQKP/kX3Ds/uMJXIMQNAojHR4vexCEEz5Q==",
"dev": true,
"license": "MIT"
},
"node_modules/@typespec/ts-http-runtime": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.2.3.tgz",
@@ -954,7 +978,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true,
"license": "MIT"
},
"node_modules/base64-js": {
@@ -1275,6 +1298,13 @@
"dev": true,
"license": "MIT"
},
"node_modules/cp": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/cp/-/cp-0.2.0.tgz",
"integrity": "sha512-4ftCvShHjIZG/zzomHyunNpBof3sOFTTmU6s6q9DdqAL/ANqrKV3pr6Z6kVfBI4hjn59DFLImrBqn7GuuMqSZA==",
"dev": true,
"license": "MIT"
},
"node_modules/cross-spawn": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
@@ -3074,6 +3104,22 @@
"node": ">=10"
}
},
"node_modules/prettier": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
"integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
"dev": true,
"license": "MIT",
"bin": {
"prettier": "bin/prettier.cjs"
},
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/prettier/prettier?sponsor=1"
}
},
"node_modules/pump": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz",
@@ -3350,7 +3396,6 @@
"version": "7.7.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -3917,6 +3962,13 @@
"node": ">=20.18.1"
}
},
"node_modules/undici-types": {
"version": "7.8.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz",
"integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==",
"dev": true,
"license": "MIT"
},
"node_modules/unicorn-magic": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
@@ -3989,6 +4041,66 @@
"url": "https://bevry.me/fund"
}
},
"node_modules/vscode-jsonrpc": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz",
"integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==",
"license": "MIT",
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/vscode-languageclient": {
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-9.0.1.tgz",
"integrity": "sha512-JZiimVdvimEuHh5olxhxkht09m3JzUGwggb5eRUkzzJhZ2KjCN0nh55VfiED9oez9DyF8/fz1g1iBV3h+0Z2EA==",
"license": "MIT",
"dependencies": {
"minimatch": "^5.1.0",
"semver": "^7.3.7",
"vscode-languageserver-protocol": "3.17.5"
},
"engines": {
"vscode": "^1.82.0"
}
},
"node_modules/vscode-languageclient/node_modules/brace-expansion": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/vscode-languageclient/node_modules/minimatch": {
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
"integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
"license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=10"
}
},
"node_modules/vscode-languageserver-protocol": {
"version": "3.17.5",
"resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz",
"integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==",
"license": "MIT",
"dependencies": {
"vscode-jsonrpc": "8.2.0",
"vscode-languageserver-types": "3.17.5"
}
},
"node_modules/vscode-languageserver-types": {
"version": "3.17.5",
"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz",
"integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==",
"license": "MIT"
},
"node_modules/whatwg-encoding": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
+23 -3
View File
@@ -1,14 +1,13 @@
{
"name": "tsl-devkit",
"displayName": "TSL",
"version": "1.4.0",
"version": "2.0.0",
"description": "TSL syntax highlighter support for VSCode.",
"publisher": "csh",
"homepage": "https://git.mytsl.cn/csh/tsl-devkit",
"author": {
"name": "csh"
},
"scripts": {},
"repository": {
"type": "git",
"url": "https://git.mytsl.cn/csh/tsl-devkit"
@@ -21,6 +20,10 @@
"categories": [
"Programming Languages"
],
"activationEvents": [
"onLanguage:tsl"
],
"main": "./out/extension.js",
"contributes": {
"languages": [
{
@@ -42,13 +45,30 @@
"scopeName": "source.tsl",
"path": "./syntaxes/tsl.tmLanguage.json"
}
],
"commands": [
{
"command": "extension.start",
"title": "Start TSL Language Server"
}
]
},
"scripts": {
"vscode:prepublish": "npm run compile",
"compile": "tsc -p ./",
"watch": "tsc -watch -p ."
},
"devDependencies": {
"@vscode/vsce": "^3.5.0",
"typescript": "^5.8.3"
"typescript": "^5.8.3",
"@types/node": "^24.0.3",
"@types/vscode": "^1.101.0",
"prettier": "^3.5.3"
},
"engines": {
"vscode": "^1.101.0"
},
"dependencies": {
"vscode-languageclient": "^9.0.1"
}
}
+66
View File
@@ -0,0 +1,66 @@
import * as path from 'path'
import * as vscode from 'vscode'
import * as fs from 'fs'
import {LanguageClient, LanguageClientOptions, ServerOptions, TransportKind} from 'vscode-languageclient/node'
let client: LanguageClient
function findSystemTslServer(): string | null {
const binary = process.platform === 'win32' ? 'tsl-server.exe' : 'tsl-server'
const pathDirs = process.env.PATH?.split(path.delimiter) || []
for (const dir of pathDirs) {
const fullPath = path.join(dir, binary)
if (fs.existsSync(fullPath)) {
return fullPath
}
}
return null
}
export function activate(context: vscode.ExtensionContext) {
const bundledPath = context.asAbsolutePath(
path.join('bin', process.platform === 'win32' ? 'tsl-server.exe' : 'tsl-server')
)
// 查找路径优先级:插件目录 -> 系统 PATH
let serverExe: string | null = null
if (fs.existsSync(bundledPath)) {
serverExe = bundledPath
} else {
serverExe = findSystemTslServer()
}
if (!serverExe) {
vscode.window.showErrorMessage(
"Cannot find tsl-server. Please install it globally or include it in your extension's server directory."
)
return
}
const serverOptions: ServerOptions = {
run: {command: serverExe, transport: TransportKind.stdio, args: ['--log=verbose', '--log-stderr']},
debug: {command: serverExe, transport: TransportKind.stdio}
}
const clientOptions: LanguageClientOptions = {
documentSelector: [{scheme: 'file', language: 'tsl'}],
synchronize: {
fileEvents: vscode.workspace.createFileSystemWatcher('**/*.tsl')
}
}
client = new LanguageClient(
'tslLanguageServer', // 客户端唯一ID
'TSL Language Server', // 用户可见名称
serverOptions,
clientOptions
)
client.start()
}
export function deactivate(): Thenable<void> | undefined {
return client ? client.stop() : undefined
}
+12
View File
@@ -0,0 +1,12 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "ES6",
"outDir": "out",
"rootDir": "src",
"sourceMap": true,
"strict": true,
"skipLibCheck": true
},
"include": ["src"]
}
Binary file not shown.
Binary file not shown.