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" "description": "Path to ra_lsp_server executable"
}, },
"rust-analyzer.enableCargoWatchOnStartup": { "rust-analyzer.enableCargoWatchOnStartup": {
"type": "boolean", "type": "string",
"default": "true", "default": "ask",
"description": "When enabled, ask the user whether to run `cargo watch` on startup" "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": { "rust-analyzer.trace.server": {
"type": "string", "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. * that, when accepted, allow us to `cargo install cargo-watch` and then run it.
*/ */
export async function interactivelyStartCargoWatch() { export async function interactivelyStartCargoWatch() {
if (!Server.config.enableCargoWatchOnStartup) { if (Server.config.enableCargoWatchOnStartup === 'disabled') {
return; 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 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); const { stderr } = await execPromise('cargo watch --version').catch(e => e);
if (stderr.includes('no such subcommand: `watch`')) { if (stderr.includes('no such subcommand: `watch`')) {
const msg = const msg =
'The `cargo-watch` subcommand is not installed. Install? (takes ~1-2 minutes)'; '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; const RA_LSP_DEBUG = process.env.__RA_LSP_SERVER_DEBUG;
export type CargoWatchOptions = 'ask' | 'enabled' | 'disabled';
export class Config { export class Config {
public highlightingOn = true; public highlightingOn = true;
public enableEnhancedTyping = true; public enableEnhancedTyping = true;
public raLspServerPath = RA_LSP_DEBUG || 'ra_lsp_server'; public raLspServerPath = RA_LSP_DEBUG || 'ra_lsp_server';
public showWorkspaceLoadedNotification = true; public showWorkspaceLoadedNotification = true;
public enableCargoWatchOnStartup = true; public enableCargoWatchOnStartup: CargoWatchOptions = 'ask';
private prevEnhancedTyping: null | boolean = null; private prevEnhancedTyping: null | boolean = null;
@ -71,9 +73,9 @@ export class Config {
} }
if (config.has('enableCargoWatchOnStartup')) { if (config.has('enableCargoWatchOnStartup')) {
this.enableCargoWatchOnStartup = config.get<boolean>( this.enableCargoWatchOnStartup = config.get<CargoWatchOptions>(
'enableCargoWatchOnStartup', 'enableCargoWatchOnStartup',
true 'ask'
); );
} }
} }