diff --git a/src/commands/export.ts b/src/commands/export.ts index 88337966..c0a9658c 100644 --- a/src/commands/export.ts +++ b/src/commands/export.ts @@ -2,12 +2,9 @@ import fs = require("fs"); import path = require("path"); import * as vscode from "vscode"; import { AtelierAPI } from "../api"; -import { ClassNode } from "../explorer/models/classesNode"; -import { PackageNode } from "../explorer/models/packageNode"; -import { RootNode } from "../explorer/models/rootNode"; -import { RoutineNode } from "../explorer/models/routineNode"; import { config } from "../extension"; import { mkdirSyncRecursive, notNull, outputChannel, workspaceFolderUri } from "../utils"; +import { NodeBase } from "../explorer/models/nodeBase"; const filesFilter = (file: any) => { if (file.cat === "CSP" || file.name.startsWith("%") || file.name.startsWith("INFORMATION.")) { @@ -189,8 +186,9 @@ export async function exportAll(workspaceFolder?: string): Promise { }); } -export async function exportExplorerItem(node: RootNode | PackageNode | ClassNode | RoutineNode): Promise { +export async function exportExplorerItem(nodes: NodeBase[]): Promise { const origNamespace = config("conn").ns; + const node = nodes[0]; if (origNamespace !== node.namespace) { const answer = await vscode.window.showWarningMessage( ` @@ -206,7 +204,7 @@ Would you like to continue?`, } } const { workspaceFolder, namespace } = node; - return node.getItems4Export().then(items => { - return exportList(items, workspaceFolder, namespace); + return Promise.all(nodes.map(node => node.getItems4Export())).then(items => { + return exportList(items.flat(), workspaceFolder, namespace); }); } diff --git a/src/commands/studio.ts b/src/commands/studio.ts index 24809a84..dba4bd64 100644 --- a/src/commands/studio.ts +++ b/src/commands/studio.ts @@ -54,7 +54,7 @@ class StudioActions { } } - private userAction(action, afterUserAction = false, answer: string = "", msg: string = ""): Thenable { + private userAction(action, afterUserAction = false, answer = "", msg = ""): Thenable { if (!action) { return; } diff --git a/src/commands/xml2doc.ts b/src/commands/xml2doc.ts index 8610d570..3d315d71 100644 --- a/src/commands/xml2doc.ts +++ b/src/commands/xml2doc.ts @@ -1,9 +1,7 @@ import * as vscode from "vscode"; -import { config, OBJECTSCRIPTXML_FILE_SCHEMA } from "../extension"; -import { XmlContentProvider } from "../providers/XmlContentProvider"; +import { config, OBJECTSCRIPTXML_FILE_SCHEMA, xmlContentProvider } from "../extension"; export async function xml2doc(context: vscode.ExtensionContext, textEditor: vscode.TextEditor): Promise { - const xmlContentProvider: XmlContentProvider = context.workspaceState.get("xmlContentProvider"); if (!config("conn").active) { return; } diff --git a/src/extension.ts b/src/extension.ts index fafd0374..0ebc2e75 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -64,6 +64,7 @@ export let extensionContext: vscode.ExtensionContext; export let panel: vscode.StatusBarItem; export let posPanel: vscode.StatusBarItem; export let terminal: vscode.Terminal; +export let xmlContentProvider: XmlContentProvider; import TelemetryReporter from "vscode-extension-telemetry"; import { CodeActionProvider } from "./providers/CodeActionProvider"; @@ -214,13 +215,17 @@ export async function activate(context: vscode.ExtensionContext): Promise extensionContext = context; workspaceState.update("workspaceFolder", ""); - explorerProvider = new ObjectScriptExplorerProvider(); documentContentProvider = new DocumentContentProvider(); - const xmlContentProvider = new XmlContentProvider(); - context.workspaceState.update("xmlContentProvider", xmlContentProvider); + xmlContentProvider = new XmlContentProvider(); fileSystemProvider = new FileSystemProvider(); - vscode.window.registerTreeDataProvider("ObjectScriptExplorer", explorerProvider); + explorerProvider = new ObjectScriptExplorerProvider(); + // vscode.window.registerTreeDataProvider("ObjectScriptExplorer", explorerProvider); + vscode.window.createTreeView("ObjectScriptExplorer", { + treeDataProvider: explorerProvider, + showCollapseAll: true, + canSelectMany: true, + }); posPanel = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 0); posPanel.show(); @@ -366,7 +371,9 @@ export async function activate(context: vscode.ExtensionContext): Promise vscode.commands.registerCommand("vscode-objectscript.explorer.refresh", () => explorerProvider.refresh()), vscode.commands.registerCommand("vscode-objectscript.explorer.openClass", vscode.window.showTextDocument), vscode.commands.registerCommand("vscode-objectscript.explorer.openRoutine", vscode.window.showTextDocument), - vscode.commands.registerCommand("vscode-objectscript.explorer.export", exportExplorerItem), + vscode.commands.registerCommand("vscode-objectscript.explorer.export", (item, items) => + exportExplorerItem(items && items.length ? items : [item]) + ), vscode.commands.registerCommand("vscode-objectscript.explorer.delete", deleteItem), vscode.commands.registerCommand("vscode-objectscript.explorer.compile", compileExplorerItem), vscode.commands.registerCommand("vscode-objectscript.explorer.showGenerated", (workspaceNode: WorkspaceNode) => { diff --git a/src/languageConfiguration.ts b/src/languageConfiguration.ts index f990c8b9..d7f5166a 100644 --- a/src/languageConfiguration.ts +++ b/src/languageConfiguration.ts @@ -5,7 +5,10 @@ export const WORD_PATTERN = /((?<=(class|extends|as|of) )(%?\b[a-z0-9]+(\.[a-z0- export function getLanguageConfiguration(lang: string): LanguageConfiguration { return { wordPattern: WORD_PATTERN, - brackets: [["{", "}"], ["(", ")"], ['"', '"']], + brackets: [ + ["{", "}"], + ["(", ")"], + ], comments: { lineComment: lang === "class" ? "//" : "#;", blockComment: ["/*", "*/"],