@@ -6,6 +6,10 @@ import { AtelierAPI } from "../api";
66import { config , documentContentProvider , FILESYSTEM_SCHEMA , fileSystemProvider } from "../extension" ;
77import { DocumentContentProvider } from "../providers/DocumentContentProvider" ;
88import { currentFile , CurrentFile , outputChannel } from "../utils" ;
9+ import { RootNode } from "../explorer/models/rootNode" ;
10+ import { PackageNode } from "../explorer/models/packageNode" ;
11+ import { ClassNode } from "../explorer/models/classesNode" ;
12+ import { RoutineNode } from "../explorer/models/routineNode" ;
913
1014async function compileFlags ( ) : Promise < string > {
1115 const defaultFlags = config ( ) . compileFlags ;
@@ -169,3 +173,22 @@ export async function importFolder(uri: vscode.Uri): Promise<any> {
169173 ( error , files ) => importFiles ( files . map ( name => path . join ( folder , name ) ) )
170174 ) ;
171175}
176+
177+ export async function compileExplorerItem ( node : RootNode | PackageNode | ClassNode | RoutineNode ) : Promise < any > {
178+ const { workspaceFolder, namespace } = node ;
179+ const flags = config ( ) . compileFlags ;
180+ const api = new AtelierAPI ( workspaceFolder ) ;
181+ api . setNamespace ( namespace ) ;
182+ let docs = [ node . fullName ] ;
183+ if ( node instanceof PackageNode ) {
184+ switch ( node . category ) {
185+ case "RTN" :
186+ docs = [ node . fullName + ".*.mac" ] ;
187+ break ;
188+ case "CLS" :
189+ docs = [ node . fullName + ".*.cls" ] ;
190+ break ;
191+ }
192+ }
193+ return api . actionCompile ( docs , flags ) ;
194+ }
0 commit comments