diff --git a/editors/code/package.json b/editors/code/package.json index 1ed834d6267..20b04c66fd4 100644 --- a/editors/code/package.json +++ b/editors/code/package.json @@ -150,6 +150,11 @@ "default": true, "description": "Highlight Rust code (overrides built-in syntax highlighting)" }, + "rust-analyzer.enableEnhancedTyping": { + "type": "boolean", + "default": true, + "description": "Enables enhanced typing. NOTE: If using a VIM extension, you should set this to false" + }, "rust-analyzer.raLspServerPath": { "type": [ "string" diff --git a/editors/code/src/config.ts b/editors/code/src/config.ts index d26f5df0ab1..4e353798cf9 100644 --- a/editors/code/src/config.ts +++ b/editors/code/src/config.ts @@ -6,8 +6,11 @@ const RA_LSP_DEBUG = process.env.__RA_LSP_SERVER_DEBUG; export class Config { public highlightingOn = true; + public enableEnhancedTyping = true; public raLspServerPath = RA_LSP_DEBUG || 'ra_lsp_server'; + private prevEnhancedTyping: null | boolean = null; + constructor() { vscode.workspace.onDidChangeConfiguration(_ => this.userConfigChanged() @@ -25,6 +28,35 @@ export class Config { Server.highlighter.removeHighlights(); } + if (config.has('enableEnhancedTyping')) { + this.enableEnhancedTyping = config.get( + 'enableEnhancedTyping' + ) as boolean; + + if (this.prevEnhancedTyping === null) { + this.prevEnhancedTyping = this.enableEnhancedTyping; + } + } else if (this.prevEnhancedTyping === null) { + this.prevEnhancedTyping = this.enableEnhancedTyping; + } + + if (this.prevEnhancedTyping !== this.enableEnhancedTyping) { + const reloadAction = 'Reload now'; + vscode.window + .showInformationMessage( + 'Changing enhanced typing setting requires a reload', + reloadAction + ) + .then(selectedAction => { + if (selectedAction === reloadAction) { + vscode.commands.executeCommand( + 'workbench.action.reloadWindow' + ); + } + }); + this.prevEnhancedTyping = this.enableEnhancedTyping; + } + if (config.has('raLspServerPath')) { this.raLspServerPath = RA_LSP_DEBUG || (config.get('raLspServerPath') as string); diff --git a/editors/code/src/extension.ts b/editors/code/src/extension.ts index a0be70202b2..8b332eeb244 100644 --- a/editors/code/src/extension.ts +++ b/editors/code/src/extension.ts @@ -82,7 +82,9 @@ export function activate(context: vscode.ExtensionContext) { } ); - overrideCommand('type', commands.onEnter.handle); + if (Server.config.enableEnhancedTyping) { + overrideCommand('type', commands.onEnter.handle); + } // Notifications are events triggered by the language server const allNotifications: Iterable<