diff options
author | bors[bot] <bors[bot]@users.noreply.github.com> | 2019-02-07 12:42:53 +0000 |
---|---|---|
committer | bors[bot] <bors[bot]@users.noreply.github.com> | 2019-02-07 12:42:53 +0000 |
commit | d0fd05142f45fb69a9dc64bfd55d2453b1927b9c (patch) | |
tree | c16c666f8b6176e9a055464f8b19022458853408 /editors/code | |
parent | a69ee774ca39f1300bd9dd7eb34b632db9098e26 (diff) | |
parent | a4d0aebcb89367d23600d0f14ba2c7f1cd0bbb44 (diff) |
Merge #755
755: Add new configuration "enableEnhancedTyping" to control registering of "type" command r=matklad a=vipentti
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.
Co-authored-by: Ville Penttinen <[email protected]>
Diffstat (limited to 'editors/code')
-rw-r--r-- | editors/code/package.json | 5 | ||||
-rw-r--r-- | editors/code/src/config.ts | 32 | ||||
-rw-r--r-- | editors/code/src/extension.ts | 4 |
3 files changed, 40 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..4e353798c 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,35 @@ 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( | ||
33 | 'enableEnhancedTyping' | ||
34 | ) as boolean; | ||
35 | |||
36 | if (this.prevEnhancedTyping === null) { | ||
37 | this.prevEnhancedTyping = this.enableEnhancedTyping; | ||
38 | } | ||
39 | } else if (this.prevEnhancedTyping === null) { | ||
40 | this.prevEnhancedTyping = this.enableEnhancedTyping; | ||
41 | } | ||
42 | |||
43 | if (this.prevEnhancedTyping !== this.enableEnhancedTyping) { | ||
44 | const reloadAction = 'Reload now'; | ||
45 | vscode.window | ||
46 | .showInformationMessage( | ||
47 | 'Changing enhanced typing setting requires a reload', | ||
48 | reloadAction | ||
49 | ) | ||
50 | .then(selectedAction => { | ||
51 | if (selectedAction === reloadAction) { | ||
52 | vscode.commands.executeCommand( | ||
53 | 'workbench.action.reloadWindow' | ||
54 | ); | ||
55 | } | ||
56 | }); | ||
57 | this.prevEnhancedTyping = this.enableEnhancedTyping; | ||
58 | } | ||
59 | |||
28 | if (config.has('raLspServerPath')) { | 60 | if (config.has('raLspServerPath')) { |
29 | this.raLspServerPath = | 61 | this.raLspServerPath = |
30 | RA_LSP_DEBUG || (config.get('raLspServerPath') as string); | 62 | 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< |