diff options
| author | Adolfo OchagavĂa <aochagavia92@gmail.com> | 2018-10-06 22:53:12 +0200 |
|---|---|---|
| committer | Adolfo OchagavĂa <aochagavia92@gmail.com> | 2018-10-06 22:53:12 +0200 |
| commit | 9ccc56860107ed46f3abdc0f7c0d53766a3eded2 (patch) | |
| tree | 2c3b2df2c21395b9c8afba134f9917a885c57fd2 /editors/code/src | |
| parent | 81bf190f7aca4cadec5394c397bd7c084b53b9f5 (diff) | |
| download | rust-9ccc56860107ed46f3abdc0f7c0d53766a3eded2.tar.gz rust-9ccc56860107ed46f3abdc0f7c0d53766a3eded2.zip | |
Dynamically apply highlightingOn config
Fixes #84
Diffstat (limited to 'editors/code/src')
| -rw-r--r-- | editors/code/src/extension.ts | 47 |
1 files changed, 36 insertions, 11 deletions
diff --git a/editors/code/src/extension.ts b/editors/code/src/extension.ts index dc1792e9478..fde6a480d85 100644 --- a/editors/code/src/extension.ts +++ b/editors/code/src/extension.ts @@ -11,10 +11,22 @@ let uris = { let highlightingOn = true; export function activate(context: vscode.ExtensionContext) { - let config = vscode.workspace.getConfiguration('ra-lsp'); - if (config.has('highlightingOn')) { - highlightingOn = config.get('highlightingOn') as boolean; - } + let applyHighlightingOn = () => { + let config = vscode.workspace.getConfiguration('ra-lsp'); + if (config.has('highlightingOn')) { + highlightingOn = config.get('highlightingOn') as boolean; + }; + + if (!highlightingOn) { + removeHighlights(); + } + }; + + // Apply the highlightingOn config now and whenever the config changes + applyHighlightingOn(); + vscode.workspace.onDidChangeConfiguration(_ => { + applyHighlightingOn(); + }); let textDocumentContentProvider = new TextDocumentContentProvider() let dispose = (disposable: vscode.Disposable) => { @@ -130,7 +142,7 @@ export function activate(context: vscode.ExtensionContext) { }) }, null, context.subscriptions) vscode.window.onDidChangeActiveTextEditor(async (editor) => { - if (!editor || editor.document.languageId != 'rust') return + if (!highlightingOn || !editor || editor.document.languageId != 'rust') return let params: lc.TextDocumentIdentifier = { uri: editor.document.uri.toString() } @@ -179,7 +191,7 @@ function startServer() { let editor = vscode.window.visibleTextEditors.find( (editor) => editor.document.uri.toString() == params.uri ) - if (editor == null) return; + if (!highlightingOn || !editor) return; setHighlights( editor, params.decorations, @@ -213,10 +225,11 @@ class TextDocumentContentProvider implements vscode.TextDocumentContentProvider } } +let decorations: { [index: string]: vscode.TextEditorDecorationType } = {}; -const decorations: { [index: string]: vscode.TextEditorDecorationType } = (() => { +function initDecorations() { const decor = (obj: any) => vscode.window.createTextEditorDecorationType({ color: obj }) - return { + decorations = { background: decor("#3F3F3F"), error: vscode.window.createTextEditorDecorationType({ borderColor: "red", @@ -232,14 +245,26 @@ const decorations: { [index: string]: vscode.TextEditorDecorationType } = (() => attribute: decor("#BFEBBF"), literal: decor("#DFAF8F"), } -})() +} + +function removeHighlights() { + for (let tag in decorations) { + decorations[tag].dispose(); + } + + decorations = {}; +} function setHighlights( editor: vscode.TextEditor, highlights: Array<Decoration> ) { - if (!highlightingOn) { - return; + // Initialize decorations if necessary + // + // Note: decoration objects need to be kept around so we can dispose them + // if the user disables syntax highlighting + if (Object.keys(decorations).length === 0) { + initDecorations(); } let byTag: Map<string, vscode.Range[]> = new Map() |
