diff --git a/vs/client/src/api.ts b/vs/client/src/api.ts index 7e3af0e..081bdbc 100644 --- a/vs/client/src/api.ts +++ b/vs/client/src/api.ts @@ -1,23 +1,79 @@ -import { commands, ExtensionContext, WorkspaceFolder } from 'vscode'; -import { LanguageClientManager } from './languageClientManager'; - -/** - * These commands are to be used by other extensions. - */ -export namespace SourceOrbitApi { - export function registerCommands(context: ExtensionContext) { - context.subscriptions.push( - commands.registerCommand(`vscode-sourceorbit.autoFix`, (workspaceFolder: WorkspaceFolder, type: "includes" | "renames") => { - if (workspaceFolder && type) { - return LanguageClientManager.fixProject(workspaceFolder, type); - } - }), - - commands.registerCommand(`vscode-sourceorbit.generateBuildFile`, async (workspaceFolder: WorkspaceFolder, type: string) => { - if (workspaceFolder && type) { - await LanguageClientManager.generateBuildFile(workspaceFolder, type); - } - }) - ); - } +import { commands, ExtensionContext, Uri, WorkspaceFolder } from 'vscode'; +import { LanguageClientManager } from './languageClientManager'; +import { ILEObject } from '@ibm/sourceorbit/dist/src/targets'; + +/** + * These commands are to be used by other extensions. + */ +export namespace SourceOrbitApi { + export function registerCommands(context: ExtensionContext) { + context.subscriptions.push( + commands.registerCommand(`vscode-sourceorbit.isReady`, async (workspaceFolder: WorkspaceFolder) => { + if (workspaceFolder) { + return await LanguageClientManager.isReady(workspaceFolder); + } + return false; + }), + + commands.registerCommand(`vscode-sourceorbit.reloadProject`, async (workspaceFolder: WorkspaceFolder) => { + if (workspaceFolder) { + return await LanguageClientManager.reloadProject(workspaceFolder); + } + }), + + commands.registerCommand(`vscode-sourceorbit.resolvePathToObject`, async (workspaceFolder: WorkspaceFolder, localPath: string) => { + if (workspaceFolder && localPath) { + return await LanguageClientManager.resolvePathToObject(workspaceFolder, localPath); + } + return undefined; + }), + + commands.registerCommand(`vscode-sourceorbit.getResolvedObjects`, async (workspaceFolder: WorkspaceFolder) => { + if (workspaceFolder) { + return await LanguageClientManager.getResolvedObjects(workspaceFolder); + } + return []; + }), + + commands.registerCommand(`vscode-sourceorbit.getDeps`, async (workspaceFolder: WorkspaceFolder, ileObject: ILEObject) => { + if (workspaceFolder && ileObject) { + return await LanguageClientManager.getDeps(workspaceFolder, ileObject); + } + return []; + }), + + commands.registerCommand(`vscode-sourceorbit.getImpactsToUris`, async (workspaceFolder: WorkspaceFolder, fileUris: Uri[]) => { + if (workspaceFolder && fileUris) { + return await LanguageClientManager.getImpactsToUris(workspaceFolder, fileUris); + } + return []; + }), + + commands.registerCommand(`vscode-sourceorbit.getImpactsToObjects`, async (workspaceFolder: WorkspaceFolder, ileObjects: ILEObject[]) => { + if (workspaceFolder && ileObjects) { + return await LanguageClientManager.getImpactsToObjects(workspaceFolder, ileObjects); + } + return []; + }), + + commands.registerCommand(`vscode-sourceorbit.getExports`, async (workspaceFolder: WorkspaceFolder) => { + if (workspaceFolder) { + return await LanguageClientManager.getExports(workspaceFolder); + } + return {}; + }), + + commands.registerCommand(`vscode-sourceorbit.autoFix`, (workspaceFolder: WorkspaceFolder, type: "includes" | "renames") => { + if (workspaceFolder && type) { + return LanguageClientManager.fixProject(workspaceFolder, type); + } + }), + + commands.registerCommand(`vscode-sourceorbit.generateBuildFile`, async (workspaceFolder: WorkspaceFolder, type: string) => { + if (workspaceFolder && type) { + await LanguageClientManager.generateBuildFile(workspaceFolder, type); + } + }) + ); + } } \ No newline at end of file diff --git a/vs/client/src/languageClientManager.ts b/vs/client/src/languageClientManager.ts index 0df4210..5ca1220 100644 --- a/vs/client/src/languageClientManager.ts +++ b/vs/client/src/languageClientManager.ts @@ -78,6 +78,14 @@ export class LanguageClientManager { } } + public static async resolvePathToObject(workspaceFolder: WorkspaceFolder, localPath: string): Promise { + if (LanguageClientManager.client) { + return await LanguageClientManager.client.sendRequest(`resolvePathToObject`, [workspaceFolder.uri.toString(), localPath]); + } else { + return undefined; + } + } + public static async getDeps(workspaceFolder: WorkspaceFolder, ileObject: ILEObject): Promise { if (LanguageClientManager.client) { return await LanguageClientManager.client.sendRequest(`getDeps`, [workspaceFolder.uri.toString(), ileObject]); @@ -86,14 +94,30 @@ export class LanguageClientManager { } } - public static async getImpacts(workspaceFolder: WorkspaceFolder, fileUris: Uri[]): Promise { + public static async getImpactsToUris(workspaceFolder: WorkspaceFolder, fileUris: Uri[]): Promise { + if (LanguageClientManager.client) { + return await LanguageClientManager.client.sendRequest(`getImpactsToUris`, [workspaceFolder.uri.toString(), fileUris.map(uri => uri.toString())]); + } else { + return []; + } + } + + public static async getImpactsToObjects(workspaceFolder: WorkspaceFolder, ileObjects: ILEObject[]): Promise { if (LanguageClientManager.client) { - return await LanguageClientManager.client.sendRequest(`getImpacts`, [workspaceFolder.uri.toString(), fileUris.map(uri => uri.toString())]); + return await LanguageClientManager.client.sendRequest(`getImpactsToObjects`, [workspaceFolder.uri.toString(), ileObjects]); } else { return []; } } + public static async getExports(workspaceFolder: WorkspaceFolder): Promise<{ [key: string]: ILEObject }> { + if (LanguageClientManager.client) { + return await LanguageClientManager.client.sendRequest<{ [key: string]: ILEObject }>(`getExports`, [workspaceFolder.uri.toString()]); + } else { + return {}; + } + } + public static reloadProject(workspaceFolder: WorkspaceFolder) { if (LanguageClientManager.client) { return LanguageClientManager.client.sendRequest(`reloadProject`, [workspaceFolder.uri.toString()]); diff --git a/vs/server/src/requests.ts b/vs/server/src/requests.ts index 68b3f09..08b19d6 100644 --- a/vs/server/src/requests.ts +++ b/vs/server/src/requests.ts @@ -18,7 +18,7 @@ export function setupRequestHandler(connection: Connection) { return TargetsManager.getDepsForTarget(params[0], params[1]); }); - connection.onRequest(`getImpacts`, async (params: [string, string[]]) => { + connection.onRequest(`getImpactsToUris`, async (params: [string, string[]]) => { const target = TargetsManager.getTargetsForWorkspaceUri(params[0]); if (target) { @@ -34,10 +34,42 @@ export function setupRequestHandler(connection: Connection) { return []; }); + connection.onRequest(`getImpactsToObjects`, async (params: [string, ILEObject[]]) => { + const target = TargetsManager.getTargetsForWorkspaceUri(params[0]); + + if (target) { + const ileObjects = params[1]; + + return ileObjects.map(ileObject => target.getImpactFor(ileObject)); + } + + return []; + }); + connection.onRequest(`reloadProject`, (params: [string]) => { return initAndRefresh(params[0]); }); + connection.onRequest(`resolvePathToObject`, async (params: [string, string]) => { + const target = TargetsManager.getTargetsForWorkspaceUri(params[0]); + + if (target) { + return await target.resolvePathToObject(params[1]); + } + + return undefined; + }); + + connection.onRequest(`getExports`, async (params: [string]) => { + const target = TargetsManager.getTargetsForWorkspaceUri(params[0]); + + if (target) { + return target.getExports(); + } + + return {}; + }); + connection.onRequest(`fixProject`, (params: [string, keyof TargetSuggestions]) => { const suggestions: TargetSuggestions = {};