提交 80515175 编写于 作者: M Matt Bierner

Always use fileSearch to pick up tsconfig.jsons

Fixes #31822
上级 e73bb91d
......@@ -42,10 +42,6 @@ class TscTaskProvider implements vscode.TaskProvider {
this.tsconfigProvider = new TsConfigProvider();
}
dispose() {
this.tsconfigProvider.dispose();
}
public async provideTasks(token: vscode.CancellationToken): Promise<vscode.Task[]> {
const folders = vscode.workspace.workspaceFolders;
if (!folders || !folders.length) {
......
......@@ -9,70 +9,21 @@ export interface TSConfig {
workspaceFolder?: vscode.WorkspaceFolder;
}
const tsconfigGlob = '**/tsconfig*.json';
export default class TsConfigProvider extends vscode.Disposable {
private readonly tsconfigs = new Map<string, TSConfig>();
private activated: boolean = false;
private disposables: vscode.Disposable[] = [];
constructor() {
super(() => this.dispose());
}
dispose(): void {
this.disposables.forEach(d => d.dispose());
}
export default class TsConfigProvider {
public async getConfigsForWorkspace(): Promise<Iterable<TSConfig>> {
if (!vscode.workspace.workspaceFolders) {
return [];
}
await this.ensureActivated();
return this.tsconfigs.values();
}
private async ensureActivated(): Promise<this> {
if (this.activated) {
return this;
const configs = new Map<string, TSConfig>();
for (const config of await vscode.workspace.findFiles('**/tsconfig*.json', '**/node_modules/**')) {
const root = vscode.workspace.getWorkspaceFolder(config);
if (root) {
configs.set(config.fsPath, {
path: config.fsPath,
workspaceFolder: root
});
}
}
this.activated = true;
await this.reloadWorkspaceConfigs();
const configFileWatcher = vscode.workspace.createFileSystemWatcher(tsconfigGlob);
this.disposables.push(configFileWatcher);
configFileWatcher.onDidCreate(this.handleProjectUpdate, this, this.disposables);
configFileWatcher.onDidChange(this.handleProjectUpdate, this, this.disposables);
configFileWatcher.onDidDelete(this.handleProjectDelete, this, this.disposables);
vscode.workspace.onDidChangeWorkspaceFolders(() => {
this.reloadWorkspaceConfigs();
}, this, this.disposables);
return this;
}
private async reloadWorkspaceConfigs(): Promise<this> {
this.tsconfigs.clear();
for (const config of await vscode.workspace.findFiles(tsconfigGlob, '**/node_modules/**')) {
this.handleProjectUpdate(config);
}
return this;
}
private handleProjectUpdate(config: vscode.Uri) {
const root = vscode.workspace.getWorkspaceFolder(config);
if (root) {
this.tsconfigs.set(config.fsPath, {
path: config.fsPath,
workspaceFolder: root
});
}
}
private handleProjectDelete(e: vscode.Uri) {
this.tsconfigs.delete(e.fsPath);
return configs.values();
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册