diff options
author | Ville Penttinen <[email protected]> | 2019-02-07 10:37:36 +0000 |
---|---|---|
committer | Ville Penttinen <[email protected]> | 2019-02-07 10:37:36 +0000 |
commit | 77a4a311fe22ac3b786378c452ab0f60e289cf87 (patch) | |
tree | 3deca42c8e3a5799d9ce83ce798c746164d2ed93 /editors/code | |
parent | 736a55c97e69f95e6ff4a0c3dafb2018e8ea05f9 (diff) |
Add new configuration "enableEnhancedTyping" to control registering of "type" command
This further fixes problems when having a VIM extension (at least vscodevim)
enabled, by not calling `overrideCommand('type', commands.onEnter.handle)` when
enableEnhancedTyping is set to `false`.
The problem is dependent on the order in which extensions are activated, if
rust-analyzer is activated before `vscodevim`, rust-analyzer will register the
`type` command, and when `vscodevim` finally attempts to activate, it will fail
to register the command. This causes `vscodevim` to stop working properly.
This setting allows users to disable the registerCommand `type` in
rust-analyzer, allowing `vscodevim` to work. The setting defaults to `true`.
Currently changing the setting requires reloading of the window.
Diffstat (limited to 'editors/code')
-rw-r--r-- | editors/code/package.json | 5 | ||||
-rw-r--r-- | editors/code/src/config.ts | 25 | ||||
-rw-r--r-- | editors/code/src/extension.ts | 4 |
3 files changed, 33 insertions, 1 deletions
diff --git a/editors/code/package.json b/editors/code/package.json index 1ed834d62..20b04c66f 100644 --- a/editors/code/package.json +++ b/editors/code/package.json | |||
@@ -150,6 +150,11 @@ | |||
150 | "default": true, | 150 | "default": true, |
151 | "description": "Highlight Rust code (overrides built-in syntax highlighting)" | 151 | "description": "Highlight Rust code (overrides built-in syntax highlighting)" |
152 | }, | 152 | }, |
153 | "rust-analyzer.enableEnhancedTyping": { | ||
154 | "type": "boolean", | ||
155 | "default": true, | ||
156 | "description": "Enables enhanced typing. NOTE: If using a VIM extension, you should set this to false" | ||
157 | }, | ||
153 | "rust-analyzer.raLspServerPath": { | 158 | "rust-analyzer.raLspServerPath": { |
154 | "type": [ | 159 | "type": [ |
155 | "string" | 160 | "string" |
diff --git a/editors/code/src/config.ts b/editors/code/src/config.ts index d26f5df0a..d49917c78 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; | |||
6 | 6 | ||
7 | export class Config { | 7 | export class Config { |
8 | public highlightingOn = true; | 8 | public highlightingOn = true; |
9 | public enableEnhancedTyping = true; | ||
9 | public raLspServerPath = RA_LSP_DEBUG || 'ra_lsp_server'; | 10 | public raLspServerPath = RA_LSP_DEBUG || 'ra_lsp_server'; |
10 | 11 | ||
12 | private prevEnhancedTyping: null | boolean = null; | ||
13 | |||
11 | constructor() { | 14 | constructor() { |
12 | vscode.workspace.onDidChangeConfiguration(_ => | 15 | vscode.workspace.onDidChangeConfiguration(_ => |
13 | this.userConfigChanged() | 16 | this.userConfigChanged() |
@@ -25,6 +28,28 @@ export class Config { | |||
25 | Server.highlighter.removeHighlights(); | 28 | Server.highlighter.removeHighlights(); |
26 | } | 29 | } |
27 | 30 | ||
31 | if (config.has('enableEnhancedTyping')) { | ||
32 | this.enableEnhancedTyping = config.get('enableEnhancedTyping') as boolean; | ||
33 | |||
34 | if (this.prevEnhancedTyping === null) { | ||
35 | this.prevEnhancedTyping = this.enableEnhancedTyping; | ||
36 | } | ||
37 | } else if (this.prevEnhancedTyping === null) { | ||
38 | this.prevEnhancedTyping = this.enableEnhancedTyping; | ||
39 | } | ||
40 | |||
41 | if (this.prevEnhancedTyping !== this.enableEnhancedTyping) { | ||
42 | const reloadAction = 'Reload now'; | ||
43 | vscode.window.showInformationMessage('Changing enhanced typing setting requires a reload', reloadAction) | ||
44 | .then(selectedAction => { | ||
45 | if (selectedAction === reloadAction) { | ||
46 | vscode.commands.executeCommand('workbench.action.reloadWindow'); | ||
47 | } | ||
48 | }); | ||
49 | this.prevEnhancedTyping = this.enableEnhancedTyping; | ||
50 | } | ||
51 | |||
52 | |||
28 | if (config.has('raLspServerPath')) { | 53 | if (config.has('raLspServerPath')) { |
29 | this.raLspServerPath = | 54 | this.raLspServerPath = |
30 | RA_LSP_DEBUG || (config.get('raLspServerPath') as string); | 55 | RA_LSP_DEBUG || (config.get('raLspServerPath') as string); |
diff --git a/editors/code/src/extension.ts b/editors/code/src/extension.ts index a0be70202..8b332eeb2 100644 --- a/editors/code/src/extension.ts +++ b/editors/code/src/extension.ts | |||
@@ -82,7 +82,9 @@ export function activate(context: vscode.ExtensionContext) { | |||
82 | } | 82 | } |
83 | ); | 83 | ); |
84 | 84 | ||
85 | overrideCommand('type', commands.onEnter.handle); | 85 | if (Server.config.enableEnhancedTyping) { |
86 | overrideCommand('type', commands.onEnter.handle); | ||
87 | } | ||
86 | 88 | ||
87 | // Notifications are events triggered by the language server | 89 | // Notifications are events triggered by the language server |
88 | const allNotifications: Iterable< | 90 | const allNotifications: Iterable< |