vscode-flutter-files
Version:
Quickly scaffold flutter bloc file templates
66 lines (59 loc) • 2.63 kB
text/typescript
import { ExtensionContext, commands, workspace, Uri } from 'vscode';
import { ConfigurationManager } from './configuration-manager';
import { showFileNameDialog, displayStatusMessage } from './editor';
import { commandsMap } from './commands';
import { toTileCase } from './formatting';
import { AngularCli } from './angular-cli';
import { ResourceType } from './enums/resource-type';
import { IConfig } from './models/config';
import { config as defaultConfig } from './config/cli-config';
import { ConfigExt } from './config-ext';
import { ConfigurationManagerExt } from './configuration-manager-ext';
import { CommandType } from './enums/command-type';
import * as vscode from 'vscode';
export async function activate(context: ExtensionContext) {
const angularCli = new AngularCli();
const cm = new ConfigurationManager();
const cmExt = new ConfigurationManagerExt();
let configMap: Map<string, IConfig>;
let configExtMap: Map<string, ConfigExt>;
setImmediate(async () => (configMap = await cm.getConfig()));
setImmediate(async () => (configExtMap = await cmExt.getConfig()));
// watch and update on config file changes
cm.watchConfigFiles(async () => (configMap = await cm.getConfig()));
cmExt.watchConfigFiles(async () => (configExtMap = await cmExt.getConfig()));
const showDynamicDialog = async (args: any, fileName: string, resource: ResourceType) => {
const loc = await showFileNameDialog(args, resource, fileName, configExtMap);
const workspaceFolder = workspace.getWorkspaceFolder(Uri.file(loc.fullPath));
let config =
(workspaceFolder &&
configMap.has(workspaceFolder.name) &&
configMap.get(workspaceFolder.name)) ||
defaultConfig;
let resourceConfig: IConfig = {
...config,
appPath: (workspaceFolder && workspaceFolder.uri.fsPath) || workspace.rootPath,
};
let arr = [...configExtMap];
let lastIndex = configExtMap.size - 1;
let confLast = arr[lastIndex][1];
let defaultConfigExt = confLast.configs[0];
await angularCli.generateResources(
resource,
loc,
resourceConfig,
defaultConfigExt,
);
displayStatusMessage(toTileCase(resource), loc.fileName);
};
const command = commands.registerCommand(CommandType.AsoDev, (args) => {
return vscode.env.openExternal(vscode.Uri.parse('https://aso.dev'));
});
context.subscriptions.push(command);
for (let [key, value] of commandsMap) {
const command = commands.registerCommand(key, (args) => {
return showDynamicDialog(args, value.fileName, value.resource);
});
context.subscriptions.push(command);
}
}