@vue/language-server
Advanced tools
Comparing version
@@ -1,8 +0,2 @@ | ||
export type VueInitializationOptions = { | ||
typescript: { | ||
tsdk: string; | ||
tsserverRequestCommand?: string; | ||
}; | ||
}; | ||
export * from '@volar/language-server/lib/types'; | ||
export * from '@vue/language-service/lib/types'; |
41
node.js
@@ -7,2 +7,3 @@ "use strict"; | ||
const language_service_1 = require("@vue/language-service"); | ||
const ts = require("typescript"); | ||
const vscode_uri_1 = require("vscode-uri"); | ||
@@ -13,10 +14,2 @@ const connection = (0, node_1.createConnection)(); | ||
connection.onInitialize(params => { | ||
const options = params.initializationOptions; | ||
if (!options.typescript?.tsdk) { | ||
throw new Error('typescript.tsdk is required'); | ||
} | ||
if (!options.typescript?.tsserverRequestCommand) { | ||
connection.console.warn('typescript.tsserverRequestCommand is required since >= 3.0 for complete TS features'); | ||
} | ||
const { typescript: ts } = (0, node_1.loadTsdkByPath)(options.typescript.tsdk, params.locale); | ||
const tsconfigProjects = (0, language_service_1.createUriMap)(); | ||
@@ -35,6 +28,12 @@ const file2ProjectInfo = new Map(); | ||
let simpleLs; | ||
let tsserverRequestId = 0; | ||
const tsserverRequestHandlers = new Map(); | ||
connection.onNotification('tsserver/response', ([id, res]) => { | ||
tsserverRequestHandlers.get(id)?.(res); | ||
tsserverRequestHandlers.delete(id); | ||
}); | ||
return server.initialize(params, { | ||
setup() { }, | ||
async getLanguageService(uri) { | ||
if (uri.scheme === 'file' && options.typescript.tsserverRequestCommand) { | ||
if (uri.scheme === 'file') { | ||
const fileName = uri.fsPath.replace(/\\/g, '/'); | ||
@@ -69,12 +68,12 @@ let projectInfoPromise = file2ProjectInfo.get(fileName); | ||
reload() { | ||
for (const ls of [ | ||
...tsconfigProjects.values(), | ||
simpleLs, | ||
]) { | ||
ls?.dispose(); | ||
for (const ls of tsconfigProjects.values()) { | ||
ls.dispose(); | ||
} | ||
tsconfigProjects.clear(); | ||
simpleLs = undefined; | ||
if (simpleLs) { | ||
simpleLs.dispose(); | ||
simpleLs = undefined; | ||
} | ||
}, | ||
}, (0, language_service_1.getHybridModeLanguageServicePlugins)(ts, options.typescript.tsserverRequestCommand ? { | ||
}, (0, language_service_1.getHybridModeLanguageServicePlugins)(ts, { | ||
collectExtractProps(...args) { | ||
@@ -123,5 +122,9 @@ return sendTsRequest('vue:collectExtractProps', args); | ||
}, | ||
} : undefined)); | ||
function sendTsRequest(command, args) { | ||
return connection.sendRequest(options.typescript.tsserverRequestCommand, [command, args]); | ||
})); | ||
async function sendTsRequest(command, args) { | ||
return await new Promise(resolve => { | ||
const requestId = ++tsserverRequestId; | ||
tsserverRequestHandlers.set(requestId, resolve); | ||
connection.sendNotification('tsserver/request', [requestId, command, args]); | ||
}); | ||
} | ||
@@ -128,0 +131,0 @@ function createLs(server, tsconfig) { |
{ | ||
"name": "@vue/language-server", | ||
"version": "3.0.0-alpha.8", | ||
"version": "3.0.0-alpha.10", | ||
"license": "MIT", | ||
@@ -22,12 +22,15 @@ "files": [ | ||
"@volar/test-utils": "~2.4.13", | ||
"@vue/language-core": "3.0.0-alpha.8", | ||
"@vue/language-service": "3.0.0-alpha.8", | ||
"@vue/typescript-plugin": "3.0.0-alpha.8", | ||
"@vue/language-core": "3.0.0-alpha.10", | ||
"@vue/language-service": "3.0.0-alpha.10", | ||
"@vue/typescript-plugin": "3.0.0-alpha.10", | ||
"vscode-languageserver-protocol": "^3.17.5", | ||
"vscode-uri": "^3.0.8" | ||
}, | ||
"peerDependencies": { | ||
"typescript": "*" | ||
}, | ||
"devDependencies": { | ||
"@typescript/server-harness": "latest" | ||
}, | ||
"gitHead": "d38cb93558fe8015c7ffe9ceacfdd3296e3692f6" | ||
"gitHead": "28308b4f76cc80c7632f39ae7e0944f1889661a2" | ||
} |
21631
82.4%15
36.36%423
88%3
50%9
12.5%+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed