From 5b9a882edc20810641cb774240e5089e87dab82e Mon Sep 17 00:00:00 2001 From: Veetaha Date: Wed, 26 Aug 2020 02:37:58 +0300 Subject: Make inlay hints colors more configurable --- editors/code/package.json | 67 ++++++++++++++++++++++++++++++++++-- editors/code/src/inlay_hints.ts | 75 +++++++++++++++-------------------------- 2 files changed, 93 insertions(+), 49 deletions(-) (limited to 'editors/code') diff --git a/editors/code/package.json b/editors/code/package.json index f079f73b8..93d94ed12 100644 --- a/editors/code/package.json +++ b/editors/code/package.json @@ -712,14 +712,77 @@ ], "colors": [ { - "id": "rust_analyzer.inlayHint", - "description": "Color for inlay hints", + "id": "rust_analyzer.inlayHints.foreground", + "description": "Foreground color of inlay hints (is overriden by more specific rust_analyzer.inlayHints.foreground.* configurations)", "defaults": { "dark": "#A0A0A0F0", "light": "#747474", "highContrast": "#BEBEBE" } }, + { + "id": "rust_analyzer.inlayHints.background", + "description": "Background color of inlay hints (is overriden by more specific rust_analyzer.inlayHints.background.* configurations)", + "defaults": { + "dark": "#11223300", + "light": "#11223300", + "highContrast": "#11223300" + } + }, + { + "id": "rust_analyzer.inlayHints.foreground.typeHints", + "description": "Foreground color of inlay type hints for variables (overrides rust_analyzer.inlayHints.foreground)", + "defaults": { + "dark": "rust_analyzer.inlayHints.foreground", + "light": "rust_analyzer.inlayHints.foreground", + "highContrast": "rust_analyzer.inlayHints.foreground" + } + }, + { + "id": "rust_analyzer.inlayHints.foreground.chainingHints", + "description": "Foreground color of inlay type hints for method chains (overrides rust_analyzer.inlayHints.foreground)", + "defaults": { + "dark": "rust_analyzer.inlayHints.foreground", + "light": "rust_analyzer.inlayHints.foreground", + "highContrast": "rust_analyzer.inlayHints.foreground" + } + }, + { + "id": "rust_analyzer.inlayHints.foreground.parameterHints", + "description": "Foreground color of function parameter name inlay hints at the call site (overrides rust_analyzer.inlayHints.foreground)", + "defaults": { + "dark": "rust_analyzer.inlayHints.foreground", + "light": "rust_analyzer.inlayHints.foreground", + "highContrast": "rust_analyzer.inlayHints.foreground" + } + }, + { + "id": "rust_analyzer.inlayHints.background.typeHints", + "description": "Background color of inlay type hints for variables (overrides rust_analyzer.inlayHints.background)", + "defaults": { + "dark": "rust_analyzer.inlayHints.background", + "light": "rust_analyzer.inlayHints.background", + "highContrast": "rust_analyzer.inlayHints.background" + } + }, + { + "id": "rust_analyzer.inlayHints.background.chainingHints", + "description": "Background color of inlay type hints for method chains (overrides rust_analyzer.inlayHints.background)", + "defaults": { + "dark": "rust_analyzer.inlayHints.background", + "light": "rust_analyzer.inlayHints.background", + "highContrast": "rust_analyzer.inlayHints.background" + } + }, + { + "id": "rust_analyzer.inlayHints.background.parameterHints", + "description": "Background color of function parameter name inlay hints at the call site (overrides rust_analyzer.inlayHints.background)", + "defaults": { + "dark": "rust_analyzer.inlayHints.background", + "light": "rust_analyzer.inlayHints.background", + "highContrast": "rust_analyzer.inlayHints.background" + } + }, { "id": "rust_analyzer.syntaxTreeBorder", "description": "Color of the border displayed in the Rust source code for the selected syntax node (see \"Show Syntax Tree\" command)", diff --git a/editors/code/src/inlay_hints.ts b/editors/code/src/inlay_hints.ts index 9e6d6045f..7b481fc72 100644 --- a/editors/code/src/inlay_hints.ts +++ b/editors/code/src/inlay_hints.ts @@ -39,54 +39,35 @@ export function activateInlayHints(ctx: Ctx) { maybeUpdater.onConfigChange(); } - -const typeHints = { - decorationType: vscode.window.createTextEditorDecorationType({ - after: { - color: new vscode.ThemeColor('rust_analyzer.inlayHint'), - fontStyle: "normal", - } - }), - - toDecoration(hint: ra.InlayHint.TypeHint, conv: lc.Protocol2CodeConverter): vscode.DecorationOptions { - return { - range: conv.asRange(hint.range), - renderOptions: { after: { contentText: `: ${hint.label}` } } - }; - } -}; - -const paramHints = { - decorationType: vscode.window.createTextEditorDecorationType({ - before: { - color: new vscode.ThemeColor('rust_analyzer.inlayHint'), - fontStyle: "normal", - } - }), - - toDecoration(hint: ra.InlayHint.ParamHint, conv: lc.Protocol2CodeConverter): vscode.DecorationOptions { - return { - range: conv.asRange(hint.range), - renderOptions: { before: { contentText: `${hint.label}: ` } } - }; - } -}; - -const chainingHints = { - decorationType: vscode.window.createTextEditorDecorationType({ - after: { - color: new vscode.ThemeColor('rust_analyzer.inlayHint'), - fontStyle: "normal", +const typeHints = createHintStyle("type"); +const paramHints = createHintStyle("parameter"); +const chainingHints = createHintStyle("chaining"); + +function createHintStyle(hintKind: "type" | "parameter" | "chaining") { + const [pos, render] = ({ + type: ["after", (label: string) => `: ${label}`], + parameter: ["before", (label: string) => `${label}: `], + chaining: ["after", (label: string) => `: ${label}`], + } as const)[hintKind]; + + const fg = new vscode.ThemeColor(`rust_analyzer.inlayHints.foreground.${hintKind}Hints`); + const bg = new vscode.ThemeColor(`rust_analyzer.inlayHints.background.${hintKind}Hints`); + return { + decorationType: vscode.window.createTextEditorDecorationType({ + [pos]: { + color: fg, + backgroundColor: bg, + fontStyle: "normal", + }, + }), + toDecoration(hint: ra.InlayHint, conv: lc.Protocol2CodeConverter): vscode.DecorationOptions { + return { + range: conv.asRange(hint.range), + renderOptions: { [pos]: { contentText: render(hint.label) } } + }; } - }), - - toDecoration(hint: ra.InlayHint.ChainingHint, conv: lc.Protocol2CodeConverter): vscode.DecorationOptions { - return { - range: conv.asRange(hint.range), - renderOptions: { after: { contentText: ` ${hint.label}` } } - }; - } -}; + }; +} class HintsUpdater implements Disposable { private sourceFiles = new Map(); // map Uri -> RustSourceFile -- cgit v1.2.3