add 'ignore' option to project creation hint, fixes #3997

This commit is contained in:
Johannes Rieken
2016-03-15 11:44:29 +01:00
parent 4136ce9f7f
commit 4da8ef4e95
2 changed files with 28 additions and 11 deletions

View File

@@ -71,7 +71,7 @@ export function activate(context: ExtensionContext): void {
window.onDidChangeActiveTextEditor(VersionStatus.showHideStatus, null, context.subscriptions); window.onDidChangeActiveTextEditor(VersionStatus.showHideStatus, null, context.subscriptions);
client.onReady().then(() => { client.onReady().then(() => {
context.subscriptions.push(ProjectStatus.create(client)); context.subscriptions.push(ProjectStatus.create(client, context.workspaceState));
}, () => { }, () => {
// Nothing to do here. The client did show a message; // Nothing to do here. The client did show a message;
}); });

View File

@@ -19,23 +19,31 @@ interface Option extends vscode.MessageItem {
interface Hint { interface Hint {
message: string; message: string;
option: Option; options: Option[];
} }
const fileLimit = 500; const fileLimit = 500;
export function create(client: ITypescriptServiceClient) { export function create(client: ITypescriptServiceClient, memento: vscode.Memento) {
const toDispose: vscode.Disposable[] = []; const toDispose: vscode.Disposable[] = [];
const projectHinted: { [k: string]:any} = Object.create(null); const projectHinted: { [k: string]: boolean } = Object.create(null);
const projectHintIgnoreList = memento.get<string[]>('projectHintIgnoreList', []);
for (let path of projectHintIgnoreList) {
if (path === null) {
path = undefined;
}
projectHinted[path] = true;
}
let currentHint: Hint; let currentHint: Hint;
let item = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, Number.MIN_VALUE); let item = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, Number.MIN_VALUE);
item.command = 'js.projectStatus.command'; item.command = 'js.projectStatus.command';
toDispose.push(vscode.commands.registerCommand('js.projectStatus.command', () => { toDispose.push(vscode.commands.registerCommand('js.projectStatus.command', () => {
let {message, option} = currentHint; let {message, options} = currentHint;
return vscode.window.showInformationMessage(message, option).then(selection => { return vscode.window.showInformationMessage(message, ...options).then(selection => {
if (selection === option) { if (selection) {
return selection.execute(); return selection.execute();
} }
}); });
@@ -64,7 +72,16 @@ export function create(client: ITypescriptServiceClient) {
if (!configFileName) { if (!configFileName) {
currentHint = { currentHint = {
message: localize('hintCreate', "Have a project and experience better IntelliSense and code navigation."), message: localize('hintCreate', "Have a project and experience better IntelliSense and code navigation."),
option: { options: [{
title: localize('ignore.cmdCreate', 'Ignore'),
execute: () => {
client.logTelemetry('js.hintProjectCreation.ignored');
projectHinted[configFileName] = true;
projectHintIgnoreList.push(configFileName);
memento.update('projectHintIgnoreList', projectHintIgnoreList);
item.hide();
}
},{
title: localize('cmdCreate', "Create jsconfig.json..."), title: localize('cmdCreate', "Create jsconfig.json..."),
execute: () => { execute: () => {
client.logTelemetry('js.hintProjectCreation.accepted'); client.logTelemetry('js.hintProjectCreation.accepted');
@@ -75,7 +92,7 @@ export function create(client: ITypescriptServiceClient) {
.then(vscode.window.showTextDocument) .then(vscode.window.showTextDocument)
.then(editor => editor.edit(builder => builder.insert(new vscode.Position(0, 0), defaultConfig))); .then(editor => editor.edit(builder => builder.insert(new vscode.Position(0, 0), defaultConfig)));
} }
} }]
}; };
item.text = '$(light-bulb)'; item.text = '$(light-bulb)';
item.tooltip = localize('hint.tooltip', "Have a project and have better IntelliSense, better symbol search, and much more."); item.tooltip = localize('hint.tooltip', "Have a project and have better IntelliSense, better symbol search, and much more.");
@@ -91,7 +108,7 @@ export function create(client: ITypescriptServiceClient) {
message: localize('hintExclude', "'{0}' is a large project. For better performance exclude folders with many files, like: {1}...", message: localize('hintExclude', "'{0}' is a large project. For better performance exclude folders with many files, like: {1}...",
vscode.workspace.asRelativePath(configFileName), vscode.workspace.asRelativePath(configFileName),
largeRoots), largeRoots),
option: { options: [{
title: localize('open', "Configure excludes..."), title: localize('open', "Configure excludes..."),
execute: () => { execute: () => {
client.logTelemetry('js.hintProjectExcludes.accepted'); client.logTelemetry('js.hintProjectExcludes.accepted');
@@ -101,7 +118,7 @@ export function create(client: ITypescriptServiceClient) {
return vscode.workspace.openTextDocument(configFileName) return vscode.workspace.openTextDocument(configFileName)
.then(vscode.window.showTextDocument); .then(vscode.window.showTextDocument);
} }
} }]
}; };
item.tooltip = currentHint.message; item.tooltip = currentHint.message;
item.text = localize('large.label', "Configure Excludes"); item.text = localize('large.label', "Configure Excludes");