Skip to content

Commit

Permalink
feat: handle workspace.onDidChangeWorkspaceForders
Browse files Browse the repository at this point in the history
close #1574
  • Loading branch information
johnsoncodehk committed Aug 30, 2022
1 parent e2090ee commit 94f6d5b
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 19 deletions.
22 changes: 20 additions & 2 deletions packages/vue-language-server/src/common.ts
Expand Up @@ -35,6 +35,7 @@ export function createLanguageServer(
) {

let clientCapabilities: vscode.ClientCapabilities;
let projects: ReturnType<typeof createProjects>;

connection.onInitialize(async params => {

Expand Down Expand Up @@ -81,10 +82,9 @@ export function createLanguageServer(
if (options.languageFeatures) {

const tsLocalized = runtimeEnv.loadTypescriptLocalized(options);
const projects = createProjects(
projects = createProjects(
runtimeEnv,
languageConfigs,
folders,
ts,
tsLocalized,
options,
Expand All @@ -95,6 +95,10 @@ export function createLanguageServer(
params.capabilities,
);

for (const root of folders) {
projects.addRoot(root);
}

(await import('./features/customFeatures')).register(connection, projects);
(await import('./features/languageFeatures')).register(connection, projects, options.languageFeatures, params);
(await import('./registers/registerlanguageFeatures')).register(options.languageFeatures!, vue.getSemanticTokenLegend(), result.capabilities, languageConfigs);
Expand All @@ -103,9 +107,23 @@ export function createLanguageServer(
return result;
});
connection.onInitialized(() => {

if (clientCapabilities.workspace?.didChangeConfiguration?.dynamicRegistration) { // TODO
connection.client.register(vscode.DidChangeConfigurationNotification.type);
}

connection.workspace.onDidChangeWorkspaceFolders(e => {

const added = e.added.map(folder => URI.parse(folder.uri)).filter(uri => uri.scheme === 'file').map(uri => uri.fsPath);
const removed = e.removed.map(folder => URI.parse(folder.uri)).filter(uri => uri.scheme === 'file').map(uri => uri.fsPath);

for (const folder of added) {
projects.addRoot(folder);
}
for (const folder of removed) {
projects.removeRoot(folder);
}
});
});
connection.listen();

Expand Down
35 changes: 18 additions & 17 deletions packages/vue-language-server/src/projects.ts
Expand Up @@ -14,7 +14,6 @@ const rootTsConfigNames = ['tsconfig.json', 'jsconfig.json'];
export function createProjects(
runtimeEnv: RuntimeEnvironment,
languageConfigs: LanguageConfigs,
rootPaths: string[],
ts: typeof import('typescript/lib/tsserverlibrary'),
tsLocalized: ts.MapLike<string> | undefined,
options: shared.ServerInitializationOptions,
Expand All @@ -34,22 +33,6 @@ export function createProjects(

const workspaces = new Map<string, ReturnType<typeof createWorkspace>>();

for (const rootPath of rootPaths) {
workspaces.set(rootPath, createWorkspace(
runtimeEnv,
languageConfigs,
rootPath,
ts,
tsLocalized,
options,
documents,
connection,
lsConfigs,
getInferredCompilerOptions,
capabilities,
));
}

documents.onDidOpen(params => {
lastOpenDoc = {
uri: params.textDocument.uri,
Expand All @@ -69,6 +52,24 @@ export function createProjects(
workspaces,
getProject,
reloadProject,
addRoot: (rootPath: string) => {
workspaces.set(rootPath, createWorkspace(
runtimeEnv,
languageConfigs,
rootPath,
ts,
tsLocalized,
options,
documents,
connection,
lsConfigs,
getInferredCompilerOptions,
capabilities,
));
},
removeRoot: (rootPath: string) => {
workspaces.delete(rootPath);
},
};

async function onDidChangeContent(uri: string) {
Expand Down

0 comments on commit 94f6d5b

Please sign in to comment.