Skip to content

Commit 4f7e386

Browse files
committed
refactor: move extension initialization logic to extension.ts
Initialization logic was spread along all files and now it is centralized in extension.ts file. This is intermediate step because there are lots of refactorings and optimization in my list.
1 parent ef72dbf commit 4f7e386

File tree

6 files changed

+464
-377
lines changed

6 files changed

+464
-377
lines changed

src/configuration.ts

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import * as vscode from 'vscode';
22

33
import * as vars from './variables';
44
import * as utils from './utils';
5+
import { Log as logger } from './logger';
56

67
export interface VariablesConfiguration {
78
/* Array special members */
@@ -502,3 +503,97 @@ export function parseVariablesConfiguration(configFile: unknown): VariablesConfi
502503
};
503504
}
504505
}
506+
507+
export async function readConfigFile(file: vscode.Uri) {
508+
let document;
509+
try {
510+
document = await vscode.workspace.openTextDocument(file);
511+
} catch {
512+
/* the file might not exist, this is ok */
513+
return;
514+
}
515+
516+
let text;
517+
try {
518+
text = document.getText();
519+
} catch (err: unknown) {
520+
logger.error('could not read settings file %s', document.uri.fsPath, err);
521+
return;
522+
}
523+
524+
if (text.length === 0) {
525+
/* JSON file can be used as activation event */
526+
return;
527+
}
528+
529+
let data;
530+
try {
531+
data = JSON.parse(text);
532+
} catch (err: unknown) {
533+
logger.error('could not parse JSON settings file %s', document.uri.fsPath, err);
534+
return;
535+
}
536+
537+
return data;
538+
}
539+
540+
let variablesConfig: VariablesConfiguration | undefined;
541+
let formatterConfig: PgindentConfiguration | undefined;
542+
543+
/* Flag indicating that configuration file should be refreshed */
544+
let configDirty = true;
545+
546+
export function getVariablesConfiguration(): VariablesConfiguration | undefined {
547+
return variablesConfig;
548+
}
549+
550+
export function getFormatterConfiguration(): PgindentConfiguration | undefined {
551+
return formatterConfig;
552+
}
553+
554+
export async function refreshVariablesConfiguration(file: vscode.Uri) {
555+
if (!configDirty) {
556+
return;
557+
}
558+
559+
const config = await readConfigFile(file);
560+
if (!config) {
561+
return;
562+
}
563+
564+
variablesConfig = parseVariablesConfiguration(config);
565+
configDirty = false;
566+
}
567+
568+
export async function refreshFormatterConfiguration(file: vscode.Uri) {
569+
if (!configDirty) {
570+
return;
571+
}
572+
573+
const config = await readConfigFile(file);
574+
if (!config) {
575+
return;
576+
}
577+
578+
formatterConfig = parseFormatterConfiguration(config);
579+
configDirty = false;
580+
}
581+
582+
export async function refreshConfiguration(file: vscode.Uri) {
583+
if (!configDirty) {
584+
return;
585+
}
586+
587+
const config = await readConfigFile(file);
588+
if (!config) {
589+
return;
590+
}
591+
592+
formatterConfig = parseFormatterConfiguration(config);
593+
variablesConfig = parseVariablesConfiguration(config);
594+
configDirty = false;
595+
}
596+
597+
export function markConfigFileDirty() {
598+
configDirty = true;
599+
}

src/debugger.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as vscode from 'vscode';
22
import * as dap from "./dap";
33
import { Features } from './utils';
4-
import { NodePreviewTreeViewProvider } from './extension';
4+
import { PgVariablesViewProvider } from './variables';
55
import {EvaluationError} from './error';
66

77
export interface IDebugVariable {
@@ -947,8 +947,8 @@ export function pointerIsNull(pointer: string) {
947947
return pointer === '0x0' || /0x0+/.test(pointer);
948948
}
949949

950-
export function setupDebugger(variablesView: NodePreviewTreeViewProvider,
951-
context: vscode.ExtensionContext) {
950+
export function setupDebugger(context: vscode.ExtensionContext,
951+
variablesView: PgVariablesViewProvider) {
952952
if (!Features.debugFocusEnabled()) {
953953
/*
954954
* Prior to VS Code version 1.90 there is no debugFocus API -

src/entrypoint.ts

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
import * as vscode from 'vscode';
2-
import * as vars from './variables';
3-
import * as formatter from './formatter';
42
import { Log as logger, initLogger } from './logger';
5-
import { setupDebugger } from './debugger';
63
import {
7-
NodePreviewTreeViewProvider as PgVariablesView,
84
Configuration as config,
95
setupExtension,
106
} from './extension';
@@ -14,30 +10,12 @@ function setExtensionActive(status: boolean) {
1410
vscode.commands.executeCommand('setContext', context, status);
1511
}
1612

17-
function createPostgresVariablesView(context: vscode.ExtensionContext,
18-
nodeVars: vars.NodeVarRegistry) {
19-
const nodesView = new PgVariablesView(nodeVars);
20-
const nodesViewName = config.Views.NodePreviewTreeView;
21-
const treeDisposable = vscode.window.registerTreeDataProvider(nodesViewName,
22-
nodesView);
23-
context.subscriptions.push(treeDisposable);
24-
return nodesView;
25-
}
26-
2713
export function activate(context: vscode.ExtensionContext) {
2814
initLogger(context);
2915
try {
3016
logger.info('Extension is activating');
31-
const nodeVars = new vars.NodeVarRegistry();
32-
const nodesView = createPostgresVariablesView(context, nodeVars);
33-
34-
setupExtension(context, nodeVars, nodesView);
35-
setupDebugger(nodesView, context);
36-
37-
formatter.registerFormatting();
38-
17+
setupExtension(context);
3918
setExtensionActive(true);
40-
4119
logger.info('Extension activated');
4220
} catch (error) {
4321
logger.error('Failed to activate extension', error);

0 commit comments

Comments
 (0)