aboutsummaryrefslogtreecommitdiff
path: root/editors/code
diff options
context:
space:
mode:
Diffstat (limited to 'editors/code')
-rw-r--r--editors/code/src/config.ts106
1 files changed, 45 insertions, 61 deletions
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 @@
1import * as vscode from 'vscode'; 1import * as vscode from 'vscode';
2import { log } from "./util"; 2import { log } from "./util";
3 3
4export interface InlayHintOptions {
5 typeHints: boolean;
6 parameterHints: boolean;
7 maxLength: number | null;
8}
9
10export interface CargoWatchOptions {
11 enable: boolean;
12 arguments: string[];
13 command: string;
14 allTargets: boolean;
15}
16
17export interface CargoFeatures {
18 noDefaultFeatures: boolean;
19 allFeatures: boolean;
20 features: string[];
21 loadOutDirsFromCheck: boolean;
22}
23
24export type UpdatesChannel = "stable" | "nightly"; 4export type UpdatesChannel = "stable" | "nightly";
25 5
26export const NIGHTLY_TAG = "nightly"; 6export const NIGHTLY_TAG = "nightly";
7
27export class Config { 8export class Config {
28 readonly extensionId = "matklad.rust-analyzer"; 9 readonly extensionId = "matklad.rust-analyzer";
29 10
@@ -50,25 +31,24 @@ export class Config {
50 .packageJSON 31 .packageJSON
51 .releaseTag ?? undefined; 32 .releaseTag ?? undefined;
52 33
53 private cfg!: vscode.WorkspaceConfiguration; 34 readonly globalStoragePath: string;
54 35
55 constructor(private readonly ctx: vscode.ExtensionContext) { 36 constructor(ctx: vscode.ExtensionContext) {
56 vscode.workspace.onDidChangeConfiguration(this.onConfigChange, this, ctx.subscriptions); 37 this.globalStoragePath = ctx.globalStoragePath;
57 this.refreshConfig(); 38 vscode.workspace.onDidChangeConfiguration(this.onDidChangeConfiguration, this, ctx.subscriptions);
39 this.refreshLogging();
58 } 40 }
59 41
60 private refreshConfig() { 42 private refreshLogging() {
61 this.cfg = vscode.workspace.getConfiguration(this.rootSection); 43 log.setEnabled(this.traceExtension);
62 const enableLogging = this.cfg.get("trace.extension") as boolean;
63 log.setEnabled(enableLogging);
64 log.debug( 44 log.debug(
65 "Extension version:", this.packageJsonVersion, 45 "Extension version:", this.packageJsonVersion,
66 "using configuration:", this.cfg 46 "using configuration:", this.cfg
67 ); 47 );
68 } 48 }
69 49
70 private async onConfigChange(event: vscode.ConfigurationChangeEvent) { 50 private async onDidChangeConfiguration(event: vscode.ConfigurationChangeEvent) {
71 this.refreshConfig(); 51 this.refreshLogging();
72 52
73 const requiresReloadOpt = this.requiresReloadOpts.find( 53 const requiresReloadOpt = this.requiresReloadOpts.find(
74 opt => event.affectsConfiguration(opt) 54 opt => event.affectsConfiguration(opt)
@@ -86,49 +66,53 @@ export class Config {
86 } 66 }
87 } 67 }
88 68
89 get globalStoragePath(): string { return this.ctx.globalStoragePath; }
90
91 // We don't do runtime config validation here for simplicity. More on stackoverflow: 69 // We don't do runtime config validation here for simplicity. More on stackoverflow:
92 // https://stackoverflow.com/questions/60135780/what-is-the-best-way-to-type-check-the-configuration-for-vscode-extension 70 // https://stackoverflow.com/questions/60135780/what-is-the-best-way-to-type-check-the-configuration-for-vscode-extension
93 71
94 get serverPath() { return this.cfg.get("serverPath") as null | string; } 72 private get cfg(): vscode.WorkspaceConfiguration {
95 get channel() { return this.cfg.get<"stable" | "nightly">("updates.channel")!; } 73 return vscode.workspace.getConfiguration(this.rootSection);
96 get askBeforeDownload() { return this.cfg.get("updates.askBeforeDownload") as boolean; } 74 }
97 get highlightingSemanticTokens() { return this.cfg.get("highlighting.semanticTokens") as boolean; } 75
98 get highlightingOn() { return this.cfg.get("highlightingOn") as boolean; } 76 get serverPath() { return this.cfg.get<null | string>("serverPath")!; }
99 get rainbowHighlightingOn() { return this.cfg.get("rainbowHighlightingOn") as boolean; } 77 get channel() { return this.cfg.get<UpdatesChannel>("updates.channel")!; }
100 get lruCapacity() { return this.cfg.get("lruCapacity") as null | number; } 78 get askBeforeDownload() { return this.cfg.get<boolean>("updates.askBeforeDownload")!; }
101 get inlayHints(): InlayHintOptions { 79 get highlightingSemanticTokens() { return this.cfg.get<boolean>("highlighting.semanticTokens")!; }
80 get highlightingOn() { return this.cfg.get<boolean>("highlightingOn")!; }
81 get rainbowHighlightingOn() { return this.cfg.get<boolean>("rainbowHighlightingOn")!; }
82 get lruCapacity() { return this.cfg.get<null | number>("lruCapacity")!; }
83 get excludeGlobs() { return this.cfg.get<string[]>("excludeGlobs")!; }
84 get useClientWatching() { return this.cfg.get<boolean>("useClientWatching")!; }
85 get featureFlags() { return this.cfg.get<Record<string, boolean>>("featureFlags")!; }
86 get rustfmtArgs() { return this.cfg.get<string[]>("rustfmtArgs")!; }
87 get loadOutDirsFromCheck() { return this.cfg.get<boolean>("loadOutDirsFromCheck")!; }
88 get traceExtension() { return this.cfg.get<boolean>("trace.extension")!; }
89
90 // for internal use
91 get withSysroot() { return this.cfg.get<boolean>("withSysroot", true)!; }
92
93 get inlayHints() {
102 return { 94 return {
103 typeHints: this.cfg.get("inlayHints.typeHints") as boolean, 95 typeHints: this.cfg.get<boolean>("inlayHints.typeHints")!,
104 parameterHints: this.cfg.get("inlayHints.parameterHints") as boolean, 96 parameterHints: this.cfg.get<boolean>("inlayHints.parameterHints")!,
105 maxLength: this.cfg.get("inlayHints.maxLength") as null | number, 97 maxLength: this.cfg.get<null | number>("inlayHints.maxLength")!,
106 }; 98 };
107 } 99 }
108 get excludeGlobs() { return this.cfg.get("excludeGlobs") as string[]; }
109 get useClientWatching() { return this.cfg.get("useClientWatching") as boolean; }
110 get featureFlags() { return this.cfg.get("featureFlags") as Record<string, boolean>; }
111 get rustfmtArgs() { return this.cfg.get("rustfmtArgs") as string[]; }
112 get loadOutDirsFromCheck() { return this.cfg.get("loadOutDirsFromCheck") as boolean; }
113 100
114 get cargoWatchOptions(): CargoWatchOptions { 101 get cargoWatchOptions() {
115 return { 102 return {
116 enable: this.cfg.get("cargo-watch.enable") as boolean, 103 enable: this.cfg.get<boolean>("cargo-watch.enable")!,
117 arguments: this.cfg.get("cargo-watch.arguments") as string[], 104 arguments: this.cfg.get<string[]>("cargo-watch.arguments")!,
118 allTargets: this.cfg.get("cargo-watch.allTargets") as boolean, 105 allTargets: this.cfg.get<boolean>("cargo-watch.allTargets")!,
119 command: this.cfg.get("cargo-watch.command") as string, 106 command: this.cfg.get<string>("cargo-watch.command")!,
120 }; 107 };
121 } 108 }
122 109
123 get cargoFeatures(): CargoFeatures { 110 get cargoFeatures() {
124 return { 111 return {
125 noDefaultFeatures: this.cfg.get("cargoFeatures.noDefaultFeatures") as boolean, 112 noDefaultFeatures: this.cfg.get<boolean>("cargoFeatures.noDefaultFeatures")!,
126 allFeatures: this.cfg.get("cargoFeatures.allFeatures") as boolean, 113 allFeatures: this.cfg.get<boolean>("cargoFeatures.allFeatures")!,
127 features: this.cfg.get("cargoFeatures.features") as string[], 114 features: this.cfg.get<string[]>("cargoFeatures.features")!,
128 loadOutDirsFromCheck: this.cfg.get("cargoFeatures.loadOutDirsFromCheck") as boolean, 115 loadOutDirsFromCheck: this.cfg.get<boolean>("cargoFeatures.loadOutDirsFromCheck")!,
129 }; 116 };
130 } 117 }
131
132 // for internal use
133 get withSysroot() { return this.cfg.get("withSysroot", true) as boolean; }
134} 118}