Allow tsc tasks to be disabled using settings. Fixes #27312

This commit is contained in:
Matt Bierner
2017-05-26 14:24:15 -07:00
parent 5a83b55b70
commit c9a2a5be88
4 changed files with 52 additions and 4 deletions

View File

@@ -21,7 +21,10 @@ const exists = (file: string): Promise<boolean> =>
});
});
export default class TypeScriptTaskProvider implements vscode.TaskProvider {
/**
* Provides tasks for building `tsconfig.json` files in a project.
*/
class TscTaskProvider implements vscode.TaskProvider {
private readonly tsconfigProvider: TsConfigProvider;
public constructor(
@@ -116,4 +119,39 @@ export default class TypeScriptTaskProvider implements vscode.TaskProvider {
}
return null;
}
}
type AutoDetect = 'on' | 'off';
/**
* Manages registrations of TypeScript task provides with VScode.
*/
export default class TypeScriptTaskProviderManager {
private taskProviderSub: vscode.Disposable | undefined = undefined;
private readonly disposables: vscode.Disposable[] = [];
constructor(
private readonly lazyClient: () => TypeScriptServiceClient
) {
vscode.workspace.onDidChangeConfiguration(this.onConfigurationChanged, this, this.disposables);
this.onConfigurationChanged();
}
dispose() {
if (this.taskProviderSub) {
this.taskProviderSub.dispose();
this.taskProviderSub = undefined;
}
this.disposables.forEach(x => x.dispose());
}
private onConfigurationChanged() {
let autoDetect = vscode.workspace.getConfiguration('typescript.tsc').get<AutoDetect>('autoDetect');
if (this.taskProviderSub && autoDetect === 'off') {
this.taskProviderSub.dispose();
this.taskProviderSub = undefined;
} else if (!this.taskProviderSub && autoDetect === 'on') {
this.taskProviderSub = vscode.workspace.registerTaskProvider(new TscTaskProvider(this.lazyClient));
}
}
}

View File

@@ -41,7 +41,7 @@ import CodeActionProvider from './features/codeActionProvider';
import ReferenceCodeLensProvider from './features/referencesCodeLensProvider';
import { JsDocCompletionProvider, TryCompleteJsDocCommand } from './features/jsDocCompletionProvider';
import { DirectiveCommentCompletionProvider } from './features/directiveCommentCompletionProvider';
import TypeScriptTaskProvider from './features/taskProvider';
import TypeScriptTaskProviderManager from './features/taskProvider';
import ImplementationCodeLensProvider from './features/implementationsCodeLensProvider';
@@ -131,7 +131,7 @@ export function activate(context: ExtensionContext): void {
lazyClientHost().serviceClient.restartTsServer();
}));
context.subscriptions.push(workspace.registerTaskProvider(new TypeScriptTaskProvider(() => lazyClientHost().serviceClient)));
context.subscriptions.push(new TypeScriptTaskProviderManager(() => lazyClientHost().serviceClient));
const goToProjectConfig = (isTypeScript: boolean) => {
const editor = window.activeTextEditor;