1010: Change enableCargoWatchOnStartup to have three states r=matklad a=vipentti

This fixes #1005.

Defaults to `ask` which prompts users each time whether to start `cargo watch`
or not. `enabled` always starts `cargo watch` and `disabled` does not.

Co-authored-by: Ville Penttinen <villem.penttinen@gmail.com>
This commit is contained in:
bors[bot] 2019-03-21 12:04:47 +00:00
commit 48472f55c3
3 changed files with 31 additions and 16 deletions

View file

@ -169,9 +169,19 @@
"description": "Path to ra_lsp_server executable"
},
"rust-analyzer.enableCargoWatchOnStartup": {
"type": "boolean",
"default": "true",
"description": "When enabled, ask the user whether to run `cargo watch` on startup"
"type": "string",
"default": "ask",
"enum": [
"ask",
"enabled",
"disabled"
],
"enumDescriptions": [
"Asks each time whether to run `cargo watch`",
"`cargo watch` is always started",
"Don't start `cargo watch`"
],
"description": "Whether to run `cargo watch` on startup"
},
"rust-analyzer.trace.server": {
"type": "string",

View file

@ -153,22 +153,25 @@ export const autoCargoWatchTask: vscode.Task = {
* that, when accepted, allow us to `cargo install cargo-watch` and then run it.
*/
export async function interactivelyStartCargoWatch() {
if (!Server.config.enableCargoWatchOnStartup) {
if (Server.config.enableCargoWatchOnStartup === 'disabled') {
return;
}
if (Server.config.enableCargoWatchOnStartup === 'ask') {
const watch = await vscode.window.showInformationMessage(
'Start watching changes with cargo? (Executes `cargo watch`, provides inline diagnostics)',
'yes',
'no'
);
if (watch === 'no') {
return;
}
}
const execPromise = util.promisify(child_process.exec);
const watch = await vscode.window.showInformationMessage(
'Start watching changes with cargo? (Executes `cargo watch`, provides inline diagnostics)',
'yes',
'no'
);
if (watch === 'no') {
return;
}
const { stderr } = await execPromise('cargo watch --version').catch(e => e);
if (stderr.includes('no such subcommand: `watch`')) {
const msg =
'The `cargo-watch` subcommand is not installed. Install? (takes ~1-2 minutes)';

View file

@ -4,12 +4,14 @@ import { Server } from './server';
const RA_LSP_DEBUG = process.env.__RA_LSP_SERVER_DEBUG;
export type CargoWatchOptions = 'ask' | 'enabled' | 'disabled';
export class Config {
public highlightingOn = true;
public enableEnhancedTyping = true;
public raLspServerPath = RA_LSP_DEBUG || 'ra_lsp_server';
public showWorkspaceLoadedNotification = true;
public enableCargoWatchOnStartup = true;
public enableCargoWatchOnStartup: CargoWatchOptions = 'ask';
private prevEnhancedTyping: null | boolean = null;
@ -71,9 +73,9 @@ export class Config {
}
if (config.has('enableCargoWatchOnStartup')) {
this.enableCargoWatchOnStartup = config.get<boolean>(
this.enableCargoWatchOnStartup = config.get<CargoWatchOptions>(
'enableCargoWatchOnStartup',
true
'ask'
);
}
}