Skip to content

Commit 64091b5

Browse files
authored
Merge pull request #136 from IBM/feature/static_language_provider
Refactor language provider to static implementation
2 parents d447a91 + 666db50 commit 64091b5

File tree

8 files changed

+390
-406
lines changed

8 files changed

+390
-406
lines changed

cli/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cli/src/targets/index.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ export interface FileOptions {
6868
*/
6969

7070
export class Targets {
71-
private languageProvider: TargetsLanguageProvider;
71+
static LanguageProvider: TargetsLanguageProvider = new TargetsLanguageProvider();
7272

7373
/* pathCache and resolvedSearches are used for file resolving. */
7474
private pathCache: { [path: string]: true | string[] } | undefined;
@@ -89,15 +89,14 @@ export class Targets {
8989

9090
constructor(private cwd: string, private fs: ReadFileSystem) {
9191
this.logger = new Logger();
92-
this.languageProvider = new TargetsLanguageProvider(this);
9392
}
9493

9594
static get ignoredObjects() {
9695
return ignoredObjects;
9796
}
9897

9998
getSearchGlob(): string {
100-
return this.languageProvider.getGlob();
99+
return Targets.LanguageProvider.getGlob();
101100
}
102101

103102
public getCwd() {
@@ -143,7 +142,7 @@ export class Targets {
143142
}
144143

145144
private extCanBeProgram(ext: string): boolean {
146-
return [`MODULE`, `PGM`].includes(this.languageProvider.getObjectType(ext));
145+
return [`MODULE`, `PGM`].includes(Targets.LanguageProvider.getObjectType(ext));
147146
}
148147

149148
public async resolvePathToObject(localPath: string, newText?: string) {
@@ -335,7 +334,7 @@ export class Targets {
335334

336335
// TODO: move this to language provider
337336
getObjectType(relativePath: string, ext: string): ObjectType {
338-
const objType = this.languageProvider.getObjectType(ext);
337+
const objType = Targets.LanguageProvider.getObjectType(ext);
339338

340339
if (!objType) {
341340
this.logger.fileLog(relativePath, {
@@ -389,7 +388,7 @@ export class Targets {
389388
text: textMatch
390389
};
391390

392-
await this.languageProvider.handleLanguage(filePath, content, options);
391+
await Targets.LanguageProvider.handleLanguage(this, filePath, content, options);
393392
} catch (e) {
394393
this.logger.fileLog(relative, {
395394
message: `Failed to parse file.`,

cli/src/targets/languages.ts

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { FileOptions, ObjectType, Targets } from ".";
22
import { clExtensions, clleTargetCallback, clObjects } from "./languages/clle";
33
import { ddsExtension, ddsObjects, ddsTargetCallback } from "./languages/dds";
4-
import { rpgExtensions, rpgleTargetParser, rpgObjects } from "./languages/rpgle";
4+
import { rpgleExtensions, rpgleObjects, rpgleTargetCallback } from "./languages/rpgle";
55
import { sqlExtensions, sqlObjects, sqlTargetCallback } from "./languages/sql";
66
import { binderExtensions, binderObjects, binderTargetCallback } from "./languages/binder";
77
import { cmdExtensions, cmdObjects, cmdTargetCallback } from "./languages/cmd";
@@ -19,19 +19,14 @@ export class TargetsLanguageProvider {
1919
private languageTargets: LanguageGroup[] = [];
2020
private extensionMap: ExtensionMap = {};
2121

22-
constructor(private readonly targets: Targets) {
23-
const rpgleTargets = new rpgleTargetParser(this.targets);
24-
22+
constructor() {
2523
this.registerLanguage(clExtensions, clleTargetCallback, clObjects);
2624
this.registerLanguage(sqlExtensions, sqlTargetCallback, sqlObjects);
2725
this.registerLanguage(ddsExtension, ddsTargetCallback, ddsObjects);
2826
this.registerLanguage(binderExtensions, binderTargetCallback, binderObjects);
2927
this.registerLanguage(cmdExtensions, cmdTargetCallback, cmdObjects);
3028
this.registerLanguage(noSourceObjects, noSourceTargetCallback, noSourceTargetObjects);
31-
32-
this.registerLanguage(rpgExtensions, (tazrgets, relativePath, content, options) => {
33-
return rpgleTargets.rpgleTargetCallback(targets, relativePath, content, options);
34-
}, rpgObjects);
29+
this.registerLanguage(rpgleExtensions, rpgleTargetCallback, rpgleObjects);
3530
}
3631

3732
public getExtensions() {
@@ -43,16 +38,11 @@ export class TargetsLanguageProvider {
4338
return `**/*.{${allExtensions.join(`,`)},${allExtensions.map(e => e.toUpperCase()).join(`,`)}}`;
4439
}
4540

46-
public static getStandardGlob() {
47-
const allExtensions = [...clExtensions, ...sqlExtensions, ...ddsExtension, ...binderExtensions, ...cmdExtensions, ...rpgExtensions];
48-
return `**/*.{${allExtensions.join(`,`)},${allExtensions.map(e => e.toUpperCase()).join(`,`)}}`;
49-
}
50-
51-
public async handleLanguage(relativePath: string, content: string, options: FileOptions = {}) {
41+
public async handleLanguage(targets: Targets, relativePath: string, content: string, options: FileOptions = {}) {
5242
const ext = relativePath.split('.').pop()?.toLowerCase();
5343
const language = this.languageTargets.find(lang => lang.extensions.includes(ext));
5444
if (ext && language) {
55-
await language.callback(this.targets, relativePath, content, options);
45+
await language.callback(targets, relativePath, content, options);
5646
}
5747
}
5848

0 commit comments

Comments
 (0)