From 4d62cfccbb8281f33b6f894df07e7316a9d45bfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adolfo=20Ochagav=C3=ADa?= Date: Sun, 7 Oct 2018 22:59:02 +0200 Subject: [PATCH] Apply tslint suggestions, round one --- editors/code/src/commands.ts | 4 +- .../code/src/commands/apply_source_change.ts | 66 ++++++++-------- editors/code/src/commands/extend_selection.ts | 24 +++--- editors/code/src/commands/join_lines.ts | 16 ++-- editors/code/src/commands/matching_brace.ts | 28 +++---- editors/code/src/commands/parent_module.ts | 30 ++++---- editors/code/src/commands/runnables.ts | 76 +++++++++---------- editors/code/src/commands/syntaxTree.ts | 20 ++--- editors/code/src/config.ts | 23 ++++++ editors/code/src/events.ts | 6 +- .../src/events/change_active_text_editor.ts | 22 +++--- .../code/src/events/change_text_document.ts | 10 +-- editors/code/src/extension.ts | 22 +++--- editors/code/src/highlighting.ts | 66 ++++++++-------- editors/code/src/server.ts | 72 +++++++----------- editors/code/tslint.json | 13 ++++ 16 files changed, 257 insertions(+), 241 deletions(-) create mode 100644 editors/code/src/config.ts create mode 100644 editors/code/tslint.json diff --git a/editors/code/src/commands.ts b/editors/code/src/commands.ts index 99cac3379e..c7e27781e0 100644 --- a/editors/code/src/commands.ts +++ b/editors/code/src/commands.ts @@ -13,5 +13,5 @@ export { matchingBrace, parentModule, runnables, - syntaxTree -} + syntaxTree, +}; diff --git a/editors/code/src/commands/apply_source_change.ts b/editors/code/src/commands/apply_source_change.ts index dcbbb2b098..f011cbe12e 100644 --- a/editors/code/src/commands/apply_source_change.ts +++ b/editors/code/src/commands/apply_source_change.ts @@ -1,5 +1,5 @@ import * as vscode from 'vscode'; -import * as lc from 'vscode-languageclient' +import * as lc from 'vscode-languageclient'; import { Server } from '../server'; @@ -11,48 +11,48 @@ interface FileSystemEdit { } export interface SourceChange { - label: string, - sourceFileEdits: lc.TextDocumentEdit[], - fileSystemEdits: FileSystemEdit[], - cursorPosition?: lc.TextDocumentPositionParams, + label: string; + sourceFileEdits: lc.TextDocumentEdit[]; + fileSystemEdits: FileSystemEdit[]; + cursorPosition?: lc.TextDocumentPositionParams; } export async function handle(change: SourceChange) { - console.log(`applySOurceChange ${JSON.stringify(change)}`) - let wsEdit = new vscode.WorkspaceEdit() - for (let sourceEdit of change.sourceFileEdits) { - let uri = Server.client.protocol2CodeConverter.asUri(sourceEdit.textDocument.uri) - let edits = Server.client.protocol2CodeConverter.asTextEdits(sourceEdit.edits) - wsEdit.set(uri, edits) + 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); + const edits = Server.client.protocol2CodeConverter.asTextEdits(sourceEdit.edits); + wsEdit.set(uri, edits); } let created; let moved; - for (let fsEdit of change.fileSystemEdits) { - if (fsEdit.type == "createFile") { - let uri = vscode.Uri.parse(fsEdit.uri!) - wsEdit.createFile(uri) - created = uri - } else if (fsEdit.type == "moveFile") { - let src = vscode.Uri.parse(fsEdit.src!) - let dst = vscode.Uri.parse(fsEdit.dst!) - wsEdit.renameFile(src, dst) - moved = dst + 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)}`) + console.error(`unknown op: ${JSON.stringify(fsEdit)}`); } } - let toOpen = created || moved - let toReveal = change.cursorPosition - await vscode.workspace.applyEdit(wsEdit) + const toOpen = created || moved; + const toReveal = change.cursorPosition; + await vscode.workspace.applyEdit(wsEdit); if (toOpen) { - let doc = await vscode.workspace.openTextDocument(toOpen) - await vscode.window.showTextDocument(doc) + const doc = await vscode.workspace.openTextDocument(toOpen); + await vscode.window.showTextDocument(doc); } else if (toReveal) { - let uri = Server.client.protocol2CodeConverter.asUri(toReveal.textDocument.uri) - let position = Server.client.protocol2CodeConverter.asPosition(toReveal.position) - let editor = vscode.window.activeTextEditor; - if (!editor || editor.document.uri.toString() != uri.toString()) return - if (!editor.selection.isEmpty) return - editor!.selection = new vscode.Selection(position, position) + 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.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 b90828ba9b..b722ac1722 100644 --- a/editors/code/src/commands/extend_selection.ts +++ b/editors/code/src/commands/extend_selection.ts @@ -1,6 +1,6 @@ import * as vscode from 'vscode'; -import { TextDocumentIdentifier, Range } from "vscode-languageclient"; +import { Range, TextDocumentIdentifier } from 'vscode-languageclient'; import { Server } from '../server'; interface ExtendSelectionParams { @@ -13,17 +13,17 @@ interface ExtendSelectionResult { } export async function handle() { - let editor = vscode.window.activeTextEditor - if (editor == null || editor.document.languageId != "rust") return - let request: ExtendSelectionParams = { - textDocument: { uri: editor.document.uri.toString() }, + const editor = vscode.window.activeTextEditor; + if (editor == null || editor.document.languageId != 'rust') { return; } + const request: ExtendSelectionParams = { selections: editor.selections.map((s) => { - return Server.client.code2ProtocolConverter.asRange(s) - }) - } - let response = await Server.client.sendRequest("m/extendSelection", request) + return Server.client.code2ProtocolConverter.asRange(s); + }), + textDocument: { uri: editor.document.uri.toString() }, + }; + const response = await Server.client.sendRequest('m/extendSelection', request); editor.selections = response.selections.map((range: Range) => { - let r = Server.client.protocol2CodeConverter.asRange(range) - return new vscode.Selection(r.start, r.end) - }) + const r = Server.client.protocol2CodeConverter.asRange(range); + return new vscode.Selection(r.start, r.end); + }); } diff --git a/editors/code/src/commands/join_lines.ts b/editors/code/src/commands/join_lines.ts index 7ae7b9d760..80ad4460ba 100644 --- a/editors/code/src/commands/join_lines.ts +++ b/editors/code/src/commands/join_lines.ts @@ -1,6 +1,6 @@ import * as vscode from 'vscode'; -import { TextDocumentIdentifier, Range } from "vscode-languageclient"; +import { Range, TextDocumentIdentifier } from 'vscode-languageclient'; import { Server } from '../server'; import { handle as applySourceChange, SourceChange } from './apply_source_change'; @@ -10,12 +10,12 @@ interface JoinLinesParams { } export async function handle() { - let editor = vscode.window.activeTextEditor - if (editor == null || editor.document.languageId != "rust") return - let request: JoinLinesParams = { - textDocument: { uri: editor.document.uri.toString() }, + const editor = vscode.window.activeTextEditor; + if (editor == null || editor.document.languageId != 'rust') { return; } + const request: JoinLinesParams = { range: Server.client.code2ProtocolConverter.asRange(editor.selection), - } - let change = await Server.client.sendRequest("m/joinLines", request) - await applySourceChange(change) + textDocument: { uri: editor.document.uri.toString() }, + }; + const change = await Server.client.sendRequest('m/joinLines', request); + await applySourceChange(change); } diff --git a/editors/code/src/commands/matching_brace.ts b/editors/code/src/commands/matching_brace.ts index 572c15ce83..cf7f6bf8fa 100644 --- a/editors/code/src/commands/matching_brace.ts +++ b/editors/code/src/commands/matching_brace.ts @@ -1,6 +1,6 @@ import * as vscode from 'vscode'; -import { TextDocumentIdentifier, Position } from "vscode-languageclient"; +import { Position, TextDocumentIdentifier } from 'vscode-languageclient'; import { Server } from '../server'; interface FindMatchingBraceParams { @@ -9,19 +9,19 @@ interface FindMatchingBraceParams { } export async function handle() { - let editor = vscode.window.activeTextEditor - if (editor == null || editor.document.languageId != "rust") return - let request: FindMatchingBraceParams = { + const editor = vscode.window.activeTextEditor; + if (editor == null || editor.document.languageId != 'rust') { return; } + const request: FindMatchingBraceParams = { textDocument: { uri: editor.document.uri.toString() }, offsets: editor.selections.map((s) => { - return Server.client.code2ProtocolConverter.asPosition(s.active) - }) - } - let response = await Server.client.sendRequest("m/findMatchingBrace", request) + return Server.client.code2ProtocolConverter.asPosition(s.active); + }), + }; + const response = await Server.client.sendRequest('m/findMatchingBrace', request); editor.selections = editor.selections.map((sel, idx) => { - let active = Server.client.protocol2CodeConverter.asPosition(response[idx]) - let anchor = sel.isEmpty ? active : sel.anchor - return new vscode.Selection(anchor, active) - }) - editor.revealRange(editor.selection) -}; + const active = Server.client.protocol2CodeConverter.asPosition(response[idx]); + const anchor = sel.isEmpty ? active : sel.anchor; + return new vscode.Selection(anchor, active); + }); + editor.revealRange(editor.selection); +} diff --git a/editors/code/src/commands/parent_module.ts b/editors/code/src/commands/parent_module.ts index dae60bfb4a..7d413c27a6 100644 --- a/editors/code/src/commands/parent_module.ts +++ b/editors/code/src/commands/parent_module.ts @@ -1,22 +1,22 @@ import * as vscode from 'vscode'; -import { TextDocumentIdentifier, Location } from "vscode-languageclient"; +import { Location, TextDocumentIdentifier } from 'vscode-languageclient'; import { Server } from '../server'; export async function handle() { - let editor = vscode.window.activeTextEditor - if (editor == null || editor.document.languageId != "rust") return - let request: TextDocumentIdentifier = { - uri: editor.document.uri.toString() - } - let response = await Server.client.sendRequest("m/parentModule", request) - let loc = response[0] - if (loc == null) return - let uri = Server.client.protocol2CodeConverter.asUri(loc.uri) - let range = Server.client.protocol2CodeConverter.asRange(loc.range) + const editor = vscode.window.activeTextEditor; + if (editor == null || editor.document.languageId != 'rust') { return; } + const request: TextDocumentIdentifier = { + uri: editor.document.uri.toString(), + }; + const response = await Server.client.sendRequest('m/parentModule', request); + const loc = response[0]; + if (loc == null) { return; } + const uri = Server.client.protocol2CodeConverter.asUri(loc.uri); + const range = Server.client.protocol2CodeConverter.asRange(loc.range); - let doc = await vscode.workspace.openTextDocument(uri) - let e = await vscode.window.showTextDocument(doc) - e.selection = new vscode.Selection(range.start, range.start) - e.revealRange(range, vscode.TextEditorRevealType.InCenter) + const doc = await vscode.workspace.openTextDocument(uri); + const e = await vscode.window.showTextDocument(doc); + e.selection = new vscode.Selection(range.start, range.start); + e.revealRange(range, vscode.TextEditorRevealType.InCenter); } diff --git a/editors/code/src/commands/runnables.ts b/editors/code/src/commands/runnables.ts index 45c16497db..37db6ea10a 100644 --- a/editors/code/src/commands/runnables.ts +++ b/editors/code/src/commands/runnables.ts @@ -1,10 +1,10 @@ import * as vscode from 'vscode'; -import * as lc from 'vscode-languageclient' +import * as lc from 'vscode-languageclient'; import { Server } from '../server'; interface RunnablesParams { - textDocument: lc.TextDocumentIdentifier, - position?: lc.Position, + textDocument: lc.TextDocumentIdentifier; + position?: lc.Position; } interface Runnable { @@ -12,17 +12,17 @@ interface Runnable { label: string; bin: string; args: string[]; - env: { [index: string]: string }, + env: { [index: string]: string }; } class RunnableQuickPick implements vscode.QuickPickItem { - label: string; - description?: string | undefined; - detail?: string | undefined; - picked?: boolean | undefined; + public label: string; + public description?: string | undefined; + public detail?: string | undefined; + public picked?: boolean | undefined; constructor(public runnable: Runnable) { - this.label = runnable.label + this.label = runnable.label; } } @@ -30,59 +30,59 @@ interface CargoTaskDefinition extends vscode.TaskDefinition { type: 'cargo'; label: string; command: string; - args: Array; + args: string[]; env?: { [key: string]: string }; } function createTask(spec: Runnable): vscode.Task { const TASK_SOURCE = 'Rust'; - let definition: CargoTaskDefinition = { + const definition: CargoTaskDefinition = { type: 'cargo', label: 'cargo', command: spec.bin, args: spec.args, - env: spec.env - } + env: spec.env, + }; - let execCmd = `${definition.command} ${definition.args.join(' ')}`; - let execOption: vscode.ShellExecutionOptions = { + const execCmd = `${definition.command} ${definition.args.join(' ')}`; + const execOption: vscode.ShellExecutionOptions = { cwd: '.', env: definition.env, }; - let exec = new vscode.ShellExecution(`clear; ${execCmd}`, execOption); + const exec = new vscode.ShellExecution(`clear; ${execCmd}`, execOption); - let f = vscode.workspace.workspaceFolders![0] - let t = new vscode.Task(definition, f, definition.label, TASK_SOURCE, exec, ['$rustc']); + const f = vscode.workspace.workspaceFolders![0]; + const t = new vscode.Task(definition, f, definition.label, TASK_SOURCE, exec, ['$rustc']); return t; } -let prevRunnable: RunnableQuickPick | undefined = undefined +let prevRunnable: RunnableQuickPick | undefined; export async function handle() { - let editor = vscode.window.activeTextEditor - if (editor == null || editor.document.languageId != "rust") return - let textDocument: lc.TextDocumentIdentifier = { - uri: editor.document.uri.toString() - } - let params: RunnablesParams = { + const editor = vscode.window.activeTextEditor; + if (editor == null || editor.document.languageId != 'rust') { return; } + const textDocument: lc.TextDocumentIdentifier = { + uri: editor.document.uri.toString(), + }; + const params: RunnablesParams = { textDocument, - position: Server.client.code2ProtocolConverter.asPosition(editor.selection.active) - } - let runnables = await Server.client.sendRequest('m/runnables', params) - let items: RunnableQuickPick[] = [] + position: Server.client.code2ProtocolConverter.asPosition(editor.selection.active), + }; + const runnables = await Server.client.sendRequest('m/runnables', params); + const items: RunnableQuickPick[] = []; if (prevRunnable) { - items.push(prevRunnable) + items.push(prevRunnable); } - for (let r of runnables) { + for (const r of runnables) { if (prevRunnable && JSON.stringify(prevRunnable.runnable) == JSON.stringify(r)) { - continue + continue; } - items.push(new RunnableQuickPick(r)) + items.push(new RunnableQuickPick(r)); } - let item = await vscode.window.showQuickPick(items) + const item = await vscode.window.showQuickPick(items); if (item) { - item.detail = "rerun" - prevRunnable = item - let task = createTask(item.runnable) - return await vscode.tasks.executeTask(task) + item.detail = 'rerun'; + prevRunnable = item; + const task = createTask(item.runnable); + return await vscode.tasks.executeTask(task); } } diff --git a/editors/code/src/commands/syntaxTree.ts b/editors/code/src/commands/syntaxTree.ts index d5daa9302c..dcb721eee5 100644 --- a/editors/code/src/commands/syntaxTree.ts +++ b/editors/code/src/commands/syntaxTree.ts @@ -6,20 +6,20 @@ import { Server } from '../server'; export const syntaxTreeUri = vscode.Uri.parse('ra-lsp://syntaxtree'); export class TextDocumentContentProvider implements vscode.TextDocumentContentProvider { - public eventEmitter = new vscode.EventEmitter() - public syntaxTree: string = "Not available" + public eventEmitter = new vscode.EventEmitter(); + public syntaxTree: string = 'Not available'; public provideTextDocumentContent(uri: vscode.Uri): vscode.ProviderResult { - let editor = vscode.window.activeTextEditor; - if (editor == null) return "" - let request: SyntaxTreeParams = { - textDocument: { uri: editor.document.uri.toString() } + const editor = vscode.window.activeTextEditor; + if (editor == null) { return ''; } + const request: SyntaxTreeParams = { + textDocument: { uri: editor.document.uri.toString() }, }; - return Server.client.sendRequest("m/syntaxTree", request); + return Server.client.sendRequest('m/syntaxTree', request); } get onDidChange(): vscode.Event { - return this.eventEmitter.event + return this.eventEmitter.event; } } @@ -33,6 +33,6 @@ type SyntaxTreeResult = string; // // The contents of the file come from the `TextDocumentContentProvider` export async function handle() { - let document = await vscode.workspace.openTextDocument(syntaxTreeUri) - return vscode.window.showTextDocument(document, vscode.ViewColumn.Two, true) + const document = await vscode.workspace.openTextDocument(syntaxTreeUri); + return vscode.window.showTextDocument(document, vscode.ViewColumn.Two, true); } diff --git a/editors/code/src/config.ts b/editors/code/src/config.ts new file mode 100644 index 0000000000..740b5be206 --- /dev/null +++ b/editors/code/src/config.ts @@ -0,0 +1,23 @@ +import * as vscode from 'vscode'; + +import { Server } from './server'; + +export class Config { + public highlightingOn = true; + + constructor() { + vscode.workspace.onDidChangeConfiguration((_) => this.userConfigChanged()); + this.userConfigChanged(); + } + + public userConfigChanged() { + const config = vscode.workspace.getConfiguration('ra-lsp'); + if (config.has('highlightingOn')) { + this.highlightingOn = config.get('highlightingOn') as boolean; + } + + if (!this.highlightingOn && Server) { + Server.highlighter.removeHighlights(); + } + } +} diff --git a/editors/code/src/events.ts b/editors/code/src/events.ts index b143bb2565..8e2ac4a469 100644 --- a/editors/code/src/events.ts +++ b/editors/code/src/events.ts @@ -1,7 +1,7 @@ -import * as changeActiveTextEditor from './events/change_active_text_editor' +import * as changeActiveTextEditor from './events/change_active_text_editor'; import * as changeTextDocument from './events/change_text_document'; export { changeActiveTextEditor, - changeTextDocument -} \ No newline at end of file + changeTextDocument, +}; diff --git a/editors/code/src/events/change_active_text_editor.ts b/editors/code/src/events/change_active_text_editor.ts index bbdd530986..96d61126c6 100644 --- a/editors/code/src/events/change_active_text_editor.ts +++ b/editors/code/src/events/change_active_text_editor.ts @@ -1,14 +1,14 @@ -import { TextEditor } from "vscode"; -import { TextDocumentIdentifier } from "vscode-languageclient"; +import { TextEditor } from 'vscode'; +import { TextDocumentIdentifier } from 'vscode-languageclient'; -import { Server } from "../server"; -import { Decoration } from "../highlighting"; +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 - let params: TextDocumentIdentifier = { - uri: editor.document.uri.toString() - } - let decorations = await Server.client.sendRequest("m/decorationsRequest", params) - Server.highlighter.setHighlights(editor, decorations) -} \ No newline at end of file + if (!Server.config.highlightingOn || !editor || editor.document.languageId != 'rust') { return; } + const params: TextDocumentIdentifier = { + uri: editor.document.uri.toString(), + }; + const decorations = await Server.client.sendRequest('m/decorationsRequest', params); + Server.highlighter.setHighlights(editor, decorations); +} diff --git a/editors/code/src/events/change_text_document.ts b/editors/code/src/events/change_text_document.ts index 83ee6c9ee9..192fb1e8a8 100644 --- a/editors/code/src/events/change_text_document.ts +++ b/editors/code/src/events/change_text_document.ts @@ -4,16 +4,16 @@ import { syntaxTreeUri, TextDocumentContentProvider } from '../commands/syntaxTr export function createHandler(textDocumentContentProvider: TextDocumentContentProvider) { return (event: vscode.TextDocumentChangeEvent) => { - let doc = event.document - if (doc.languageId != "rust") return + const doc = event.document; + if (doc.languageId != 'rust') { return; } afterLs(() => { textDocumentContentProvider.eventEmitter.fire(syntaxTreeUri); - }) - } + }); + }; } // We need to order this after LS updates, but there's no API for that. // Hence, good old setTimeout. function afterLs(f: () => any) { - setTimeout(f, 10) + setTimeout(f, 10); } diff --git a/editors/code/src/extension.ts b/editors/code/src/extension.ts index 595fb98fe3..f1bc0b457b 100644 --- a/editors/code/src/extension.ts +++ b/editors/code/src/extension.ts @@ -1,9 +1,9 @@ import * as vscode from 'vscode'; -import * as commands from './commands' -import * as events from './events' -import { Server } from './server'; +import * as commands from './commands'; import { TextDocumentContentProvider } from './commands/syntaxTree'; +import * as events from './events'; +import { Server } from './server'; export function activate(context: vscode.ExtensionContext) { function disposeOnDeactivation(disposable: vscode.Disposable) { @@ -11,10 +11,10 @@ export function activate(context: vscode.ExtensionContext) { } function registerCommand(name: string, f: any) { - disposeOnDeactivation(vscode.commands.registerCommand(name, f)) + disposeOnDeactivation(vscode.commands.registerCommand(name, f)); } - registerCommand('ra-lsp.syntaxTree', commands.syntaxTree.handle) + registerCommand('ra-lsp.syntaxTree', commands.syntaxTree.handle); registerCommand('ra-lsp.extendSelection', commands.extendSelection.handle); registerCommand('ra-lsp.matchingBrace', commands.matchingBrace.handle); registerCommand('ra-lsp.joinLines', commands.joinLines.handle); @@ -22,19 +22,19 @@ export function activate(context: vscode.ExtensionContext) { registerCommand('ra-lsp.run', commands.runnables.handle); registerCommand('ra-lsp.applySourceChange', commands.applySourceChange.handle); - let textDocumentContentProvider = new TextDocumentContentProvider() + const textDocumentContentProvider = new TextDocumentContentProvider(); disposeOnDeactivation(vscode.workspace.registerTextDocumentContentProvider( 'ra-lsp', - textDocumentContentProvider - )) + textDocumentContentProvider, + )); - Server.start() + Server.start(); vscode.workspace.onDidChangeTextDocument( events.changeTextDocument.createHandler(textDocumentContentProvider), null, - context.subscriptions) - vscode.window.onDidChangeActiveTextEditor(events.changeActiveTextEditor.handle) + context.subscriptions); + vscode.window.onDidChangeActiveTextEditor(events.changeActiveTextEditor.handle); } export function deactivate(): Thenable { diff --git a/editors/code/src/highlighting.ts b/editors/code/src/highlighting.ts index 169ddb0df0..71f8e5baa1 100644 --- a/editors/code/src/highlighting.ts +++ b/editors/code/src/highlighting.ts @@ -1,11 +1,11 @@ import * as vscode from 'vscode'; -import * as lc from 'vscode-languageclient' +import * as lc from 'vscode-languageclient'; import { Server } from './server'; export interface Decoration { - range: lc.Range, - tag: string, + range: lc.Range; + tag: string; } export class Highlighter { @@ -14,17 +14,17 @@ export class Highlighter { this.decorations = {}; } - removeHighlights() { - for (let tag in this.decorations) { + public removeHighlights() { + for (const tag in this.decorations) { this.decorations[tag].dispose(); } this.decorations = {}; } - setHighlights( + public setHighlights( editor: vscode.TextEditor, - highlights: Array + highlights: Decoration[], ) { // Initialize decorations if necessary // @@ -34,45 +34,45 @@ export class Highlighter { this.initDecorations(); } - let byTag: Map = new Map() - for (let tag in this.decorations) { - byTag.set(tag, []) + const byTag: Map = new Map(); + for (const tag in this.decorations) { + byTag.set(tag, []); } - for (let d of highlights) { + for (const d of highlights) { if (!byTag.get(d.tag)) { - console.log(`unknown tag ${d.tag}`) - continue + console.log(`unknown tag ${d.tag}`); + continue; } byTag.get(d.tag)!.push( - Server.client.protocol2CodeConverter.asRange(d.range) - ) + Server.client.protocol2CodeConverter.asRange(d.range), + ); } - for (let tag of byTag.keys()) { - let dec: vscode.TextEditorDecorationType = this.decorations[tag] - let ranges = byTag.get(tag)! - editor.setDecorations(dec, ranges) + for (const tag of byTag.keys()) { + const dec: vscode.TextEditorDecorationType = this.decorations[tag]; + const ranges = byTag.get(tag)!; + editor.setDecorations(dec, ranges); } } private initDecorations() { - const decor = (obj: any) => vscode.window.createTextEditorDecorationType({ color: obj }) + const decor = (obj: any) => vscode.window.createTextEditorDecorationType({ color: obj }); this.decorations = { - background: decor("#3F3F3F"), + background: decor('#3F3F3F'), error: vscode.window.createTextEditorDecorationType({ - borderColor: "red", - borderStyle: "none none dashed none", + 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"), - } + 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 c1c95e0084..3857b00a53 100644 --- a/editors/code/src/server.ts +++ b/editors/code/src/server.ts @@ -1,45 +1,25 @@ import * as vscode from 'vscode'; -import * as lc from 'vscode-languageclient' +import * as lc from 'vscode-languageclient'; -import { Highlighter, Decoration } from './highlighting'; - -export class Config { - highlightingOn = true; - - constructor() { - vscode.workspace.onDidChangeConfiguration(_ => this.userConfigChanged()); - this.userConfigChanged(); - } - - userConfigChanged() { - let config = vscode.workspace.getConfiguration('ra-lsp'); - if (config.has('highlightingOn')) { - this.highlightingOn = config.get('highlightingOn') as boolean; - }; - - if (!this.highlightingOn) { - Server.highlighter.removeHighlights(); - } - } -} +import { Config } from './config'; +import { Decoration, Highlighter } from './highlighting'; export class Server { - static highlighter = new Highlighter(); - static config = new Config(); - static client: lc.LanguageClient; + public static highlighter = new Highlighter(); + public static config = new Config(); + public static client: lc.LanguageClient; - - static start() { - let run: lc.Executable = { - command: "ra_lsp_server", - options: { cwd: "." } - } - let serverOptions: lc.ServerOptions = { + public static start() { + const run: lc.Executable = { + command: 'ra_lsp_server', + options: { cwd: '.' }, + }; + const serverOptions: lc.ServerOptions = { run, - debug: run + debug: run, }; - let clientOptions: lc.LanguageClientOptions = { + const clientOptions: lc.LanguageClientOptions = { documentSelector: [{ scheme: 'file', language: 'rust' }], }; @@ -51,24 +31,24 @@ export class Server { ); Server.client.onReady().then(() => { Server.client.onNotification( - "m/publishDecorations", + 'm/publishDecorations', (params: PublishDecorationsParams) => { - let editor = vscode.window.visibleTextEditors.find( - (editor) => editor.document.uri.toString() == params.uri - ) - if (!Server.config.highlightingOn || !editor) return; + const targetEditor = vscode.window.visibleTextEditors.find( + (editor) => editor.document.uri.toString() == params.uri, + ); + if (!Server.config.highlightingOn || !targetEditor) { return; } Server.highlighter.setHighlights( - editor, + targetEditor, params.decorations, - ) - } - ) - }) + ); + }, + ); + }); Server.client.start(); } } interface PublishDecorationsParams { - uri: string, - decorations: Decoration[], + uri: string; + decorations: Decoration[]; } diff --git a/editors/code/tslint.json b/editors/code/tslint.json new file mode 100644 index 0000000000..466e1fa203 --- /dev/null +++ b/editors/code/tslint.json @@ -0,0 +1,13 @@ +{ + "defaultSeverity": "warning", + "extends": [ + "tslint:recommended" + ], + "jsRules": {}, + "rules": { + "quotemark": [true, "single"], + "interface-name": false, + "object-literal-sort-keys": false + }, + "rulesDirectory": [] +}