ONE-vscode
ONE-vscode copied to clipboard
[Backend] Introduce BackendManager
What?
Let's introduce BackendManager.
Why?
Currently, we provide multiple backend registration. However, we don't provide a class to put them together. Instead, there are some global set/map variables which are declared in Backend/Backend.ts.
POINT Remove global variables. It may be unsafe to use global variable from an extension as we don't know how it is treated after the extension's disabled.
related articles:
- https://softwareengineering.stackexchange.com/questions/148108/why-is-global-state-so-evil/148154#148154
- https://stackoverflow.com/questions/10525582/why-are-global-variables-considered-bad-practice
Restructuring Plan
gToolchainEnvMap (Toolchain/ToolchainEnv.ts) -> private toolchainEnvMap; globalBackendMap (Backend/API.ts) -> private backendMap; globalExecutorArray (Backend/API.ts) -> private executors; (TO CHECK: can be removed?)
interface BackendMap {
[key: string]: Backend;
}
// List of backend extensions registered
let globalBackendMap: BackendMap = {};
// List of Executor extensions registered
let globalExecutorArray: Executor[] = [];
....
export interface ToolchainEnvMap {
[key: string]: ToolchainEnv;
}
// List of compile environments
let gToolchainEnvMap: ToolchainEnvMap = {};