diff options
Diffstat (limited to 'editors/code')
-rw-r--r-- | editors/code/src/config.ts | 39 |
1 files changed, 19 insertions, 20 deletions
diff --git a/editors/code/src/config.ts b/editors/code/src/config.ts index a05d8ac06..5371384ba 100644 --- a/editors/code/src/config.ts +++ b/editors/code/src/config.ts | |||
@@ -186,8 +186,8 @@ export class Config { | |||
186 | "rust-analyzer-server-release-date", | 186 | "rust-analyzer-server-release-date", |
187 | this.ctx.globalState | 187 | this.ctx.globalState |
188 | ); | 188 | ); |
189 | readonly serverReleaseTag = new StringStorage( | 189 | readonly serverReleaseTag = new Storage<null | string>( |
190 | "rust-analyzer-release-tag", this.ctx.globalState | 190 | "rust-analyzer-release-tag", this.ctx.globalState, null |
191 | ); | 191 | ); |
192 | 192 | ||
193 | // We don't do runtime config validation here for simplicity. More on stackoverflow: | 193 | // We don't do runtime config validation here for simplicity. More on stackoverflow: |
@@ -234,37 +234,36 @@ export class Config { | |||
234 | get withSysroot() { return this.cfg.get("withSysroot", true) as boolean; } | 234 | get withSysroot() { return this.cfg.get("withSysroot", true) as boolean; } |
235 | } | 235 | } |
236 | 236 | ||
237 | export class StringStorage { | 237 | export class Storage<T> { |
238 | constructor( | 238 | constructor( |
239 | private readonly key: string, | 239 | private readonly key: string, |
240 | private readonly storage: vscode.Memento | 240 | private readonly storage: vscode.Memento, |
241 | private readonly defaultVal: T | ||
241 | ) { } | 242 | ) { } |
242 | 243 | ||
243 | get(): null | string { | 244 | get(): T { |
244 | const tag = this.storage.get(this.key, null); | 245 | const val = this.storage.get(this.key, this.defaultVal); |
245 | log.debug(this.key, "==", tag); | 246 | log.debug(this.key, "==", val); |
246 | return tag; | 247 | return val; |
247 | } | 248 | } |
248 | async set(tag: string) { | 249 | async set(val: T) { |
249 | log.debug(this.key, "=", tag); | 250 | log.debug(this.key, "=", val); |
250 | await this.storage.update(this.key, tag); | 251 | await this.storage.update(this.key, val); |
251 | } | 252 | } |
252 | } | 253 | } |
253 | export class DateStorage { | 254 | export class DateStorage { |
255 | inner: Storage<null | string>; | ||
254 | 256 | ||
255 | constructor( | 257 | constructor(key: string, storage: vscode.Memento) { |
256 | private readonly key: string, | 258 | this.inner = new Storage(key, storage, null); |
257 | private readonly storage: vscode.Memento | 259 | } |
258 | ) { } | ||
259 | 260 | ||
260 | get(): null | Date { | 261 | get(): null | Date { |
261 | const date = this.storage.get(this.key, null); | 262 | const dateStr = this.inner.get(); |
262 | log.debug(this.key, "==", date); | 263 | return dateStr ? new Date(dateStr) : null; |
263 | return date ? new Date(date) : null; | ||
264 | } | 264 | } |
265 | 265 | ||
266 | async set(date: null | Date) { | 266 | async set(date: null | Date) { |
267 | log.debug(this.key, "=", date); | 267 | await this.inner.set(date ? date.toString() : null); |
268 | await this.storage.update(this.key, date); | ||
269 | } | 268 | } |
270 | } | 269 | } |