diff --git a/editors/code/src/commands.ts b/editors/code/src/commands.ts deleted file mode 100644 index c7e27781e0..0000000000 --- a/editors/code/src/commands.ts +++ /dev/null @@ -1,17 +0,0 @@ -import * as applySourceChange from './commands/apply_source_change'; -import * as extendSelection from './commands/extend_selection'; -import * as joinLines from './commands/join_lines'; -import * as matchingBrace from './commands/matching_brace'; -import * as parentModule from './commands/parent_module'; -import * as runnables from './commands/runnables'; -import * as syntaxTree from './commands/syntaxTree'; - -export { - applySourceChange, - extendSelection, - joinLines, - matchingBrace, - parentModule, - runnables, - syntaxTree, -}; diff --git a/editors/code/src/commands/apply_source_change.ts b/editors/code/src/commands/apply_source_change.ts index f011cbe12e..67765e5a3c 100644 --- a/editors/code/src/commands/apply_source_change.ts +++ b/editors/code/src/commands/apply_source_change.ts @@ -18,7 +18,6 @@ export interface SourceChange { } export async function handle(change: SourceChange) { - console.log(`applySOurceChange ${JSON.stringify(change)}`); const wsEdit = new vscode.WorkspaceEdit(); for (const sourceEdit of change.sourceFileEdits) { const uri = Server.client.protocol2CodeConverter.asUri(sourceEdit.textDocument.uri); @@ -28,17 +27,18 @@ export async function handle(change: SourceChange) { let created; let moved; for (const fsEdit of change.fileSystemEdits) { - if (fsEdit.type == 'createFile') { - const uri = vscode.Uri.parse(fsEdit.uri!); - wsEdit.createFile(uri); - created = uri; - } else if (fsEdit.type == 'moveFile') { - const src = vscode.Uri.parse(fsEdit.src!); - const dst = vscode.Uri.parse(fsEdit.dst!); - wsEdit.renameFile(src, dst); - moved = dst; - } else { - console.error(`unknown op: ${JSON.stringify(fsEdit)}`); + switch (fsEdit.type) { + case 'createFile': + const uri = vscode.Uri.parse(fsEdit.uri!); + wsEdit.createFile(uri); + created = uri; + break; + case 'moveFile': + const src = vscode.Uri.parse(fsEdit.src!); + const dst = vscode.Uri.parse(fsEdit.dst!); + wsEdit.renameFile(src, dst); + moved = dst; + break; } } const toOpen = created || moved; @@ -51,7 +51,7 @@ export async function handle(change: SourceChange) { const uri = Server.client.protocol2CodeConverter.asUri(toReveal.textDocument.uri); const position = Server.client.protocol2CodeConverter.asPosition(toReveal.position); const editor = vscode.window.activeTextEditor; - if (!editor || editor.document.uri.toString() != uri.toString()) { return; } + if (!editor || editor.document.uri.toString() !== uri.toString()) { return; } if (!editor.selection.isEmpty) { return; } editor!.selection = new vscode.Selection(position, position); } diff --git a/editors/code/src/commands/extend_selection.ts b/editors/code/src/commands/extend_selection.ts index b722ac1722..cdc3d10fb3 100644 --- a/editors/code/src/commands/extend_selection.ts +++ b/editors/code/src/commands/extend_selection.ts @@ -14,7 +14,7 @@ interface ExtendSelectionResult { export async function handle() { const editor = vscode.window.activeTextEditor; - if (editor == null || editor.document.languageId != 'rust') { return; } + if (editor == null || editor.document.languageId !== 'rust') { return; } const request: ExtendSelectionParams = { selections: editor.selections.map((s) => { return Server.client.code2ProtocolConverter.asRange(s); diff --git a/editors/code/src/commands/index.ts b/editors/code/src/commands/index.ts new file mode 100644 index 0000000000..dfdcd64545 --- /dev/null +++ b/editors/code/src/commands/index.ts @@ -0,0 +1,17 @@ +import * as applySourceChange from './apply_source_change'; +import * as extendSelection from './extend_selection'; +import * as joinLines from './join_lines'; +import * as matchingBrace from './matching_brace'; +import * as parentModule from './parent_module'; +import * as runnables from './runnables'; +import * as syntaxTree from './syntaxTree'; + +export { + applySourceChange, + extendSelection, + joinLines, + matchingBrace, + parentModule, + runnables, + syntaxTree, +}; diff --git a/editors/code/src/commands/join_lines.ts b/editors/code/src/commands/join_lines.ts index 80ad4460ba..526b698ccd 100644 --- a/editors/code/src/commands/join_lines.ts +++ b/editors/code/src/commands/join_lines.ts @@ -11,7 +11,7 @@ interface JoinLinesParams { export async function handle() { const editor = vscode.window.activeTextEditor; - if (editor == null || editor.document.languageId != 'rust') { return; } + if (editor == null || editor.document.languageId !== 'rust') { return; } const request: JoinLinesParams = { range: Server.client.code2ProtocolConverter.asRange(editor.selection), textDocument: { uri: editor.document.uri.toString() }, diff --git a/editors/code/src/commands/matching_brace.ts b/editors/code/src/commands/matching_brace.ts index cf7f6bf8fa..a80446a8f5 100644 --- a/editors/code/src/commands/matching_brace.ts +++ b/editors/code/src/commands/matching_brace.ts @@ -10,7 +10,7 @@ interface FindMatchingBraceParams { export async function handle() { const editor = vscode.window.activeTextEditor; - if (editor == null || editor.document.languageId != 'rust') { return; } + if (editor == null || editor.document.languageId !== 'rust') { return; } const request: FindMatchingBraceParams = { textDocument: { uri: editor.document.uri.toString() }, offsets: editor.selections.map((s) => { diff --git a/editors/code/src/commands/parent_module.ts b/editors/code/src/commands/parent_module.ts index 7d413c27a6..d66fb30264 100644 --- a/editors/code/src/commands/parent_module.ts +++ b/editors/code/src/commands/parent_module.ts @@ -5,7 +5,7 @@ import { Server } from '../server'; export async function handle() { const editor = vscode.window.activeTextEditor; - if (editor == null || editor.document.languageId != 'rust') { return; } + if (editor == null || editor.document.languageId !== 'rust') { return; } const request: TextDocumentIdentifier = { uri: editor.document.uri.toString(), }; diff --git a/editors/code/src/commands/runnables.ts b/editors/code/src/commands/runnables.ts index 37db6ea10a..40f590dceb 100644 --- a/editors/code/src/commands/runnables.ts +++ b/editors/code/src/commands/runnables.ts @@ -59,7 +59,7 @@ function createTask(spec: Runnable): vscode.Task { let prevRunnable: RunnableQuickPick | undefined; export async function handle() { const editor = vscode.window.activeTextEditor; - if (editor == null || editor.document.languageId != 'rust') { return; } + if (editor == null || editor.document.languageId !== 'rust') { return; } const textDocument: lc.TextDocumentIdentifier = { uri: editor.document.uri.toString(), }; @@ -73,7 +73,7 @@ export async function handle() { items.push(prevRunnable); } for (const r of runnables) { - if (prevRunnable && JSON.stringify(prevRunnable.runnable) == JSON.stringify(r)) { + if (prevRunnable && JSON.stringify(prevRunnable.runnable) === JSON.stringify(r)) { continue; } items.push(new RunnableQuickPick(r)); diff --git a/editors/code/src/events.ts b/editors/code/src/events.ts deleted file mode 100644 index 8e2ac4a469..0000000000 --- a/editors/code/src/events.ts +++ /dev/null @@ -1,7 +0,0 @@ -import * as changeActiveTextEditor from './events/change_active_text_editor'; -import * as changeTextDocument from './events/change_text_document'; - -export { - changeActiveTextEditor, - changeTextDocument, -}; diff --git a/editors/code/src/events/change_active_text_editor.ts b/editors/code/src/events/change_active_text_editor.ts index 96d61126c6..3440aa0c37 100644 --- a/editors/code/src/events/change_active_text_editor.ts +++ b/editors/code/src/events/change_active_text_editor.ts @@ -5,7 +5,7 @@ import { Decoration } from '../highlighting'; import { Server } from '../server'; export async function handle(editor: TextEditor | undefined) { - if (!Server.config.highlightingOn || !editor || editor.document.languageId != 'rust') { return; } + if (!Server.config.highlightingOn || !editor || editor.document.languageId !== 'rust') { return; } const params: TextDocumentIdentifier = { uri: editor.document.uri.toString(), }; diff --git a/editors/code/src/events/change_text_document.ts b/editors/code/src/events/change_text_document.ts index 192fb1e8a8..b3000e0261 100644 --- a/editors/code/src/events/change_text_document.ts +++ b/editors/code/src/events/change_text_document.ts @@ -5,7 +5,7 @@ import { syntaxTreeUri, TextDocumentContentProvider } from '../commands/syntaxTr export function createHandler(textDocumentContentProvider: TextDocumentContentProvider) { return (event: vscode.TextDocumentChangeEvent) => { const doc = event.document; - if (doc.languageId != 'rust') { return; } + if (doc.languageId !== 'rust') { return; } afterLs(() => { textDocumentContentProvider.eventEmitter.fire(syntaxTreeUri); }); diff --git a/editors/code/src/events/index.ts b/editors/code/src/events/index.ts new file mode 100644 index 0000000000..b570a7a926 --- /dev/null +++ b/editors/code/src/events/index.ts @@ -0,0 +1,7 @@ +import * as changeActiveTextEditor from './change_active_text_editor'; +import * as changeTextDocument from './change_text_document'; + +export { + changeActiveTextEditor, + changeTextDocument, +}; diff --git a/editors/code/src/highlighting.ts b/editors/code/src/highlighting.ts index 71f8e5baa1..e2ac4d6290 100644 --- a/editors/code/src/highlighting.ts +++ b/editors/code/src/highlighting.ts @@ -9,17 +9,42 @@ export interface Decoration { } export class Highlighter { - private decorations: { [index: string]: vscode.TextEditorDecorationType }; - constructor() { - this.decorations = {}; + private static initDecorations(): Map { + const decor = (color: string) => vscode.window.createTextEditorDecorationType({ color }); + + const decorations: Iterable<[string, vscode.TextEditorDecorationType]> = [ + ['background', decor('#3F3F3F')], + ['error', vscode.window.createTextEditorDecorationType({ + borderColor: 'red', + borderStyle: 'none none dashed none', + })], + ['comment', decor('#7F9F7F')], + ['string', decor('#CC9393')], + ['keyword', decor('#F0DFAF')], + ['function', decor('#93E0E3')], + ['parameter', decor('#94BFF3')], + ['builtin', decor('#DD6718')], + ['text', decor('#DCDCCC')], + ['attribute', decor('#BFEBBF')], + ['literal', decor('#DFAF8F')], + ]; + + return new Map(decorations); } + private decorations: (Map | null) = null; + public removeHighlights() { - for (const tag in this.decorations) { - this.decorations[tag].dispose(); + if (this.decorations == null) { + return; } - this.decorations = {}; + // Decorations are removed when the object is disposed + for (const decoration of this.decorations.values()) { + decoration.dispose(); + } + + this.decorations = null; } public setHighlights( @@ -30,18 +55,17 @@ export class Highlighter { // // Note: decoration objects need to be kept around so we can dispose them // if the user disables syntax highlighting - if (Object.keys(this.decorations).length === 0) { - this.initDecorations(); + if (this.decorations == null) { + this.decorations = Highlighter.initDecorations(); } const byTag: Map = new Map(); - for (const tag in this.decorations) { + for (const tag of this.decorations.keys()) { byTag.set(tag, []); } for (const d of highlights) { if (!byTag.get(d.tag)) { - console.log(`unknown tag ${d.tag}`); continue; } byTag.get(d.tag)!.push( @@ -50,29 +74,9 @@ export class Highlighter { } for (const tag of byTag.keys()) { - const dec: vscode.TextEditorDecorationType = this.decorations[tag]; + const dec = this.decorations.get(tag) as vscode.TextEditorDecorationType; const ranges = byTag.get(tag)!; editor.setDecorations(dec, ranges); } } - - private initDecorations() { - const decor = (obj: any) => vscode.window.createTextEditorDecorationType({ color: obj }); - this.decorations = { - background: decor('#3F3F3F'), - error: vscode.window.createTextEditorDecorationType({ - borderColor: 'red', - borderStyle: 'none none dashed none', - }), - comment: decor('#7F9F7F'), - string: decor('#CC9393'), - keyword: decor('#F0DFAF'), - function: decor('#93E0E3'), - parameter: decor('#94BFF3'), - builtin: decor('#DD6718'), - text: decor('#DCDCCC'), - attribute: decor('#BFEBBF'), - literal: decor('#DFAF8F'), - }; - } } diff --git a/editors/code/src/server.ts b/editors/code/src/server.ts index 3857b00a53..325023e36a 100644 --- a/editors/code/src/server.ts +++ b/editors/code/src/server.ts @@ -34,7 +34,7 @@ export class Server { 'm/publishDecorations', (params: PublishDecorationsParams) => { const targetEditor = vscode.window.visibleTextEditors.find( - (editor) => editor.document.uri.toString() == params.uri, + (editor) => editor.document.uri.toString() === params.uri, ); if (!Server.config.highlightingOn || !targetEditor) { return; } Server.highlighter.setHighlights( diff --git a/editors/code/tslint.json b/editors/code/tslint.json index 466e1fa203..ce48dfc95e 100644 --- a/editors/code/tslint.json +++ b/editors/code/tslint.json @@ -1,5 +1,5 @@ { - "defaultSeverity": "warning", + "defaultSeverity": "error", "extends": [ "tslint:recommended" ],