diff --git a/cli/package-lock.json b/cli/package-lock.json index aca7275..1cfffe4 100644 --- a/cli/package-lock.json +++ b/cli/package-lock.json @@ -1,12 +1,12 @@ { "name": "@ibm/sourceorbit", - "version": "1.1.1", + "version": "1.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@ibm/sourceorbit", - "version": "1.1.1", + "version": "1.2.0", "license": "Apache 2", "dependencies": { "@modelcontextprotocol/sdk": "^1.12.1", diff --git a/cli/src/index.ts b/cli/src/index.ts index bb63507..e0a22f7 100644 --- a/cli/src/index.ts +++ b/cli/src/index.ts @@ -297,6 +297,7 @@ async function listDeps(cwd: string, targets: Targets, query: string) { } export { Targets } from './targets'; +export { TargetsLanguageProvider } from './targets/languages'; export { MakeProject } from './builders/make'; export { BobProject } from "./builders/bob"; export { ImpactMarkdown } from "./builders/imd" diff --git a/cli/src/targets/languages.ts b/cli/src/targets/languages.ts index 63014f2..f10d6b8 100644 --- a/cli/src/targets/languages.ts +++ b/cli/src/targets/languages.ts @@ -43,6 +43,11 @@ export class TargetsLanguageProvider { return `**/*.{${allExtensions.join(`,`)},${allExtensions.map(e => e.toUpperCase()).join(`,`)}}`; } + public static getStandardGlob() { + const allExtensions = [...clExtensions, ...sqlExtensions, ...ddsExtension, ...binderExtensions, ...cmdExtensions, ...rpgExtensions]; + return `**/*.{${allExtensions.join(`,`)},${allExtensions.map(e => e.toUpperCase()).join(`,`)}}`; + } + public async handleLanguage(relativePath: string, content: string, options: FileOptions = {}) { const ext = relativePath.split('.').pop()?.toLowerCase(); const language = this.languageTargets.find(lang => lang.extensions.includes(ext)); diff --git a/vs/client/package-lock.json b/vs/client/package-lock.json index 7d542f8..6cbe936 100644 --- a/vs/client/package-lock.json +++ b/vs/client/package-lock.json @@ -24,7 +24,7 @@ }, "../../cli": { "name": "@ibm/sourceorbit", - "version": "1.1.1", + "version": "1.2.0", "dev": true, "license": "Apache 2", "dependencies": { diff --git a/vs/package-lock.json b/vs/package-lock.json index 6ec58a0..fec1e7c 100644 --- a/vs/package-lock.json +++ b/vs/package-lock.json @@ -1,12 +1,12 @@ { "name": "vscode-sourceorbit", - "version": "1.1.1", + "version": "1.2.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "vscode-sourceorbit", - "version": "1.1.1", + "version": "1.2.0", "hasInstallScript": true, "license": "MIT", "devDependencies": { diff --git a/vs/server/package-lock.json b/vs/server/package-lock.json index 9dae25c..b098550 100644 --- a/vs/server/package-lock.json +++ b/vs/server/package-lock.json @@ -24,7 +24,7 @@ }, "../../cli": { "name": "@ibm/sourceorbit", - "version": "1.1.1", + "version": "1.2.0", "license": "Apache 2", "dependencies": { "@modelcontextprotocol/sdk": "^1.12.1", diff --git a/vs/server/src/TargetsManager.ts b/vs/server/src/TargetsManager.ts index f30c629..e0ee567 100644 --- a/vs/server/src/TargetsManager.ts +++ b/vs/server/src/TargetsManager.ts @@ -1,6 +1,6 @@ /* eslint-disable no-case-declarations */ -import { Targets, allExtensions } from "@ibm/sourceorbit"; +import { Targets } from "@ibm/sourceorbit"; import { ILEObject } from "@ibm/sourceorbit/dist/src/targets"; import { URI } from 'vscode-uri'; @@ -8,8 +8,6 @@ import { ReadFileSystem } from './readFileSystem'; import path = require("path"); -export const SupportedGlob = `**/*.{${allExtensions.join(`,`)}}`; - export class TargetsManager { private static projects: { [workspacePath: string]: Targets | undefined } = {}; @@ -45,11 +43,12 @@ export class TargetsManager { const url = uri.fsPath; const rfs = new ReadFileSystem(); - const files = await rfs.getFiles(url, SupportedGlob); const targets = new Targets(url, rfs); - targets.loadObjectsFromPaths(files); + const files = await rfs.getFiles(url, targets.getSearchGlob()); + + await targets.loadObjectsFromPaths(files); await Promise.allSettled(files.map(f => targets.parseFile(f))); @@ -75,14 +74,12 @@ export class TargetsManager { if (pathDetail.ext.length > 1) { const ext = pathDetail.ext.substring(1).toLowerCase(); - if (allExtensions.includes(ext)) { - const targets = this.getTargetsForFile(uriString); + const targets = this.getTargetsForFile(uriString); - if (targets) { - return targets.parseFile(uri.fsPath); + if (targets) { + return targets.parseFile(uri.fsPath); - // TODO: think about re-resolving later if changing a module? - } + // TODO: think about re-resolving later if changing a module? } } } @@ -95,24 +92,22 @@ export class TargetsManager { if (pathDetail.ext.length > 1) { const ext = pathDetail.ext.substring(1); - if (allExtensions.includes(ext)) { - const targets = this.getTargetsForFile(uriString); + const targets = this.getTargetsForFile(uriString); - if (targets) { - const impacted = targets.removeObjectByPath(uri.fsPath); + if (targets) { + const impacted = targets.removeObjectByPath(uri.fsPath); - if (impacted.length > 0) { - const cwd = this.getWorkspaceFolder(uri.fsPath); + if (impacted.length > 0) { + const cwd = this.getWorkspaceFolder(uri.fsPath); - if (cwd) { - const impactedSources = impacted - .filter(obj => obj.relativePath) - .map(obj => path.join(cwd, obj.relativePath!)); + if (cwd) { + const impactedSources = impacted + .filter(obj => obj.relativePath) + .map(obj => path.join(cwd, obj.relativePath!)); - console.log(`Impacted sources: ${impactedSources.join(`, `)}`); + console.log(`Impacted sources: ${impactedSources.join(`, `)}`); - return Promise.allSettled(impactedSources.map(sourcePath => targets.parseFile(sourcePath))); - } + return Promise.allSettled(impactedSources.map(sourcePath => targets.parseFile(sourcePath))); } } } diff --git a/vs/server/src/server.ts b/vs/server/src/server.ts index db2a540..911268b 100644 --- a/vs/server/src/server.ts +++ b/vs/server/src/server.ts @@ -1,18 +1,13 @@ +import { TargetsLanguageProvider } from '@ibm/sourceorbit'; import { createConnection, - Diagnostic, - DiagnosticSeverity, - ProposedFeatures, InitializeParams, - TextDocumentSyncKind, InitializeResult, - WorkspaceFolder, - Range, - Position + ProposedFeatures, + TextDocumentSyncKind } from 'vscode-languageserver/node'; -import { SupportedGlob, TargetsManager } from './TargetsManager'; -import { setupRequestHandler } from './requests'; import { setupFsListener } from './fileSystemListener'; +import { setupRequestHandler } from './requests'; // Create a connection for the server, using Node's IPC as a transport. // Also include all preview / proposed LSP features. @@ -37,9 +32,9 @@ connection.onInitialize((params: InitializeParams) => { if (hasWorkspaceFolderCapability) { result.capabilities.workspace = { fileOperations: { - didCreate: { filters: [{ pattern: { glob: SupportedGlob, options: { ignoreCase: true } } }] }, - didRename: { filters: [{ pattern: { glob: SupportedGlob, options: { ignoreCase: true } } }] }, - didDelete: { filters: [{ pattern: { glob: SupportedGlob, options: { ignoreCase: true } } }] } + didCreate: { filters: [{ pattern: { glob: TargetsLanguageProvider.getStandardGlob(), options: { ignoreCase: true } } }] }, + didRename: { filters: [{ pattern: { glob: TargetsLanguageProvider.getStandardGlob(), options: { ignoreCase: true } } }] }, + didDelete: { filters: [{ pattern: { glob: TargetsLanguageProvider.getStandardGlob(), options: { ignoreCase: true } } }] } }, workspaceFolders: { supported: true, diff --git a/vs/server/src/setup.ts b/vs/server/src/setup.ts index 9a8c4c1..2810ff2 100644 --- a/vs/server/src/setup.ts +++ b/vs/server/src/setup.ts @@ -6,15 +6,16 @@ import path from 'path'; import { URI } from 'vscode-uri'; import { ReadFileSystem } from './readFileSystem'; import { connection } from './server'; -import { SupportedGlob, TargetsManager } from './TargetsManager'; +import { TargetsManager } from './TargetsManager'; export async function initAndRefresh(workspaceUri: string) { const progress = await connection.window.createWorkDoneProgress(); - progress.begin(`Source Orbit`, undefined, `Initializing..`); + progress.begin(`Source Orbit`, undefined, `Indexing..`); + console.log(`Indexing started`); try { await TargetsManager.refreshProject(workspaceUri); - progress.report(`Initialized`); + progress.report(`Indexed successfully`); } catch (e) { progress.report(`Failed to initialize`); @@ -89,13 +90,15 @@ export async function fixProject(workspaceUri: string, suggestions: TargetSugges progress.begin(`Source Orbit`, undefined, `Fetching files..`); const rfs = new ReadFileSystem(); - const files = await rfs.getFiles(url, SupportedGlob); const targets = new Targets(url, rfs); + + const files = await rfs.getFiles(url, targets.getSearchGlob()); + targets.setSuggestions(suggestions); progress.report(`Loading files..`); - targets.loadObjectsFromPaths(files); + await targets.loadObjectsFromPaths(files); progress.report(`Processing files..`); await Promise.allSettled(files.map(f => targets.parseFile(f)));