Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 78 additions & 22 deletions vs/client/src/api.ts
Original file line number Diff line number Diff line change
@@ -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);
}
})
);
}
}
28 changes: 26 additions & 2 deletions vs/client/src/languageClientManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,14 @@ export class LanguageClientManager {
}
}

public static async resolvePathToObject(workspaceFolder: WorkspaceFolder, localPath: string): Promise<ILEObject | undefined> {
if (LanguageClientManager.client) {
return await LanguageClientManager.client.sendRequest<ILEObject | undefined>(`resolvePathToObject`, [workspaceFolder.uri.toString(), localPath]);
} else {
return undefined;
}
}

public static async getDeps(workspaceFolder: WorkspaceFolder, ileObject: ILEObject): Promise<ILEObject[]> {
if (LanguageClientManager.client) {
return await LanguageClientManager.client.sendRequest<ILEObject[]>(`getDeps`, [workspaceFolder.uri.toString(), ileObject]);
Expand All @@ -86,14 +94,30 @@ export class LanguageClientManager {
}
}

public static async getImpacts(workspaceFolder: WorkspaceFolder, fileUris: Uri[]): Promise<ImpactedObject[]> {
public static async getImpactsToUris(workspaceFolder: WorkspaceFolder, fileUris: Uri[]): Promise<ImpactedObject[]> {
if (LanguageClientManager.client) {
return await LanguageClientManager.client.sendRequest<ImpactedObject[]>(`getImpactsToUris`, [workspaceFolder.uri.toString(), fileUris.map(uri => uri.toString())]);
} else {
return [];
}
}

public static async getImpactsToObjects(workspaceFolder: WorkspaceFolder, ileObjects: ILEObject[]): Promise<ImpactedObject[]> {
if (LanguageClientManager.client) {
return await LanguageClientManager.client.sendRequest<ImpactedObject[]>(`getImpacts`, [workspaceFolder.uri.toString(), fileUris.map(uri => uri.toString())]);
return await LanguageClientManager.client.sendRequest<ImpactedObject[]>(`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()]);
Expand Down
34 changes: 33 additions & 1 deletion vs/server/src/requests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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 = {};

Expand Down
Loading