Files
website/node_modules/@volar/language-server/lib/project/simpleProjectProvider.js
2024-05-06 17:15:30 -04:00

70 lines
2.9 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.getWorkspaceFolder = exports.createServiceEnvironment = exports.createSimpleProjectProviderFactory = void 0;
const vscode_uri_1 = require("vscode-uri");
const simpleProject_1 = require("./simpleProject");
const uri_1 = require("../uri");
function createSimpleProjectProviderFactory() {
return (context, servicePlugins, getLanguagePlugins) => {
const projects = new Map();
return {
getProject(uri) {
const workspaceFolder = getWorkspaceFolder(uri, context.workspaceFolders);
let projectPromise = projects.get(workspaceFolder);
if (!projectPromise) {
const serviceEnv = createServiceEnvironment(context, workspaceFolder);
projectPromise = (0, simpleProject_1.createSimpleServerProject)(context, serviceEnv, servicePlugins, getLanguagePlugins);
projects.set(workspaceFolder, projectPromise);
}
return projectPromise;
},
async getProjects() {
return await Promise.all([...projects.values()]);
},
reloadProjects() {
for (const project of projects.values()) {
project.then(project => project.dispose());
}
projects.clear();
context.reloadDiagnostics();
},
};
};
}
exports.createSimpleProjectProviderFactory = createSimpleProjectProviderFactory;
function createServiceEnvironment(context, workspaceFolder) {
const env = {
workspaceFolder,
fs: context.runtimeEnv.fs,
locale: context.initializeParams.locale,
clientCapabilities: context.initializeParams.capabilities,
getConfiguration: context.configurationHost?.getConfiguration,
onDidChangeConfiguration: context.configurationHost?.onDidChangeConfiguration,
onDidChangeWatchedFiles: context.onDidChangeWatchedFiles,
typescript: {
fileNameToUri: uri_1.fileNameToUri,
uriToFileName: uri_1.uriToFileName,
},
};
return env;
}
exports.createServiceEnvironment = createServiceEnvironment;
function getWorkspaceFolder(uri, workspaceFolders) {
let parsed = vscode_uri_1.URI.parse(uri);
while (true) {
if (workspaceFolders.uriHas(parsed.toString())) {
return parsed.toString();
}
const next = vscode_uri_1.URI.parse(uri).with({ path: parsed.path.substring(0, parsed.path.lastIndexOf('/')) });
if (next.path === parsed.path) {
break;
}
parsed = next;
}
for (const folder of workspaceFolders.uriKeys()) {
return folder;
}
return vscode_uri_1.URI.parse(uri).with({ path: '/' }).toString();
}
exports.getWorkspaceFolder = getWorkspaceFolder;
//# sourceMappingURL=simpleProjectProvider.js.map