Skip to content

Commit e72364e

Browse files
committed
src: splits the mapping type used for both the file (raw) and runtime (compiled RegEx) representations of the config file contents into two files. which also fixes the unnecessary use of any.
1 parent b8671db commit e72364e

File tree

5 files changed

+51
-35
lines changed

5 files changed

+51
-35
lines changed

src/config.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
export enum Opacity {
2+
Max = "max",
3+
Mid = "mid",
4+
Min = "min",
5+
}
6+
7+
export interface Rule {
8+
flags: string | undefined;
9+
opacity: string | undefined;
10+
pattern: string;
11+
}
12+
13+
export interface File {
14+
rules: Rule[];
15+
valueForMaxTier: number;
16+
valueForMidTier: number;
17+
valueForMinTier: number;
18+
updatePeriod: number;
19+
}

src/configmanager.ts

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import * as vscode from "vscode";
2-
import { Config, Opacity, Rule } from "./models";
2+
import * as config from "./config";
3+
import * as models from "./models";
34

45
export class ConfigManager {
5-
_configCache: Map<vscode.ConfigurationScope, Config>;
6+
_configCache: Map<vscode.ConfigurationScope, models.Config>;
67

78
constructor() {
89
this._configCache = new Map();
@@ -12,20 +13,20 @@ export class ConfigManager {
1213
this._configCache.clear();
1314
}
1415

15-
_marshallRules(jsonRules: any[], defaultOpacity: Opacity, defaultFlags: string): Rule[] {
16+
_marshallRules(jsonRules: config.Rule[], defaultOpacity: config.Opacity, defaultFlags: string): models.Rule[] {
1617
return jsonRules
1718
.filter((rule) => {
1819
return "pattern" in rule;
1920
})
2021
.map((rule) => {
21-
return {
22+
return <models.Rule>{
2223
regex: new RegExp(rule["pattern"], rule["flags"] ?? defaultFlags),
2324
opacity: rule["opacity"] ?? defaultOpacity,
2425
};
2526
});
2627
}
2728

28-
_getWorkspaceRulesInJSON(workspaceConfig: vscode.WorkspaceConfiguration): any[] {
29+
_getWorkspaceRulesInJSON(workspaceConfig: vscode.WorkspaceConfiguration): config.Rule[] {
2930
const jsonRules = workspaceConfig.get("rules") ?? [];
3031
if (!Array.isArray(jsonRules)) return [];
3132
return jsonRules;
@@ -35,7 +36,7 @@ export class ConfigManager {
3536
return "[" + editor.document.uri.path.split(".").pop() + "]";
3637
}
3738

38-
_getLanguageSpecificRulesInJSON(editor: vscode.TextEditor): Rule[] {
39+
_getLanguageSpecificRulesInJSON(editor: vscode.TextEditor): config.Rule[] {
3940
const activeLangSlug = this._getActiveDocumentLanguageSlug(editor);
4041

4142
const workspaceConfig = vscode.workspace.getConfiguration();
@@ -55,22 +56,22 @@ export class ConfigManager {
5556
return rules;
5657
}
5758

58-
_readRules(editor: vscode.TextEditor, workspaceConfig: vscode.WorkspaceConfiguration): Rule[] {
59-
const defaultOpacity = (workspaceConfig.get("defaultOpacityTier") as Opacity) ?? Opacity.Mid;
59+
_readRules(editor: vscode.TextEditor, workspaceConfig: vscode.WorkspaceConfiguration): models.Rule[] {
60+
const defaultOpacity = (workspaceConfig.get("defaultOpacityTier") as config.Opacity) ?? config.Opacity.Mid;
6061
const defaultFlags = (workspaceConfig.get("defaultFlags") as string) ?? "gs";
6162
const workspaceRules = this._getWorkspaceRulesInJSON(workspaceConfig);
6263
const languageSpecificRules = this._getLanguageSpecificRulesInJSON(editor);
6364
const rules = this._marshallRules([...workspaceRules, ...languageSpecificRules], defaultOpacity, defaultFlags);
6465
return rules;
6566
}
6667

67-
readConfig(editor: vscode.TextEditor): Config {
68+
readConfig(editor: vscode.TextEditor): models.Config {
6869
const cached = this._configCache.get(editor.document.uri);
6970
if (cached) {
7071
return cached;
7172
}
7273
const workspaceConfig = vscode.workspace.getConfiguration("dim", editor.document.uri);
73-
const config: Config = {
74+
const config: models.Config = {
7475
rules: this._readRules(editor, workspaceConfig),
7576
valueForMinTier: workspaceConfig.get("valueForMinTier") ?? 0.25,
7677
valueForMidTier: workspaceConfig.get("valueForMidTier") ?? 0.5,

src/editorDecorator.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import * as vscode from "vscode";
2-
import * as models from "./models";
32
import * as utils from "./utilities";
4-
import { ConfigManager } from "./configmanager";
3+
import * as cm from "./configManager";
4+
import * as models from "./models";
55

66
export class EditorDecorator {
77
private editor: vscode.TextEditor;
88
private config: models.Config;
9-
private configManager: ConfigManager;
9+
private configManager: cm.ConfigManager;
1010
private filename: string;
1111
private logger: vscode.OutputChannel;
1212
private matches: Map<models.Rule, vscode.Range[]> | undefined;
@@ -17,9 +17,9 @@ export class EditorDecorator {
1717
private lastUpdateTimestamp: number;
1818
private timeoutForScheduler: NodeJS.Timeout | undefined;
1919

20-
constructor(editor: vscode.TextEditor, configManager: ConfigManager, enabled: boolean, logger: vscode.OutputChannel) {
20+
constructor(editor: vscode.TextEditor, cm: cm.ConfigManager, enabled: boolean, logger: vscode.OutputChannel) {
2121
this.editor = editor;
22-
this.configManager = configManager;
22+
this.configManager = cm;
2323
this.logger = logger;
2424
this.enabled = enabled;
2525
this.inFocus = true;

src/extension.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as vscode from "vscode";
22
import { EditorDecorator } from "./editorDecorator";
3-
import { ConfigManager } from "./configmanager";
3+
import { ConfigManager } from "./configManager";
44

55
class ExtensionLifecycleController {
66
decorators: Map<vscode.TextEditor, EditorDecorator>;
@@ -54,7 +54,7 @@ class ExtensionLifecycleController {
5454
}
5555
}
5656

57-
onDidChangeActiveTextEditor(editor: vscode.TextEditor | undefined): any {
57+
onDidChangeActiveTextEditor(editor: vscode.TextEditor | undefined): unknown {
5858
if (this.activeEditor) {
5959
const d = this.decorators.get(this.activeEditor);
6060
if (d) {
@@ -91,7 +91,7 @@ class ExtensionLifecycleController {
9191
}
9292
}
9393

94-
onDidChangeTextDocument(event: vscode.TextDocumentChangeEvent): any {
94+
onDidChangeTextDocument(event: vscode.TextDocumentChangeEvent): unknown {
9595
if (!this.activeEditor) return;
9696
if (event.document.uri.path !== this.activeEditor.document.uri.path || event.document.uri.scheme !== "file") return;
9797
this.logger.appendLine("onDidChangeTextDocument");

src/models.ts

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,22 @@
11
import * as vscode from "vscode";
2+
import * as config from "./config";
23

3-
export enum Opacity {
4-
Max = "max",
5-
Mid = "mid",
6-
Min = "min",
4+
export interface PerDecorationQueue {
5+
"max": vscode.Range[];
6+
"mid": vscode.Range[];
7+
"min": vscode.Range[];
78
}
89

10+
export interface DecorationTypes {
11+
"max": vscode.TextEditorDecorationType;
12+
"mid": vscode.TextEditorDecorationType;
13+
"min": vscode.TextEditorDecorationType;
14+
}
15+
16+
/* Compiled version of {@link config.Rule}. */
917
export interface Rule {
1018
regex: RegExp;
11-
opacity: Opacity;
19+
opacity: config.Opacity;
1220
}
1321

1422
export interface Config {
@@ -18,15 +26,3 @@ export interface Config {
1826
valueForMinTier: number;
1927
updatePeriod: number;
2028
}
21-
22-
export interface PerDecorationQueue {
23-
"max": vscode.Range[];
24-
"mid": vscode.Range[];
25-
"min": vscode.Range[];
26-
}
27-
28-
export interface DecorationTypes {
29-
"max": vscode.TextEditorDecorationType;
30-
"mid": vscode.TextEditorDecorationType;
31-
"min": vscode.TextEditorDecorationType;
32-
}

0 commit comments

Comments
 (0)