kopytko-linter 0.1.4 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/kopytko-lint.js +2 -2
- package/dist/bin/kopytko-lint.js.map +1 -1
- package/dist/src/analysis/importParser.d.ts +4 -1
- package/dist/src/analysis/importParser.d.ts.map +1 -1
- package/dist/src/analysis/importParser.js +12 -0
- package/dist/src/analysis/importParser.js.map +1 -1
- package/dist/src/analysis/xmlParser.d.ts +42 -0
- package/dist/src/analysis/xmlParser.d.ts.map +1 -0
- package/dist/src/analysis/xmlParser.js +220 -0
- package/dist/src/analysis/xmlParser.js.map +1 -0
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/linter.d.ts +5 -1
- package/dist/src/linter.d.ts.map +1 -1
- package/dist/src/linter.js +388 -48
- package/dist/src/linter.js.map +1 -1
- package/package.json +1 -1
package/dist/bin/kopytko-lint.js
CHANGED
|
@@ -89,14 +89,14 @@ function printVersion() {
|
|
|
89
89
|
console.log('kopytko-lint (development)');
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
|
-
function main() {
|
|
92
|
+
async function main() {
|
|
93
93
|
const options = parseArgs(process.argv);
|
|
94
94
|
const projectRoot = process.cwd();
|
|
95
95
|
const config = (0, config_1.resolveConfig)(projectRoot, options.configPath);
|
|
96
96
|
if (options.sourceDir) {
|
|
97
97
|
config.sourceDir = options.sourceDir;
|
|
98
98
|
}
|
|
99
|
-
const result = (0, linter_1.
|
|
99
|
+
const result = await (0, linter_1.lintProjectAsync)(projectRoot, config);
|
|
100
100
|
// Output
|
|
101
101
|
switch (options.format) {
|
|
102
102
|
case 'json':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kopytko-lint.js","sourceRoot":"","sources":["../../bin/kopytko-lint.ts"],"names":[],"mappings":";;;AAGA,
|
|
1
|
+
{"version":3,"file":"kopytko-lint.js","sourceRoot":"","sources":["../../bin/kopytko-lint.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,8 +9,11 @@ export declare class ImportResolver {
|
|
|
9
9
|
private readonly options;
|
|
10
10
|
private readonly existsCache;
|
|
11
11
|
private readonly resolveCache;
|
|
12
|
+
private readonly knownFilePaths;
|
|
12
13
|
constructor(options: ImportResolverOptions);
|
|
13
|
-
|
|
14
|
+
/** Pre-seed with paths known to exist (from filesystem walk). */
|
|
15
|
+
registerKnownPaths(paths: Iterable<string>): void;
|
|
16
|
+
cachedExists(filePath: string): boolean;
|
|
14
17
|
getWorkspaceFolders(): string[];
|
|
15
18
|
getSourceDir(): string;
|
|
16
19
|
parseImports(text: string): KopytkoImport[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"importParser.d.ts","sourceRoot":"","sources":["../../../src/analysis/importParser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAK9C,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAkB1D;AAED,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;IAC1D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyC;
|
|
1
|
+
{"version":3,"file":"importParser.d.ts","sourceRoot":"","sources":["../../../src/analysis/importParser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAK9C,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAkB1D;AAED,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;IAC1D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyC;IACtE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;gBAExC,OAAO,EAAE,qBAAqB;IAI1C,iEAAiE;IACjE,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI;IAQjD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAYvC,mBAAmB,IAAI,MAAM,EAAE;IAI/B,YAAY,IAAI,MAAM;IAItB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE;IAI3C,iBAAiB,CAAC,GAAG,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAe/E,YAAY,CAAC,GAAG,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;IAI/D,OAAO,CAAC,qBAAqB;IAwB7B,OAAO,CAAC,qBAAqB;CAwB9B"}
|
|
@@ -62,11 +62,23 @@ class ImportResolver {
|
|
|
62
62
|
options;
|
|
63
63
|
existsCache = new Map();
|
|
64
64
|
resolveCache = new Map();
|
|
65
|
+
knownFilePaths = new Set();
|
|
65
66
|
constructor(options) {
|
|
66
67
|
this.options = options;
|
|
67
68
|
}
|
|
69
|
+
/** Pre-seed with paths known to exist (from filesystem walk). */
|
|
70
|
+
registerKnownPaths(paths) {
|
|
71
|
+
for (const p of paths) {
|
|
72
|
+
const normalized = nodePath.normalize(p);
|
|
73
|
+
this.knownFilePaths.add(normalized);
|
|
74
|
+
this.existsCache.set(normalized, true);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
68
77
|
cachedExists(filePath) {
|
|
69
78
|
const normalized = nodePath.normalize(filePath);
|
|
79
|
+
// Fast path: check in-memory set of known files first
|
|
80
|
+
if (this.knownFilePaths.has(normalized))
|
|
81
|
+
return true;
|
|
70
82
|
let result = this.existsCache.get(normalized);
|
|
71
83
|
if (result === undefined) {
|
|
72
84
|
result = fsWrapper_1.default.existsSync(filePath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"importParser.js","sourceRoot":"","sources":["../../../src/analysis/importParser.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,oCAkBC;AAxBD,+CAAiC;AAEjC,4DAAoC;AAEpC,MAAM,cAAc,GAAG,wDAAwD,CAAC;AAEhF,SAAgB,YAAY,CAAC,IAAY;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,OAAO,GAAoB,EAAE,CAAC;IAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,OAAO,CAAC,IAAI,CAAC;YACX,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YACb,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;YACpB,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS;YACjC,IAAI,EAAE,CAAC,GAAG,CAAC;YACX,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAQD,MAAa,cAAc;IACR,OAAO,CAAwB;IAC/B,WAAW,GAAG,IAAI,GAAG,EAAmB,CAAC;IACzC,YAAY,GAAG,IAAI,GAAG,EAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"importParser.js","sourceRoot":"","sources":["../../../src/analysis/importParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns raw URI strings from all <script> tags in an XML text.
|
|
3
|
+
*/
|
|
4
|
+
export declare function parseXmlScriptUris(xmlText: string): string[];
|
|
5
|
+
/**
|
|
6
|
+
* Resolves a script URI from an XML file to an absolute filesystem path.
|
|
7
|
+
* Supports `pkg:/path/file.brs` and relative paths.
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolveScriptUri(uri: string, xmlDir: string, workspaceFolders: string[], sourceDir: string, cachedExists?: (path: string) => boolean): string | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* Returns absolute paths for all BrightScript files listed in an XML's <script> tags.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getScriptPathsFromXml(xmlPath: string, xmlText: string, workspaceFolders: string[], sourceDir: string, cachedExists?: (path: string) => boolean): string[];
|
|
14
|
+
/**
|
|
15
|
+
* Returns the `extends` attribute value from a <component> tag, or null.
|
|
16
|
+
*/
|
|
17
|
+
export declare function parseXmlExtends(xmlText: string): string | null;
|
|
18
|
+
/**
|
|
19
|
+
* Returns the `name` attribute value from a <component> tag, or null.
|
|
20
|
+
*/
|
|
21
|
+
export declare function parseXmlComponentName(xmlText: string): string | null;
|
|
22
|
+
export interface XmlInterfaceField {
|
|
23
|
+
name: string;
|
|
24
|
+
type: string;
|
|
25
|
+
}
|
|
26
|
+
export interface XmlInterfaceFunction {
|
|
27
|
+
name: string;
|
|
28
|
+
}
|
|
29
|
+
export interface ParsedXmlInterface {
|
|
30
|
+
fields: XmlInterfaceField[];
|
|
31
|
+
functions: XmlInterfaceFunction[];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Parses the <interface> section of a SceneGraph XML file.
|
|
35
|
+
*/
|
|
36
|
+
export declare function parseXmlInterface(xmlText: string): ParsedXmlInterface;
|
|
37
|
+
/**
|
|
38
|
+
* Finds a component's XML file by name across multiple search roots.
|
|
39
|
+
* Tries exact filename match first, then searches by <component name="..."> attribute.
|
|
40
|
+
*/
|
|
41
|
+
export declare function findComponentXml(componentName: string, searchRoots: string[], maxDepth?: number): string | undefined;
|
|
42
|
+
//# sourceMappingURL=xmlParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xmlParser.d.ts","sourceRoot":"","sources":["../../../src/analysis/xmlParser.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAQ5D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,EAAE,EAC1B,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GACvC,MAAM,GAAG,SAAS,CAepB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,EAAE,EAC1B,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GACvC,MAAM,EAAE,CAKV;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG9D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGpE;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,SAAS,EAAE,oBAAoB,EAAE,CAAC;CACnC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,CA2BrE;AA2DD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EAAE,EACrB,QAAQ,SAAI,GACX,MAAM,GAAG,SAAS,CAYpB"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.parseXmlScriptUris = parseXmlScriptUris;
|
|
40
|
+
exports.resolveScriptUri = resolveScriptUri;
|
|
41
|
+
exports.getScriptPathsFromXml = getScriptPathsFromXml;
|
|
42
|
+
exports.parseXmlExtends = parseXmlExtends;
|
|
43
|
+
exports.parseXmlComponentName = parseXmlComponentName;
|
|
44
|
+
exports.parseXmlInterface = parseXmlInterface;
|
|
45
|
+
exports.findComponentXml = findComponentXml;
|
|
46
|
+
const nodePath = __importStar(require("path"));
|
|
47
|
+
const fsWrapper_1 = __importDefault(require("./fsWrapper"));
|
|
48
|
+
/**
|
|
49
|
+
* Returns raw URI strings from all <script> tags in an XML text.
|
|
50
|
+
*/
|
|
51
|
+
function parseXmlScriptUris(xmlText) {
|
|
52
|
+
const uris = [];
|
|
53
|
+
const pattern = /<script\b[^>]*\buri\s*=\s*"([^"]+)"[^>]*>/gi;
|
|
54
|
+
let match;
|
|
55
|
+
while ((match = pattern.exec(xmlText)) !== null) {
|
|
56
|
+
uris.push(match[1]);
|
|
57
|
+
}
|
|
58
|
+
return uris;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Resolves a script URI from an XML file to an absolute filesystem path.
|
|
62
|
+
* Supports `pkg:/path/file.brs` and relative paths.
|
|
63
|
+
*/
|
|
64
|
+
function resolveScriptUri(uri, xmlDir, workspaceFolders, sourceDir, cachedExists) {
|
|
65
|
+
const exists = cachedExists ?? fsWrapper_1.default.existsSync;
|
|
66
|
+
if (uri.startsWith('pkg:/')) {
|
|
67
|
+
const rel = uri.slice(5);
|
|
68
|
+
for (const ws of workspaceFolders) {
|
|
69
|
+
const candidate = nodePath.join(ws, sourceDir, rel);
|
|
70
|
+
if (exists(candidate))
|
|
71
|
+
return candidate;
|
|
72
|
+
const candidateRoot = nodePath.join(ws, rel);
|
|
73
|
+
if (exists(candidateRoot))
|
|
74
|
+
return candidateRoot;
|
|
75
|
+
}
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
const candidate = nodePath.join(xmlDir, uri);
|
|
79
|
+
return exists(candidate) ? candidate : undefined;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Returns absolute paths for all BrightScript files listed in an XML's <script> tags.
|
|
83
|
+
*/
|
|
84
|
+
function getScriptPathsFromXml(xmlPath, xmlText, workspaceFolders, sourceDir, cachedExists) {
|
|
85
|
+
const xmlDir = nodePath.dirname(xmlPath);
|
|
86
|
+
return parseXmlScriptUris(xmlText)
|
|
87
|
+
.map((uri) => resolveScriptUri(uri, xmlDir, workspaceFolders, sourceDir, cachedExists))
|
|
88
|
+
.filter((p) => p !== undefined);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Returns the `extends` attribute value from a <component> tag, or null.
|
|
92
|
+
*/
|
|
93
|
+
function parseXmlExtends(xmlText) {
|
|
94
|
+
const match = /<component\b[^>]*\bextends\s*=\s*["']([^"']+)["']/i.exec(xmlText);
|
|
95
|
+
return match ? match[1] : null;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Returns the `name` attribute value from a <component> tag, or null.
|
|
99
|
+
*/
|
|
100
|
+
function parseXmlComponentName(xmlText) {
|
|
101
|
+
const match = /<component\b[^>]*\bname\s*=\s*["']([^"']+)["']/i.exec(xmlText);
|
|
102
|
+
return match ? match[1] : null;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Parses the <interface> section of a SceneGraph XML file.
|
|
106
|
+
*/
|
|
107
|
+
function parseXmlInterface(xmlText) {
|
|
108
|
+
const fields = [];
|
|
109
|
+
const functions = [];
|
|
110
|
+
const ifaceMatch = /<interface\b[^>]*>([\s\S]*?)<\/interface>/i.exec(xmlText);
|
|
111
|
+
if (!ifaceMatch)
|
|
112
|
+
return { fields, functions };
|
|
113
|
+
const ifaceText = ifaceMatch[1];
|
|
114
|
+
const fieldRe = /<field\b([^>]*)>/gi;
|
|
115
|
+
let m;
|
|
116
|
+
while ((m = fieldRe.exec(ifaceText)) !== null) {
|
|
117
|
+
const attrs = m[1];
|
|
118
|
+
const idMatch = /\bid\s*=\s*["']([^"']+)["']/i.exec(attrs);
|
|
119
|
+
const typeMatch = /\btype\s*=\s*["']([^"']+)["']/i.exec(attrs);
|
|
120
|
+
if (idMatch) {
|
|
121
|
+
fields.push({ name: idMatch[1], type: typeMatch ? typeMatch[1] : 'dynamic' });
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const funcRe = /<function\b([^>]*)>/gi;
|
|
125
|
+
while ((m = funcRe.exec(ifaceText)) !== null) {
|
|
126
|
+
const attrs = m[1];
|
|
127
|
+
const nameMatch = /\bname\s*=\s*["']([^"']+)["']/i.exec(attrs);
|
|
128
|
+
if (nameMatch)
|
|
129
|
+
functions.push({ name: nameMatch[1] });
|
|
130
|
+
}
|
|
131
|
+
return { fields, functions };
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Searches directories recursively for a file by name.
|
|
135
|
+
*/
|
|
136
|
+
function findFileInTree(dir, filename, depth) {
|
|
137
|
+
if (depth < 0)
|
|
138
|
+
return undefined;
|
|
139
|
+
let entries;
|
|
140
|
+
try {
|
|
141
|
+
entries = fsWrapper_1.default.readdirTyped(dir);
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return undefined;
|
|
145
|
+
}
|
|
146
|
+
for (const entry of entries) {
|
|
147
|
+
if (!entry.isDirectory && entry.name === filename) {
|
|
148
|
+
return nodePath.join(dir, entry.name);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
for (const entry of entries) {
|
|
152
|
+
if (!entry.isDirectory)
|
|
153
|
+
continue;
|
|
154
|
+
if (entry.name.startsWith('.') || entry.name === 'node_modules')
|
|
155
|
+
continue;
|
|
156
|
+
const found = findFileInTree(nodePath.join(dir, entry.name), filename, depth - 1);
|
|
157
|
+
if (found)
|
|
158
|
+
return found;
|
|
159
|
+
}
|
|
160
|
+
return undefined;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Searches directories for an XML file whose <component name="..."> matches.
|
|
164
|
+
*/
|
|
165
|
+
function findXmlByComponentName(dir, nameLower, depth) {
|
|
166
|
+
if (depth < 0)
|
|
167
|
+
return undefined;
|
|
168
|
+
let entries;
|
|
169
|
+
try {
|
|
170
|
+
entries = fsWrapper_1.default.readdirTyped(dir);
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
return undefined;
|
|
174
|
+
}
|
|
175
|
+
for (const entry of entries) {
|
|
176
|
+
if (entry.isDirectory)
|
|
177
|
+
continue;
|
|
178
|
+
if (!entry.name.endsWith('.xml'))
|
|
179
|
+
continue;
|
|
180
|
+
const xmlPath = nodePath.join(dir, entry.name);
|
|
181
|
+
try {
|
|
182
|
+
const text = fsWrapper_1.default.readFileSync(xmlPath, 'utf-8');
|
|
183
|
+
const nameMatch = /<component\b[^>]*\bname\s*=\s*"([^"]+)"/i.exec(text);
|
|
184
|
+
if (nameMatch && nameMatch[1].toLowerCase() === nameLower) {
|
|
185
|
+
return xmlPath;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
catch { /* skip */ }
|
|
189
|
+
}
|
|
190
|
+
for (const entry of entries) {
|
|
191
|
+
if (!entry.isDirectory)
|
|
192
|
+
continue;
|
|
193
|
+
if (entry.name.startsWith('.') || entry.name === 'node_modules')
|
|
194
|
+
continue;
|
|
195
|
+
const found = findXmlByComponentName(nodePath.join(dir, entry.name), nameLower, depth - 1);
|
|
196
|
+
if (found)
|
|
197
|
+
return found;
|
|
198
|
+
}
|
|
199
|
+
return undefined;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Finds a component's XML file by name across multiple search roots.
|
|
203
|
+
* Tries exact filename match first, then searches by <component name="..."> attribute.
|
|
204
|
+
*/
|
|
205
|
+
function findComponentXml(componentName, searchRoots, maxDepth = 8) {
|
|
206
|
+
const filename = `${componentName}.xml`;
|
|
207
|
+
for (const root of searchRoots) {
|
|
208
|
+
const found = findFileInTree(root, filename, maxDepth);
|
|
209
|
+
if (found)
|
|
210
|
+
return found;
|
|
211
|
+
}
|
|
212
|
+
const nameLower = componentName.toLowerCase();
|
|
213
|
+
for (const root of searchRoots) {
|
|
214
|
+
const found = findXmlByComponentName(root, nameLower, maxDepth);
|
|
215
|
+
if (found)
|
|
216
|
+
return found;
|
|
217
|
+
}
|
|
218
|
+
return undefined;
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=xmlParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xmlParser.js","sourceRoot":"","sources":["../../../src/analysis/xmlParser.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* const diagnostics = lintFile(filePath, content, context, config);
|
|
13
13
|
* ```
|
|
14
14
|
*/
|
|
15
|
-
export { lintFile, lintProject, createFileContext } from './linter';
|
|
15
|
+
export { lintFile, lintProject, lintProjectAsync, createFileContext } from './linter';
|
|
16
16
|
export { LinterConfig, DEFAULT_LINTER_CONFIG, DEFAULT_RULE_CONFIG, parseLinterConfig, resolveConfig } from './config';
|
|
17
17
|
export type { LintDiagnostic, LintResult, LintSeverity, GeneratedModuleConfig, KopytkoImport, FunctionDefinition, RuleContext, RuleConfig, RuleFn, RuleDefinition } from './types';
|
|
18
18
|
export type { LintContext } from './context';
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACtH,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAE,kBAAkB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACnL,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC3H,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -14,10 +14,11 @@
|
|
|
14
14
|
* ```
|
|
15
15
|
*/
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.escapeRegex = exports.stripStringLiterals = exports.findTestSiblings = exports.getTestBaseName = exports.isTestFile = exports.parseInnerMethodDefs = exports.parseFunctionDefs = exports.ImportResolver = exports.parseImports = exports.findComponent = exports.keywordNames = exports.builtinNames = exports.findBuiltin = exports.BRIGHTSCRIPT_KEYWORDS = exports.BRIGHTSCRIPT_BUILTINS = exports.formatSarif = exports.formatJson = exports.formatText = exports.resolveConfig = exports.parseLinterConfig = exports.DEFAULT_RULE_CONFIG = exports.DEFAULT_LINTER_CONFIG = exports.createFileContext = exports.lintProject = exports.lintFile = void 0;
|
|
17
|
+
exports.escapeRegex = exports.stripStringLiterals = exports.findTestSiblings = exports.getTestBaseName = exports.isTestFile = exports.parseInnerMethodDefs = exports.parseFunctionDefs = exports.ImportResolver = exports.parseImports = exports.findComponent = exports.keywordNames = exports.builtinNames = exports.findBuiltin = exports.BRIGHTSCRIPT_KEYWORDS = exports.BRIGHTSCRIPT_BUILTINS = exports.formatSarif = exports.formatJson = exports.formatText = exports.resolveConfig = exports.parseLinterConfig = exports.DEFAULT_RULE_CONFIG = exports.DEFAULT_LINTER_CONFIG = exports.createFileContext = exports.lintProjectAsync = exports.lintProject = exports.lintFile = void 0;
|
|
18
18
|
var linter_1 = require("./linter");
|
|
19
19
|
Object.defineProperty(exports, "lintFile", { enumerable: true, get: function () { return linter_1.lintFile; } });
|
|
20
20
|
Object.defineProperty(exports, "lintProject", { enumerable: true, get: function () { return linter_1.lintProject; } });
|
|
21
|
+
Object.defineProperty(exports, "lintProjectAsync", { enumerable: true, get: function () { return linter_1.lintProjectAsync; } });
|
|
21
22
|
Object.defineProperty(exports, "createFileContext", { enumerable: true, get: function () { return linter_1.createFileContext; } });
|
|
22
23
|
var config_1 = require("./config");
|
|
23
24
|
Object.defineProperty(exports, "DEFAULT_LINTER_CONFIG", { enumerable: true, get: function () { return config_1.DEFAULT_LINTER_CONFIG; } });
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;AAEH,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;AAEH,mCAAsF;AAA7E,kGAAA,QAAQ,OAAA;AAAE,qGAAA,WAAW,OAAA;AAAE,0GAAA,gBAAgB,OAAA;AAAE,2GAAA,iBAAiB,OAAA;AACnE,mCAAsH;AAA/F,+GAAA,qBAAqB,OAAA;AAAE,6GAAA,mBAAmB,OAAA;AAAE,2GAAA,iBAAiB,OAAA;AAAE,uGAAA,aAAa,OAAA;AAGnG,wDAAoD;AAA3C,2GAAA,UAAU,OAAA;AACnB,wDAAoD;AAA3C,2GAAA,UAAU,OAAA;AACnB,0DAAsD;AAA7C,6GAAA,WAAW,OAAA;AACpB,+CAA2H;AAAlH,iHAAA,qBAAqB,OAAA;AAAE,iHAAA,qBAAqB,OAAA;AAAE,uGAAA,WAAW,OAAA;AAAE,wGAAA,YAAY,OAAA;AAAE,wGAAA,YAAY,OAAA;AAC9F,mDAAqD;AAA5C,2GAAA,aAAa,OAAA;AACtB,wDAAuE;AAA9D,4GAAA,YAAY,OAAA;AAAE,8GAAA,cAAc,OAAA;AACrC,0DAAmF;AAA1E,kHAAA,iBAAiB,OAAA;AAAE,qHAAA,oBAAoB,OAAA;AAChD,kDAAqF;AAA5E,uGAAA,UAAU,OAAA;AAAE,4GAAA,eAAe,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AACtD,kDAAwE;AAA/D,gHAAA,mBAAmB,OAAA;AAAE,wGAAA,WAAW,OAAA"}
|
package/dist/src/linter.d.ts
CHANGED
|
@@ -5,12 +5,16 @@ import type { LinterConfig } from './config';
|
|
|
5
5
|
* Lints a single file with a pre-built context.
|
|
6
6
|
* Used by the extension (library mode) and internally by lintProject.
|
|
7
7
|
*/
|
|
8
|
-
export declare function lintFile(filePath: string, content: string, context: LintContext, config: LinterConfig): LintDiagnostic[];
|
|
8
|
+
export declare function lintFile(filePath: string, content: string, context: LintContext, config: LinterConfig, preLines?: string[]): LintDiagnostic[];
|
|
9
9
|
/**
|
|
10
10
|
* Lints all .brs files in a project directory.
|
|
11
11
|
* Used by the CLI (standalone mode).
|
|
12
12
|
*/
|
|
13
13
|
export declare function lintProject(projectRoot: string, configOverride?: Partial<LinterConfig>): LintResult;
|
|
14
|
+
/**
|
|
15
|
+
* Async version of lintProject — uses parallel I/O for ~6x faster file loading.
|
|
16
|
+
*/
|
|
17
|
+
export declare function lintProjectAsync(projectRoot: string, configOverride?: Partial<LinterConfig>): Promise<LintResult>;
|
|
14
18
|
/**
|
|
15
19
|
* Overrides the context's knownFuncNames for a specific file.
|
|
16
20
|
* Called from lintFile to provide per-file known names.
|
package/dist/src/linter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linter.d.ts","sourceRoot":"","sources":["../../src/linter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"linter.d.ts","sourceRoot":"","sources":["../../src/linter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAA8B,MAAM,SAAS,CAAC;AACtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAW7C;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,YAAY,EACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,GAClB,cAAc,EAAE,CAuBlB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,WAAW,EAAE,MAAM,EACnB,cAAc,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GACrC,UAAU,CASZ;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,cAAc,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GACrC,OAAO,CAAC,UAAU,CAAC,CASrB;AA4iBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAQzF"}
|
package/dist/src/linter.js
CHANGED
|
@@ -38,22 +38,25 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.lintFile = lintFile;
|
|
40
40
|
exports.lintProject = lintProject;
|
|
41
|
+
exports.lintProjectAsync = lintProjectAsync;
|
|
41
42
|
exports.createFileContext = createFileContext;
|
|
42
43
|
const nodePath = __importStar(require("path"));
|
|
44
|
+
const fs = __importStar(require("fs"));
|
|
43
45
|
const config_1 = require("./config");
|
|
44
46
|
const index_1 = require("./rules/index");
|
|
45
47
|
const importParser_1 = require("./analysis/importParser");
|
|
46
48
|
const functionIndex_1 = require("./analysis/functionIndex");
|
|
47
49
|
const patternSiblings_1 = require("./analysis/patternSiblings");
|
|
48
50
|
const testUtils_1 = require("./analysis/testUtils");
|
|
51
|
+
const xmlParser_1 = require("./analysis/xmlParser");
|
|
49
52
|
const testGlobals_1 = require("./catalog/testGlobals");
|
|
50
53
|
const fsWrapper_1 = __importDefault(require("./analysis/fsWrapper"));
|
|
51
54
|
/**
|
|
52
55
|
* Lints a single file with a pre-built context.
|
|
53
56
|
* Used by the extension (library mode) and internally by lintProject.
|
|
54
57
|
*/
|
|
55
|
-
function lintFile(filePath, content, context, config) {
|
|
56
|
-
const lines = content.split(/\r?\n/);
|
|
58
|
+
function lintFile(filePath, content, context, config, preLines) {
|
|
59
|
+
const lines = preLines ?? content.split(/\r?\n/);
|
|
57
60
|
const imports = context.parseImports(content);
|
|
58
61
|
const ruleContext = {
|
|
59
62
|
filePath,
|
|
@@ -83,6 +86,20 @@ function lintProject(projectRoot, configOverride) {
|
|
|
83
86
|
...configOverride,
|
|
84
87
|
};
|
|
85
88
|
const { context, brsFiles, fileContentsCache } = buildProjectContext(projectRoot, config);
|
|
89
|
+
return runLint(brsFiles, fileContentsCache, context, config);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Async version of lintProject — uses parallel I/O for ~6x faster file loading.
|
|
93
|
+
*/
|
|
94
|
+
async function lintProjectAsync(projectRoot, configOverride) {
|
|
95
|
+
const config = {
|
|
96
|
+
...(0, config_1.resolveConfig)(projectRoot),
|
|
97
|
+
...configOverride,
|
|
98
|
+
};
|
|
99
|
+
const { context, brsFiles, fileContentsCache } = await buildProjectContextAsync(projectRoot, config);
|
|
100
|
+
return runLint(brsFiles, fileContentsCache, context, config);
|
|
101
|
+
}
|
|
102
|
+
function runLint(brsFiles, fileContentsCache, context, config) {
|
|
86
103
|
const allDiagnostics = [];
|
|
87
104
|
for (const file of brsFiles) {
|
|
88
105
|
const content = fileContentsCache.get(nodePath.normalize(file));
|
|
@@ -101,29 +118,282 @@ function lintProject(projectRoot, configOverride) {
|
|
|
101
118
|
hintCount: allDiagnostics.filter(d => d.severity === 'hint').length,
|
|
102
119
|
};
|
|
103
120
|
}
|
|
104
|
-
|
|
121
|
+
// ── Async walk + parallel read (used by lintProjectAsync / CLI) ──
|
|
122
|
+
async function walkAsync(dir) {
|
|
123
|
+
const brsFiles = [];
|
|
124
|
+
const xmlFiles = [];
|
|
125
|
+
let entries;
|
|
126
|
+
try {
|
|
127
|
+
entries = await fs.promises.readdir(dir, { withFileTypes: true });
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return { brsFiles, xmlFiles };
|
|
131
|
+
}
|
|
132
|
+
const subdirPromises = [];
|
|
133
|
+
for (const entry of entries) {
|
|
134
|
+
const fullPath = nodePath.join(dir, entry.name);
|
|
135
|
+
if (entry.isDirectory()) {
|
|
136
|
+
if (entry.name === 'node_modules' || entry.name === '.git')
|
|
137
|
+
continue;
|
|
138
|
+
subdirPromises.push(walkAsync(fullPath));
|
|
139
|
+
}
|
|
140
|
+
else if (entry.name.endsWith('.brs')) {
|
|
141
|
+
brsFiles.push(fullPath);
|
|
142
|
+
}
|
|
143
|
+
else if (entry.name.endsWith('.xml')) {
|
|
144
|
+
xmlFiles.push(fullPath);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
for (const sub of await Promise.all(subdirPromises)) {
|
|
148
|
+
brsFiles.push(...sub.brsFiles);
|
|
149
|
+
xmlFiles.push(...sub.xmlFiles);
|
|
150
|
+
}
|
|
151
|
+
return { brsFiles, xmlFiles };
|
|
152
|
+
}
|
|
153
|
+
async function buildProjectContextAsync(projectRoot, config) {
|
|
105
154
|
const importResolver = new importParser_1.ImportResolver({
|
|
106
155
|
workspaceFolders: [projectRoot],
|
|
107
156
|
sourceDir: config.sourceDir,
|
|
108
157
|
resolveModules: config.resolveModules,
|
|
109
158
|
});
|
|
110
|
-
|
|
111
|
-
const
|
|
112
|
-
|
|
159
|
+
const workspaceFolders = [projectRoot];
|
|
160
|
+
const sourceDir = config.sourceDir;
|
|
161
|
+
// Phase 1: Async walk project + kopytko packages
|
|
162
|
+
const sourceRoot = nodePath.join(projectRoot, sourceDir);
|
|
163
|
+
const walkRoot = fsWrapper_1.default.existsSync(sourceRoot) ? sourceRoot : projectRoot;
|
|
164
|
+
const projectFiles = await walkAsync(walkRoot);
|
|
165
|
+
// Scan kopytko packages for XML
|
|
166
|
+
const packageXmlFiles = [];
|
|
167
|
+
const packageBrsFiles = [];
|
|
168
|
+
const nmDir = nodePath.join(projectRoot, 'node_modules');
|
|
169
|
+
try {
|
|
170
|
+
const nmEntries = await fs.promises.readdir(nmDir, { withFileTypes: true });
|
|
171
|
+
const pkgPromises = [];
|
|
172
|
+
const scanPkg = async (pkgDir) => {
|
|
173
|
+
const moduleDir = readKopytkoModuleDir(pkgDir);
|
|
174
|
+
if (!moduleDir)
|
|
175
|
+
return;
|
|
176
|
+
const sub = await walkAsync(nodePath.join(pkgDir, moduleDir));
|
|
177
|
+
packageXmlFiles.push(...sub.xmlFiles);
|
|
178
|
+
packageBrsFiles.push(...sub.brsFiles);
|
|
179
|
+
};
|
|
180
|
+
for (const entry of nmEntries) {
|
|
181
|
+
if (!entry.isDirectory())
|
|
182
|
+
continue;
|
|
183
|
+
const fullPath = nodePath.join(nmDir, entry.name);
|
|
184
|
+
if (entry.name.startsWith('@')) {
|
|
185
|
+
try {
|
|
186
|
+
const scopedEntries = await fs.promises.readdir(fullPath, { withFileTypes: true });
|
|
187
|
+
for (const scoped of scopedEntries) {
|
|
188
|
+
if (scoped.isDirectory())
|
|
189
|
+
pkgPromises.push(scanPkg(nodePath.join(fullPath, scoped.name)));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
catch { /* skip */ }
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
pkgPromises.push(scanPkg(fullPath));
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
await Promise.all(pkgPromises);
|
|
199
|
+
}
|
|
200
|
+
catch { /* no node_modules */ }
|
|
201
|
+
const allXmlFiles = [...projectFiles.xmlFiles, ...packageXmlFiles];
|
|
202
|
+
const allBrsFilesForIndex = [...projectFiles.brsFiles, ...packageBrsFiles];
|
|
203
|
+
const brsFiles = projectFiles.brsFiles; // only project files get linted
|
|
204
|
+
// Phase 2: Parallel read all files
|
|
205
|
+
const readResults = await Promise.all([
|
|
206
|
+
...brsFiles.map(f => fs.promises.readFile(f, 'utf-8').then(text => ({ path: f, text, type: 'brs' })).catch(() => null)),
|
|
207
|
+
...packageBrsFiles.map(f => fs.promises.readFile(f, 'utf-8').then(text => ({ path: f, text, type: 'pkg-brs' })).catch(() => null)),
|
|
208
|
+
...allXmlFiles.map(f => fs.promises.readFile(f, 'utf-8').then(text => ({ path: f, text, type: 'xml' })).catch(() => null)),
|
|
209
|
+
]);
|
|
210
|
+
// Phase 3: Parse (synchronous, CPU-bound — fast)
|
|
211
|
+
const fileContentsCache = new Map();
|
|
113
212
|
const fileFunctions = new Map();
|
|
114
213
|
const fileImports = new Map();
|
|
214
|
+
const componentNameToXml = new Map();
|
|
215
|
+
const xmlTextCache = new Map();
|
|
216
|
+
const brsToXmlParents = new Map();
|
|
217
|
+
for (const result of readResults) {
|
|
218
|
+
if (!result)
|
|
219
|
+
continue;
|
|
220
|
+
const normalized = nodePath.normalize(result.path);
|
|
221
|
+
fileContentsCache.set(normalized, result.text);
|
|
222
|
+
if (result.type === 'brs' || result.type === 'pkg-brs') {
|
|
223
|
+
fileFunctions.set(normalized, (0, functionIndex_1.parseFunctionDefs)(result.text, result.path).map(f => f.nameLower));
|
|
224
|
+
if (result.type === 'brs') {
|
|
225
|
+
fileImports.set(normalized, (0, importParser_1.parseImports)(result.text));
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
xmlTextCache.set(normalized, result.text);
|
|
230
|
+
const name = (0, xmlParser_1.parseXmlComponentName)(result.text);
|
|
231
|
+
if (name)
|
|
232
|
+
componentNameToXml.set(name.toLowerCase(), normalized);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
// Pre-seed resolver cache
|
|
236
|
+
importResolver.registerKnownPaths(allBrsFilesForIndex);
|
|
237
|
+
importResolver.registerKnownPaths(allXmlFiles);
|
|
238
|
+
// Register node_modules package directories
|
|
239
|
+
try {
|
|
240
|
+
const nmEntries = await fs.promises.readdir(nmDir, { withFileTypes: true });
|
|
241
|
+
for (const entry of nmEntries) {
|
|
242
|
+
if (!entry.isDirectory())
|
|
243
|
+
continue;
|
|
244
|
+
if (entry.name.startsWith('@')) {
|
|
245
|
+
try {
|
|
246
|
+
const scopedEntries = await fs.promises.readdir(nodePath.join(nmDir, entry.name), { withFileTypes: true });
|
|
247
|
+
for (const scoped of scopedEntries) {
|
|
248
|
+
if (scoped.isDirectory())
|
|
249
|
+
importResolver.registerKnownPaths([nodePath.join(nmDir, entry.name, scoped.name)]);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
catch { /* skip */ }
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
importResolver.registerKnownPaths([nodePath.join(nmDir, entry.name)]);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
catch { /* skip */ }
|
|
260
|
+
// Build BRS→XML parent mapping
|
|
261
|
+
for (const [xmlPath, xmlText] of xmlTextCache) {
|
|
262
|
+
const scriptPaths = (0, xmlParser_1.getScriptPathsFromXml)(xmlPath, xmlText, workspaceFolders, sourceDir, (p) => importResolver.cachedExists(p));
|
|
263
|
+
for (const scriptPath of scriptPaths) {
|
|
264
|
+
const normalizedScript = nodePath.normalize(scriptPath);
|
|
265
|
+
const parents = brsToXmlParents.get(normalizedScript) ?? [];
|
|
266
|
+
parents.push(xmlPath);
|
|
267
|
+
brsToXmlParents.set(normalizedScript, parents);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
// Phase 4: Build per-file known functions (reuse shared logic)
|
|
271
|
+
return buildKnownFunctions({
|
|
272
|
+
importResolver, workspaceFolders, sourceDir, brsFiles,
|
|
273
|
+
fileContentsCache, fileFunctions, fileImports,
|
|
274
|
+
componentNameToXml, xmlTextCache, brsToXmlParents,
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
function buildProjectContext(projectRoot, config) {
|
|
278
|
+
const importResolver = new importParser_1.ImportResolver({
|
|
279
|
+
workspaceFolders: [projectRoot],
|
|
280
|
+
sourceDir: config.sourceDir,
|
|
281
|
+
resolveModules: config.resolveModules,
|
|
282
|
+
});
|
|
283
|
+
const workspaceFolders = [projectRoot];
|
|
284
|
+
const sourceDir = config.sourceDir;
|
|
285
|
+
// ── Phase 1: Scan all BRS and XML files (project + packages, single pass) ──
|
|
286
|
+
// Also read file contents during the walk to avoid re-reading later.
|
|
287
|
+
const brsFiles = [];
|
|
288
|
+
const allKnownPaths = []; // every file found during walk — pre-seeds existsSync cache
|
|
115
289
|
const fileContentsCache = new Map();
|
|
116
|
-
|
|
290
|
+
const fileFunctions = new Map();
|
|
291
|
+
const fileImports = new Map();
|
|
292
|
+
const componentNameToXml = new Map();
|
|
293
|
+
const xmlTextCache = new Map();
|
|
294
|
+
const brsToXmlParents = new Map();
|
|
295
|
+
function walkAndIndex(dir, collectBrs) {
|
|
296
|
+
let entries;
|
|
117
297
|
try {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
298
|
+
entries = fsWrapper_1.default.readdirTyped(dir);
|
|
299
|
+
}
|
|
300
|
+
catch {
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
for (const entry of entries) {
|
|
304
|
+
const fullPath = nodePath.join(dir, entry.name);
|
|
305
|
+
if (entry.isDirectory) {
|
|
306
|
+
if (entry.name === 'node_modules' || entry.name === '.git')
|
|
307
|
+
continue;
|
|
308
|
+
walkAndIndex(fullPath, collectBrs);
|
|
309
|
+
}
|
|
310
|
+
else if (entry.name.endsWith('.brs')) {
|
|
311
|
+
allKnownPaths.push(fullPath);
|
|
312
|
+
if (collectBrs) {
|
|
313
|
+
brsFiles.push(fullPath);
|
|
314
|
+
// Read + parse BRS in the same pass
|
|
315
|
+
try {
|
|
316
|
+
const text = fsWrapper_1.default.readFileSync(fullPath, 'utf-8');
|
|
317
|
+
const normalized = nodePath.normalize(fullPath);
|
|
318
|
+
fileContentsCache.set(normalized, text);
|
|
319
|
+
fileFunctions.set(normalized, (0, functionIndex_1.parseFunctionDefs)(text, fullPath).map(f => f.nameLower));
|
|
320
|
+
fileImports.set(normalized, (0, importParser_1.parseImports)(text));
|
|
321
|
+
}
|
|
322
|
+
catch { /* skip */ }
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
else if (entry.name.endsWith('.xml')) {
|
|
326
|
+
allKnownPaths.push(fullPath);
|
|
327
|
+
try {
|
|
328
|
+
const text = fsWrapper_1.default.readFileSync(fullPath, 'utf-8');
|
|
329
|
+
const normalized = nodePath.normalize(fullPath);
|
|
330
|
+
xmlTextCache.set(normalized, text);
|
|
331
|
+
fileContentsCache.set(normalized, text);
|
|
332
|
+
const name = (0, xmlParser_1.parseXmlComponentName)(text);
|
|
333
|
+
if (name)
|
|
334
|
+
componentNameToXml.set(name.toLowerCase(), normalized);
|
|
335
|
+
}
|
|
336
|
+
catch { /* skip */ }
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
// Scan project source (collect BRS + XML, read + parse in one pass)
|
|
341
|
+
const sourceRoot = nodePath.join(projectRoot, sourceDir);
|
|
342
|
+
const walkRoot = fsWrapper_1.default.existsSync(sourceRoot) ? sourceRoot : projectRoot;
|
|
343
|
+
walkAndIndex(walkRoot, true);
|
|
344
|
+
// Scan Kopytko packages (XML + BRS for extends chain resolution)
|
|
345
|
+
// Also register all package directories to avoid existsSync in walk-up resolution
|
|
346
|
+
const nmDir = nodePath.join(projectRoot, 'node_modules');
|
|
347
|
+
try {
|
|
348
|
+
for (const entry of fsWrapper_1.default.readdirTyped(nmDir)) {
|
|
349
|
+
if (!entry.isDirectory)
|
|
350
|
+
continue;
|
|
351
|
+
if (entry.name.startsWith('@')) {
|
|
352
|
+
try {
|
|
353
|
+
for (const scoped of fsWrapper_1.default.readdirTyped(nodePath.join(nmDir, entry.name))) {
|
|
354
|
+
if (!scoped.isDirectory)
|
|
355
|
+
continue;
|
|
356
|
+
const pkgDir = nodePath.join(nmDir, entry.name, scoped.name);
|
|
357
|
+
allKnownPaths.push(pkgDir); // register package dir for walk-up resolution
|
|
358
|
+
const moduleDir = readKopytkoModuleDir(pkgDir);
|
|
359
|
+
if (moduleDir)
|
|
360
|
+
walkAndIndex(nodePath.join(pkgDir, moduleDir), false);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
catch { /* skip */ }
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
const pkgDir = nodePath.join(nmDir, entry.name);
|
|
367
|
+
allKnownPaths.push(pkgDir); // register package dir for walk-up resolution
|
|
368
|
+
const moduleDir = readKopytkoModuleDir(pkgDir);
|
|
369
|
+
if (moduleDir)
|
|
370
|
+
walkAndIndex(nodePath.join(pkgDir, moduleDir), false);
|
|
371
|
+
}
|
|
123
372
|
}
|
|
124
|
-
catch { /* skip */ }
|
|
125
373
|
}
|
|
126
|
-
|
|
374
|
+
catch { /* no node_modules */ }
|
|
375
|
+
// Pre-seed the import resolver's existsSync cache with all discovered files
|
|
376
|
+
importResolver.registerKnownPaths(allKnownPaths);
|
|
377
|
+
// Build BRS→XML parent mapping
|
|
378
|
+
for (const [xmlPath, xmlText] of xmlTextCache) {
|
|
379
|
+
const scriptPaths = (0, xmlParser_1.getScriptPathsFromXml)(xmlPath, xmlText, workspaceFolders, sourceDir, (p) => importResolver.cachedExists(p));
|
|
380
|
+
for (const scriptPath of scriptPaths) {
|
|
381
|
+
const normalizedScript = nodePath.normalize(scriptPath);
|
|
382
|
+
const parents = brsToXmlParents.get(normalizedScript) ?? [];
|
|
383
|
+
parents.push(xmlPath);
|
|
384
|
+
brsToXmlParents.set(normalizedScript, parents);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
return buildKnownFunctions({
|
|
388
|
+
importResolver, workspaceFolders, sourceDir, brsFiles,
|
|
389
|
+
fileContentsCache, fileFunctions, fileImports,
|
|
390
|
+
componentNameToXml, xmlTextCache, brsToXmlParents,
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
function buildKnownFunctions(params) {
|
|
394
|
+
const { importResolver, workspaceFolders, sourceDir, brsFiles, fileContentsCache, fileFunctions, fileImports, componentNameToXml, xmlTextCache, brsToXmlParents, } = params;
|
|
395
|
+
const config = { generatedPaths: [], generatedModules: [], siblingPatterns: [] };
|
|
396
|
+
const allFunctions = new Map();
|
|
127
397
|
const readFileCached = (filePath) => {
|
|
128
398
|
const normalized = nodePath.normalize(filePath);
|
|
129
399
|
const cached = fileContentsCache.get(normalized);
|
|
@@ -138,7 +408,6 @@ function buildProjectContext(projectRoot, config) {
|
|
|
138
408
|
return null;
|
|
139
409
|
}
|
|
140
410
|
};
|
|
141
|
-
// Helper: get parsed functions for a file, using cache
|
|
142
411
|
const getFunctions = (filePath) => {
|
|
143
412
|
const normalized = nodePath.normalize(filePath);
|
|
144
413
|
const cached = fileFunctions.get(normalized);
|
|
@@ -151,7 +420,6 @@ function buildProjectContext(projectRoot, config) {
|
|
|
151
420
|
fileFunctions.set(normalized, fns);
|
|
152
421
|
return fns;
|
|
153
422
|
};
|
|
154
|
-
// Helper: get parsed imports for a file, using cache
|
|
155
423
|
const getImports = (filePath) => {
|
|
156
424
|
const normalized = nodePath.normalize(filePath);
|
|
157
425
|
const cached = fileImports.get(normalized);
|
|
@@ -164,7 +432,59 @@ function buildProjectContext(projectRoot, config) {
|
|
|
164
432
|
fileImports.set(normalized, imports);
|
|
165
433
|
return imports;
|
|
166
434
|
};
|
|
167
|
-
//
|
|
435
|
+
// Collect functions from an XML component's extends chain (map-based, no filesystem traversal)
|
|
436
|
+
const extendsCache = new Map();
|
|
437
|
+
const collectFromExtendsChain = (componentNameLower) => {
|
|
438
|
+
const cached = extendsCache.get(componentNameLower);
|
|
439
|
+
if (cached)
|
|
440
|
+
return cached;
|
|
441
|
+
const fns = [];
|
|
442
|
+
const visitedComponents = new Set();
|
|
443
|
+
const walk = (nameLower) => {
|
|
444
|
+
if (visitedComponents.has(nameLower))
|
|
445
|
+
return;
|
|
446
|
+
visitedComponents.add(nameLower);
|
|
447
|
+
const xmlPath = componentNameToXml.get(nameLower);
|
|
448
|
+
if (!xmlPath)
|
|
449
|
+
return;
|
|
450
|
+
const xmlText = xmlTextCache.get(xmlPath) ?? readFileCached(xmlPath);
|
|
451
|
+
if (!xmlText)
|
|
452
|
+
return;
|
|
453
|
+
// Add functions from all BRS scripts listed in this XML
|
|
454
|
+
const scriptPaths = (0, xmlParser_1.getScriptPathsFromXml)(xmlPath, xmlText, workspaceFolders, sourceDir, (p) => importResolver.cachedExists(p));
|
|
455
|
+
for (const scriptPath of scriptPaths) {
|
|
456
|
+
for (const fn of getFunctions(scriptPath))
|
|
457
|
+
fns.push(fn);
|
|
458
|
+
// Follow the script's @import chain
|
|
459
|
+
const visited = new Set();
|
|
460
|
+
const followImports = (file) => {
|
|
461
|
+
for (const imp of getImports(file)) {
|
|
462
|
+
if (imp.isMock)
|
|
463
|
+
continue;
|
|
464
|
+
const resolved = importResolver.resolveImportPath(imp, file);
|
|
465
|
+
if (!resolved)
|
|
466
|
+
continue;
|
|
467
|
+
const norm = nodePath.normalize(resolved);
|
|
468
|
+
if (visited.has(norm))
|
|
469
|
+
continue;
|
|
470
|
+
visited.add(norm);
|
|
471
|
+
for (const fn of getFunctions(resolved))
|
|
472
|
+
fns.push(fn);
|
|
473
|
+
followImports(resolved);
|
|
474
|
+
}
|
|
475
|
+
};
|
|
476
|
+
followImports(scriptPath);
|
|
477
|
+
}
|
|
478
|
+
// Walk up the extends chain
|
|
479
|
+
const parentName = (0, xmlParser_1.parseXmlExtends)(xmlText);
|
|
480
|
+
if (parentName)
|
|
481
|
+
walk(parentName.toLowerCase());
|
|
482
|
+
};
|
|
483
|
+
walk(componentNameLower);
|
|
484
|
+
extendsCache.set(componentNameLower, fns);
|
|
485
|
+
return fns;
|
|
486
|
+
};
|
|
487
|
+
// ── Phase 4: Build per-file known function names ──
|
|
168
488
|
for (const file of brsFiles) {
|
|
169
489
|
const normalizedFile = nodePath.normalize(file);
|
|
170
490
|
const known = new Set();
|
|
@@ -175,7 +495,7 @@ function buildProjectContext(projectRoot, config) {
|
|
|
175
495
|
for (const fn of testGlobals_1.TEST_FRAMEWORK_GLOBALS)
|
|
176
496
|
known.add(fn);
|
|
177
497
|
}
|
|
178
|
-
// Collect functions from
|
|
498
|
+
// Collect functions from @import chain (transitively)
|
|
179
499
|
const visited = new Set();
|
|
180
500
|
const collectFromImports = (sourceFile, imps) => {
|
|
181
501
|
for (const imp of imps) {
|
|
@@ -194,7 +514,34 @@ function buildProjectContext(projectRoot, config) {
|
|
|
194
514
|
}
|
|
195
515
|
};
|
|
196
516
|
collectFromImports(file, getImports(file));
|
|
197
|
-
// Add sibling functions
|
|
517
|
+
// Add XML sibling functions — other BRS files in the same XML component
|
|
518
|
+
const parentXmls = brsToXmlParents.get(normalizedFile) ?? [];
|
|
519
|
+
for (const xmlPath of parentXmls) {
|
|
520
|
+
const xmlText = readFileCached(xmlPath);
|
|
521
|
+
if (!xmlText)
|
|
522
|
+
continue;
|
|
523
|
+
// Add all sibling BRS scripts from this XML
|
|
524
|
+
const scriptPaths = (0, xmlParser_1.getScriptPathsFromXml)(xmlPath, xmlText, workspaceFolders, sourceDir, (p) => importResolver.cachedExists(p));
|
|
525
|
+
for (const scriptPath of scriptPaths) {
|
|
526
|
+
const normalizedScript = nodePath.normalize(scriptPath);
|
|
527
|
+
if (normalizedScript === normalizedFile)
|
|
528
|
+
continue;
|
|
529
|
+
if (!visited.has(normalizedScript)) {
|
|
530
|
+
visited.add(normalizedScript);
|
|
531
|
+
for (const fn of getFunctions(scriptPath))
|
|
532
|
+
known.add(fn);
|
|
533
|
+
collectFromImports(scriptPath, getImports(scriptPath));
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
// Walk the extends chain and add inherited functions
|
|
537
|
+
const parentComponentName = (0, xmlParser_1.parseXmlExtends)(xmlText);
|
|
538
|
+
if (parentComponentName) {
|
|
539
|
+
for (const fn of collectFromExtendsChain(parentComponentName.toLowerCase())) {
|
|
540
|
+
known.add(fn);
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
// Add pattern sibling functions
|
|
198
545
|
for (const siblingPath of (0, patternSiblings_1.findSiblingFiles)(file, config.siblingPatterns)) {
|
|
199
546
|
const normalizedSibling = nodePath.normalize(siblingPath);
|
|
200
547
|
if (!visited.has(normalizedSibling)) {
|
|
@@ -204,7 +551,7 @@ function buildProjectContext(projectRoot, config) {
|
|
|
204
551
|
collectFromImports(siblingPath, getImports(siblingPath));
|
|
205
552
|
}
|
|
206
553
|
}
|
|
207
|
-
// For test files, add tested file
|
|
554
|
+
// For test files, add tested file scope
|
|
208
555
|
if ((0, testUtils_1.isTestFile)(file)) {
|
|
209
556
|
for (const testedPath of (0, testUtils_1.resolveTestedFiles)(file)) {
|
|
210
557
|
const normalizedTested = nodePath.normalize(testedPath);
|
|
@@ -214,6 +561,19 @@ function buildProjectContext(projectRoot, config) {
|
|
|
214
561
|
known.add(fn);
|
|
215
562
|
collectFromImports(testedPath, getImports(testedPath));
|
|
216
563
|
}
|
|
564
|
+
// Also add the tested file's XML extends chain
|
|
565
|
+
const testedXmls = brsToXmlParents.get(normalizedTested) ?? [];
|
|
566
|
+
for (const txmlPath of testedXmls) {
|
|
567
|
+
const txmlText = readFileCached(txmlPath);
|
|
568
|
+
if (!txmlText)
|
|
569
|
+
continue;
|
|
570
|
+
const parentName = (0, xmlParser_1.parseXmlExtends)(txmlText);
|
|
571
|
+
if (parentName) {
|
|
572
|
+
for (const fn of collectFromExtendsChain(parentName.toLowerCase())) {
|
|
573
|
+
known.add(fn);
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
}
|
|
217
577
|
}
|
|
218
578
|
for (const siblingTest of (0, testUtils_1.findTestSiblings)(file)) {
|
|
219
579
|
const normalizedSibTest = nodePath.normalize(siblingTest);
|
|
@@ -276,35 +636,15 @@ function createFileContext(baseContext, filePath) {
|
|
|
276
636
|
knownFuncNames: fileKnown,
|
|
277
637
|
};
|
|
278
638
|
}
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
entries = fsWrapper_1.default.readdirTyped(currentDir);
|
|
286
|
-
}
|
|
287
|
-
catch {
|
|
288
|
-
return;
|
|
289
|
-
}
|
|
290
|
-
for (const entry of entries) {
|
|
291
|
-
const fullPath = nodePath.join(currentDir, entry.name);
|
|
292
|
-
if (entry.isDirectory) {
|
|
293
|
-
if (entry.name === 'node_modules' || entry.name === '.git')
|
|
294
|
-
continue;
|
|
295
|
-
walk(fullPath);
|
|
296
|
-
}
|
|
297
|
-
else if (entry.name.endsWith('.brs')) {
|
|
298
|
-
files.push(fullPath);
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
if (fsWrapper_1.default.existsSync(sourceRoot)) {
|
|
303
|
-
walk(sourceRoot);
|
|
639
|
+
/** Read `kopytkoModuleDir` from a package's package.json. Returns null if not a Kopytko package. */
|
|
640
|
+
function readKopytkoModuleDir(pkgDir) {
|
|
641
|
+
try {
|
|
642
|
+
const content = fsWrapper_1.default.readFileSync(nodePath.join(pkgDir, 'package.json'), 'utf-8');
|
|
643
|
+
const pkg = JSON.parse(content);
|
|
644
|
+
return pkg.kopytkoModuleDir ?? null;
|
|
304
645
|
}
|
|
305
|
-
|
|
306
|
-
|
|
646
|
+
catch {
|
|
647
|
+
return null;
|
|
307
648
|
}
|
|
308
|
-
return files;
|
|
309
649
|
}
|
|
310
650
|
//# sourceMappingURL=linter.js.map
|
package/dist/src/linter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linter.js","sourceRoot":"","sources":["../../src/linter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"linter.js","sourceRoot":"","sources":["../../src/linter.ts"],"names":[],"mappings":"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"}
|