From 65e2d8a0c805431ea8cef0e947a9dfff1c0c78f8 Mon Sep 17 00:00:00 2001 From: veetaha Date: Tue, 24 Mar 2020 01:00:57 +0200 Subject: vscode: simplify and refactor config --- editors/code/src/config.ts | 106 +++++++++++++++++++-------------------------- 1 file changed, 45 insertions(+), 61 deletions(-) (limited to 'editors/code') diff --git a/editors/code/src/config.ts b/editors/code/src/config.ts index be5296fcf..16ac50a0a 100644 --- a/editors/code/src/config.ts +++ b/editors/code/src/config.ts @@ -1,29 +1,10 @@ import * as vscode from 'vscode'; import { log } from "./util"; -export interface InlayHintOptions { - typeHints: boolean; - parameterHints: boolean; - maxLength: number | null; -} - -export interface CargoWatchOptions { - enable: boolean; - arguments: string[]; - command: string; - allTargets: boolean; -} - -export interface CargoFeatures { - noDefaultFeatures: boolean; - allFeatures: boolean; - features: string[]; - loadOutDirsFromCheck: boolean; -} - export type UpdatesChannel = "stable" | "nightly"; export const NIGHTLY_TAG = "nightly"; + export class Config { readonly extensionId = "matklad.rust-analyzer"; @@ -50,25 +31,24 @@ export class Config { .packageJSON .releaseTag ?? undefined; - private cfg!: vscode.WorkspaceConfiguration; + readonly globalStoragePath: string; - constructor(private readonly ctx: vscode.ExtensionContext) { - vscode.workspace.onDidChangeConfiguration(this.onConfigChange, this, ctx.subscriptions); - this.refreshConfig(); + constructor(ctx: vscode.ExtensionContext) { + this.globalStoragePath = ctx.globalStoragePath; + vscode.workspace.onDidChangeConfiguration(this.onDidChangeConfiguration, this, ctx.subscriptions); + this.refreshLogging(); } - private refreshConfig() { - this.cfg = vscode.workspace.getConfiguration(this.rootSection); - const enableLogging = this.cfg.get("trace.extension") as boolean; - log.setEnabled(enableLogging); + private refreshLogging() { + log.setEnabled(this.traceExtension); log.debug( "Extension version:", this.packageJsonVersion, "using configuration:", this.cfg ); } - private async onConfigChange(event: vscode.ConfigurationChangeEvent) { - this.refreshConfig(); + private async onDidChangeConfiguration(event: vscode.ConfigurationChangeEvent) { + this.refreshLogging(); const requiresReloadOpt = this.requiresReloadOpts.find( opt => event.affectsConfiguration(opt) @@ -86,49 +66,53 @@ export class Config { } } - get globalStoragePath(): string { return this.ctx.globalStoragePath; } - // We don't do runtime config validation here for simplicity. More on stackoverflow: // https://stackoverflow.com/questions/60135780/what-is-the-best-way-to-type-check-the-configuration-for-vscode-extension - get serverPath() { return this.cfg.get("serverPath") as null | string; } - get channel() { return this.cfg.get<"stable" | "nightly">("updates.channel")!; } - get askBeforeDownload() { return this.cfg.get("updates.askBeforeDownload") as boolean; } - get highlightingSemanticTokens() { return this.cfg.get("highlighting.semanticTokens") as boolean; } - get highlightingOn() { return this.cfg.get("highlightingOn") as boolean; } - get rainbowHighlightingOn() { return this.cfg.get("rainbowHighlightingOn") as boolean; } - get lruCapacity() { return this.cfg.get("lruCapacity") as null | number; } - get inlayHints(): InlayHintOptions { + private get cfg(): vscode.WorkspaceConfiguration { + return vscode.workspace.getConfiguration(this.rootSection); + } + + get serverPath() { return this.cfg.get("serverPath")!; } + get channel() { return this.cfg.get("updates.channel")!; } + get askBeforeDownload() { return this.cfg.get("updates.askBeforeDownload")!; } + get highlightingSemanticTokens() { return this.cfg.get("highlighting.semanticTokens")!; } + get highlightingOn() { return this.cfg.get("highlightingOn")!; } + get rainbowHighlightingOn() { return this.cfg.get("rainbowHighlightingOn")!; } + get lruCapacity() { return this.cfg.get("lruCapacity")!; } + get excludeGlobs() { return this.cfg.get("excludeGlobs")!; } + get useClientWatching() { return this.cfg.get("useClientWatching")!; } + get featureFlags() { return this.cfg.get>("featureFlags")!; } + get rustfmtArgs() { return this.cfg.get("rustfmtArgs")!; } + get loadOutDirsFromCheck() { return this.cfg.get("loadOutDirsFromCheck")!; } + get traceExtension() { return this.cfg.get("trace.extension")!; } + + // for internal use + get withSysroot() { return this.cfg.get("withSysroot", true)!; } + + get inlayHints() { return { - typeHints: this.cfg.get("inlayHints.typeHints") as boolean, - parameterHints: this.cfg.get("inlayHints.parameterHints") as boolean, - maxLength: this.cfg.get("inlayHints.maxLength") as null | number, + typeHints: this.cfg.get("inlayHints.typeHints")!, + parameterHints: this.cfg.get("inlayHints.parameterHints")!, + maxLength: this.cfg.get("inlayHints.maxLength")!, }; } - get excludeGlobs() { return this.cfg.get("excludeGlobs") as string[]; } - get useClientWatching() { return this.cfg.get("useClientWatching") as boolean; } - get featureFlags() { return this.cfg.get("featureFlags") as Record; } - get rustfmtArgs() { return this.cfg.get("rustfmtArgs") as string[]; } - get loadOutDirsFromCheck() { return this.cfg.get("loadOutDirsFromCheck") as boolean; } - get cargoWatchOptions(): CargoWatchOptions { + get cargoWatchOptions() { return { - enable: this.cfg.get("cargo-watch.enable") as boolean, - arguments: this.cfg.get("cargo-watch.arguments") as string[], - allTargets: this.cfg.get("cargo-watch.allTargets") as boolean, - command: this.cfg.get("cargo-watch.command") as string, + enable: this.cfg.get("cargo-watch.enable")!, + arguments: this.cfg.get("cargo-watch.arguments")!, + allTargets: this.cfg.get("cargo-watch.allTargets")!, + command: this.cfg.get("cargo-watch.command")!, }; } - get cargoFeatures(): CargoFeatures { + get cargoFeatures() { return { - noDefaultFeatures: this.cfg.get("cargoFeatures.noDefaultFeatures") as boolean, - allFeatures: this.cfg.get("cargoFeatures.allFeatures") as boolean, - features: this.cfg.get("cargoFeatures.features") as string[], - loadOutDirsFromCheck: this.cfg.get("cargoFeatures.loadOutDirsFromCheck") as boolean, + noDefaultFeatures: this.cfg.get("cargoFeatures.noDefaultFeatures")!, + allFeatures: this.cfg.get("cargoFeatures.allFeatures")!, + features: this.cfg.get("cargoFeatures.features")!, + loadOutDirsFromCheck: this.cfg.get("cargoFeatures.loadOutDirsFromCheck")!, }; } - - // for internal use - get withSysroot() { return this.cfg.get("withSysroot", true) as boolean; } } -- cgit v1.2.3