kopytko-linter 0.1.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.
Files changed (102) hide show
  1. package/README.md +190 -0
  2. package/dist/bin/kopytko-lint.d.ts +3 -0
  3. package/dist/bin/kopytko-lint.d.ts.map +1 -0
  4. package/dist/bin/kopytko-lint.js +118 -0
  5. package/dist/bin/kopytko-lint.js.map +1 -0
  6. package/dist/src/analysis/fsWrapper.d.ts +19 -0
  7. package/dist/src/analysis/fsWrapper.d.ts.map +1 -0
  8. package/dist/src/analysis/fsWrapper.js +62 -0
  9. package/dist/src/analysis/fsWrapper.js.map +1 -0
  10. package/dist/src/analysis/functionIndex.d.ts +19 -0
  11. package/dist/src/analysis/functionIndex.d.ts.map +1 -0
  12. package/dist/src/analysis/functionIndex.js +69 -0
  13. package/dist/src/analysis/functionIndex.js.map +1 -0
  14. package/dist/src/analysis/globMatcher.d.ts +8 -0
  15. package/dist/src/analysis/globMatcher.d.ts.map +1 -0
  16. package/dist/src/analysis/globMatcher.js +27 -0
  17. package/dist/src/analysis/globMatcher.js.map +1 -0
  18. package/dist/src/analysis/importParser.d.ts +22 -0
  19. package/dist/src/analysis/importParser.d.ts.map +1 -0
  20. package/dist/src/analysis/importParser.js +131 -0
  21. package/dist/src/analysis/importParser.js.map +1 -0
  22. package/dist/src/analysis/patternSiblings.d.ts +13 -0
  23. package/dist/src/analysis/patternSiblings.d.ts.map +1 -0
  24. package/dist/src/analysis/patternSiblings.js +91 -0
  25. package/dist/src/analysis/patternSiblings.js.map +1 -0
  26. package/dist/src/analysis/scopeAnalysis.d.ts +17 -0
  27. package/dist/src/analysis/scopeAnalysis.d.ts.map +1 -0
  28. package/dist/src/analysis/scopeAnalysis.js +180 -0
  29. package/dist/src/analysis/scopeAnalysis.js.map +1 -0
  30. package/dist/src/analysis/testUtils.d.ts +17 -0
  31. package/dist/src/analysis/testUtils.d.ts.map +1 -0
  32. package/dist/src/analysis/testUtils.js +124 -0
  33. package/dist/src/analysis/testUtils.js.map +1 -0
  34. package/dist/src/analysis/textUtils.d.ts +9 -0
  35. package/dist/src/analysis/textUtils.d.ts.map +1 -0
  36. package/dist/src/analysis/textUtils.js +45 -0
  37. package/dist/src/analysis/textUtils.js.map +1 -0
  38. package/dist/src/catalog/builtins.d.ts +26 -0
  39. package/dist/src/catalog/builtins.d.ts.map +1 -0
  40. package/dist/src/catalog/builtins.js +123 -0
  41. package/dist/src/catalog/builtins.js.map +1 -0
  42. package/dist/src/catalog/components.d.ts +8 -0
  43. package/dist/src/catalog/components.d.ts.map +1 -0
  44. package/dist/src/catalog/components.js +35 -0
  45. package/dist/src/catalog/components.js.map +1 -0
  46. package/dist/src/config.d.ts +23 -0
  47. package/dist/src/config.d.ts.map +1 -0
  48. package/dist/src/config.js +167 -0
  49. package/dist/src/config.js.map +1 -0
  50. package/dist/src/context.d.ts +22 -0
  51. package/dist/src/context.d.ts.map +1 -0
  52. package/dist/src/context.js +3 -0
  53. package/dist/src/context.js.map +1 -0
  54. package/dist/src/index.d.ts +28 -0
  55. package/dist/src/index.d.ts.map +1 -0
  56. package/dist/src/index.js +54 -0
  57. package/dist/src/index.js.map +1 -0
  58. package/dist/src/jsonc.d.ts +6 -0
  59. package/dist/src/jsonc.d.ts.map +1 -0
  60. package/dist/src/jsonc.js +46 -0
  61. package/dist/src/jsonc.js.map +1 -0
  62. package/dist/src/linter.d.ts +19 -0
  63. package/dist/src/linter.d.ts.map +1 -0
  64. package/dist/src/linter.js +274 -0
  65. package/dist/src/linter.js.map +1 -0
  66. package/dist/src/output/jsonFormatter.d.ts +3 -0
  67. package/dist/src/output/jsonFormatter.d.ts.map +1 -0
  68. package/dist/src/output/jsonFormatter.js +26 -0
  69. package/dist/src/output/jsonFormatter.js.map +1 -0
  70. package/dist/src/output/sarifFormatter.d.ts +3 -0
  71. package/dist/src/output/sarifFormatter.d.ts.map +1 -0
  72. package/dist/src/output/sarifFormatter.js +110 -0
  73. package/dist/src/output/sarifFormatter.js.map +1 -0
  74. package/dist/src/output/textFormatter.d.ts +3 -0
  75. package/dist/src/output/textFormatter.d.ts.map +1 -0
  76. package/dist/src/output/textFormatter.js +61 -0
  77. package/dist/src/output/textFormatter.js.map +1 -0
  78. package/dist/src/rules/identifierRules.d.ts +6 -0
  79. package/dist/src/rules/identifierRules.d.ts.map +1 -0
  80. package/dist/src/rules/identifierRules.js +322 -0
  81. package/dist/src/rules/identifierRules.js.map +1 -0
  82. package/dist/src/rules/importRules.d.ts +6 -0
  83. package/dist/src/rules/importRules.d.ts.map +1 -0
  84. package/dist/src/rules/importRules.js +164 -0
  85. package/dist/src/rules/importRules.js.map +1 -0
  86. package/dist/src/rules/index.d.ts +4 -0
  87. package/dist/src/rules/index.d.ts.map +1 -0
  88. package/dist/src/rules/index.js +21 -0
  89. package/dist/src/rules/index.js.map +1 -0
  90. package/dist/src/rules/syntaxRules.d.ts +6 -0
  91. package/dist/src/rules/syntaxRules.d.ts.map +1 -0
  92. package/dist/src/rules/syntaxRules.js +221 -0
  93. package/dist/src/rules/syntaxRules.js.map +1 -0
  94. package/dist/src/rules/testRules.d.ts +3 -0
  95. package/dist/src/rules/testRules.d.ts.map +1 -0
  96. package/dist/src/rules/testRules.js +79 -0
  97. package/dist/src/rules/testRules.js.map +1 -0
  98. package/dist/src/types.d.ts +54 -0
  99. package/dist/src/types.d.ts.map +1 -0
  100. package/dist/src/types.js +3 -0
  101. package/dist/src/types.js.map +1 -0
  102. package/package.json +52 -0
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.escapeRegex = escapeRegex;
4
+ exports.stripStringLiterals = stripStringLiterals;
5
+ /** Escapes special regex characters in a string for use in `new RegExp(...)`. */
6
+ function escapeRegex(str) {
7
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
8
+ }
9
+ /**
10
+ * Replaces string literal contents with spaces, preserving character offsets.
11
+ * When `stripComments` is true, truncates at the first `'` comment marker
12
+ * outside a string.
13
+ */
14
+ function stripStringLiterals(s, stripComments = false) {
15
+ let result = '';
16
+ let inString = false;
17
+ for (let i = 0; i < s.length; i++) {
18
+ const ch = s[i];
19
+ if (ch === '"') {
20
+ if (!inString) {
21
+ inString = true;
22
+ result += '"';
23
+ }
24
+ else if (s[i + 1] === '"') {
25
+ result += ' '; // BrightScript escaped quote ""
26
+ i++;
27
+ }
28
+ else {
29
+ inString = false;
30
+ result += '"';
31
+ }
32
+ }
33
+ else if (inString) {
34
+ result += ' ';
35
+ }
36
+ else if (stripComments && ch === "'") {
37
+ break; // rest is a comment
38
+ }
39
+ else {
40
+ result += ch;
41
+ }
42
+ }
43
+ return result;
44
+ }
45
+ //# sourceMappingURL=textUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textUtils.js","sourceRoot":"","sources":["../../../src/analysis/textUtils.ts"],"names":[],"mappings":";;AACA,kCAEC;AAOD,kDAyBC;AAnCD,iFAAiF;AACjF,SAAgB,WAAW,CAAC,GAAW;IACrC,OAAO,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,CAAS,EAAE,aAAa,GAAG,KAAK;IAClE,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,GAAG,IAAI,CAAC;gBAChB,MAAM,IAAI,GAAG,CAAC;YAChB,CAAC;iBAAM,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAC5B,MAAM,IAAI,IAAI,CAAC,CAAC,gCAAgC;gBAChD,CAAC,EAAE,CAAC;YACN,CAAC;iBAAM,CAAC;gBACN,QAAQ,GAAG,KAAK,CAAC;gBACjB,MAAM,IAAI,GAAG,CAAC;YAChB,CAAC;QACH,CAAC;aAAM,IAAI,QAAQ,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,CAAC;QAChB,CAAC;aAAM,IAAI,aAAa,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACvC,MAAM,CAAC,oBAAoB;QAC7B,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * BrightScript built-in functions and keywords.
3
+ *
4
+ * Kept in sync with the extension's src/server/brightscript/builtins.ts and
5
+ * the formatter's packages/kopytko-formatter/src/builtins.ts.
6
+ */
7
+ export interface BrightScriptBuiltin {
8
+ name: string;
9
+ signature: string;
10
+ returnType: string;
11
+ description: string;
12
+ docsUrl: string;
13
+ category: 'math' | 'string' | 'type' | 'utility' | 'io' | 'filesystem';
14
+ }
15
+ export declare const BRIGHTSCRIPT_BUILTINS: BrightScriptBuiltin[];
16
+ export declare function findBuiltin(name: string): BrightScriptBuiltin | undefined;
17
+ export declare const BRIGHTSCRIPT_KEYWORDS: string[];
18
+ /** Pre-built sets for O(1) lookup */
19
+ export declare const builtinNames: Set<string>;
20
+ export declare const keywordNames: Set<string>;
21
+ /** Maps lowercased builtin name → { min, max } expected argument counts. */
22
+ export declare const builtinArity: Map<string, {
23
+ min: number;
24
+ max: number;
25
+ }>;
26
+ //# sourceMappingURL=builtins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../../src/catalog/builtins.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,YAAY,CAAC;CACxE;AAOD,eAAO,MAAM,qBAAqB,EAAE,mBAAmB,EAwEtD,CAAC;AAMF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAEzE;AAED,eAAO,MAAM,qBAAqB,UAQjC,CAAC;AAEF,qCAAqC;AACrC,eAAO,MAAM,YAAY,aAAkE,CAAC;AAC5F,eAAO,MAAM,YAAY,aAA6D,CAAC;AAEvF,4EAA4E;AAC5E,eAAO,MAAM,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAgB/D,CAAC"}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ /**
3
+ * BrightScript built-in functions and keywords.
4
+ *
5
+ * Kept in sync with the extension's src/server/brightscript/builtins.ts and
6
+ * the formatter's packages/kopytko-formatter/src/builtins.ts.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.builtinArity = exports.keywordNames = exports.builtinNames = exports.BRIGHTSCRIPT_KEYWORDS = exports.BRIGHTSCRIPT_BUILTINS = void 0;
10
+ exports.findBuiltin = findBuiltin;
11
+ const MATH_DOCS = 'https://developer.roku.com/dev/docs/global-math-functions';
12
+ const STRING_DOCS = 'https://developer.roku.com/dev/docs/global-string-functions';
13
+ const UTILITY_DOCS = 'https://developer.roku.com/dev/docs/global-utility-functions';
14
+ const RUNTIME_DOCS = 'https://developer.roku.com/dev/docs/runtime-functions';
15
+ exports.BRIGHTSCRIPT_BUILTINS = [
16
+ // Math
17
+ { name: 'Abs', signature: 'Abs(x as Float) as Float', returnType: 'Float', description: 'Returns the absolute value of x.', docsUrl: MATH_DOCS, category: 'math' },
18
+ { name: 'Atn', signature: 'Atn(x as Float) as Float', returnType: 'Float', description: 'Returns the arctangent of x in radians.', docsUrl: MATH_DOCS, category: 'math' },
19
+ { name: 'CInt', signature: 'CInt(x as Dynamic) as Integer', returnType: 'Integer', description: 'Converts x to Integer (rounds to nearest).', docsUrl: MATH_DOCS, category: 'math' },
20
+ { name: 'Cos', signature: 'Cos(x as Float) as Float', returnType: 'Float', description: 'Returns the cosine of x (x in radians).', docsUrl: MATH_DOCS, category: 'math' },
21
+ { name: 'Csng', signature: 'Csng(x as Dynamic) as Float', returnType: 'Float', description: 'Returns a single-precision float representation of the argument.', docsUrl: MATH_DOCS, category: 'math' },
22
+ { name: 'Exp', signature: 'Exp(x as Float) as Float', returnType: 'Float', description: 'Returns e^x.', docsUrl: MATH_DOCS, category: 'math' },
23
+ { name: 'Fix', signature: 'Fix(x as Float) as Integer', returnType: 'Integer', description: 'Truncates x toward zero (removes the fractional part).', docsUrl: MATH_DOCS, category: 'math' },
24
+ { name: 'Int', signature: 'Int(x as Float) as Integer', returnType: 'Integer', description: 'Returns the largest integer less than or equal to x (floor).', docsUrl: MATH_DOCS, category: 'math' },
25
+ { name: 'Log', signature: 'Log(x as Float) as Float', returnType: 'Float', description: 'Returns the natural logarithm of x.', docsUrl: MATH_DOCS, category: 'math' },
26
+ { name: 'Rnd', signature: 'Rnd(range as Integer) as Integer', returnType: 'Integer', description: 'Returns a random integer between 1 and range inclusive.', docsUrl: MATH_DOCS, category: 'math' },
27
+ { name: 'Sgn', signature: 'Sgn(x as Float) as Integer', returnType: 'Integer', description: 'Returns the sign of x: -1, 0, or 1.', docsUrl: MATH_DOCS, category: 'math' },
28
+ { name: 'Sin', signature: 'Sin(x as Float) as Float', returnType: 'Float', description: 'Returns the sine of x (x in radians).', docsUrl: MATH_DOCS, category: 'math' },
29
+ { name: 'Sqr', signature: 'Sqr(x as Float) as Float', returnType: 'Float', description: 'Returns the square root of x.', docsUrl: MATH_DOCS, category: 'math' },
30
+ { name: 'Tan', signature: 'Tan(x as Float) as Float', returnType: 'Float', description: 'Returns the tangent of x (x in radians).', docsUrl: MATH_DOCS, category: 'math' },
31
+ // String
32
+ { name: 'Asc', signature: 'Asc(s as String) as Integer', returnType: 'Integer', description: 'Returns the ASCII code of the first character of s.', docsUrl: STRING_DOCS, category: 'string' },
33
+ { name: 'Chr', signature: 'Chr(ch as Integer) as String', returnType: 'String', description: 'Returns the character corresponding to ASCII code ch.', docsUrl: STRING_DOCS, category: 'string' },
34
+ { name: 'Instr', signature: 'Instr(start as Integer, haystack as String, needle as String) as Integer', returnType: 'Integer', description: 'Returns the position of needle in haystack starting from start (1-based), or 0 if not found.', docsUrl: STRING_DOCS, category: 'string' },
35
+ { name: 'LCase', signature: 'LCase(s as String) as String', returnType: 'String', description: 'Returns s converted to lowercase.', docsUrl: STRING_DOCS, category: 'string' },
36
+ { name: 'Left', signature: 'Left(s as String, n as Integer) as String', returnType: 'String', description: 'Returns the leftmost n characters of s.', docsUrl: STRING_DOCS, category: 'string' },
37
+ { name: 'Len', signature: 'Len(s as String) as Integer', returnType: 'Integer', description: 'Returns the number of characters in s.', docsUrl: STRING_DOCS, category: 'string' },
38
+ { name: 'Mid', signature: 'Mid(s as String, start as Integer, length = -1 as Integer) as String', returnType: 'String', description: 'Returns a substring of s starting at start (1-based) with optional length.', docsUrl: STRING_DOCS, category: 'string' },
39
+ { name: 'Right', signature: 'Right(s as String, n as Integer) as String', returnType: 'String', description: 'Returns the rightmost n characters of s.', docsUrl: STRING_DOCS, category: 'string' },
40
+ { name: 'Str', signature: 'Str(n as Float) as String', returnType: 'String', description: 'Converts a number to its string representation.', docsUrl: STRING_DOCS, category: 'string' },
41
+ { name: 'StrI', signature: 'StrI(n as Integer, base = 10 as Integer) as String', returnType: 'String', description: 'Converts an integer to a string in the given base.', docsUrl: STRING_DOCS, category: 'string' },
42
+ { name: 'String', signature: 'String(n as Integer, ch as String) as String', returnType: 'String', description: 'Returns a string of n repetitions of ch.', docsUrl: STRING_DOCS, category: 'string' },
43
+ { name: 'StringI', signature: 'StringI(n as Integer, ch as Integer) as String', returnType: 'String', description: 'Returns a string of n repetitions of the character with ASCII code ch.', docsUrl: STRING_DOCS, category: 'string' },
44
+ { name: 'Substitute', signature: 'Substitute(template as String, arg0 as String, arg1 = "" as String, arg2 = "" as String, arg3 = "" as String) as String', returnType: 'String', description: 'Substitutes {0}..{3} placeholders in template with the given arguments.', docsUrl: STRING_DOCS, category: 'string' },
45
+ { name: 'Tr', signature: 'Tr(str as String) as String', returnType: 'String', description: "Returns the localized translation of str from the channel's locale package.", docsUrl: UTILITY_DOCS, category: 'string' },
46
+ { name: 'UCase', signature: 'UCase(s as String) as String', returnType: 'String', description: 'Returns s converted to uppercase.', docsUrl: STRING_DOCS, category: 'string' },
47
+ { name: 'Val', signature: 'Val(s as String, base = 10 as Integer) as Float', returnType: 'Float', description: 'Parses s as a number in the given base.', docsUrl: STRING_DOCS, category: 'string' },
48
+ // Type
49
+ { name: 'Box', signature: 'Box(x as Dynamic) as Dynamic', returnType: 'Dynamic', description: 'Boxes a primitive value into its corresponding object type.', docsUrl: RUNTIME_DOCS, category: 'type' },
50
+ { name: 'GetInterface', signature: 'GetInterface(obj as Dynamic, ifName as String) as Dynamic', returnType: 'Dynamic', description: 'Returns the named interface of obj, or invalid if obj does not implement it.', docsUrl: UTILITY_DOCS, category: 'type' },
51
+ { name: 'Type', signature: 'Type(obj as Dynamic, version = 3 as Integer) as String', returnType: 'String', description: 'Returns the type name of obj as a string.', docsUrl: RUNTIME_DOCS, category: 'type' },
52
+ // Utility
53
+ { name: 'CreateObject', signature: 'CreateObject(objectName as String, ...args) as Dynamic', returnType: 'Dynamic', description: 'Creates a BrightScript object of the given type.', docsUrl: RUNTIME_DOCS, category: 'utility' },
54
+ { name: 'Eval', signature: 'Eval(code as String) as Dynamic', returnType: 'Dynamic', description: 'Deprecated. Dynamically compiles and executes BrightScript code.', docsUrl: RUNTIME_DOCS, category: 'utility' },
55
+ { name: 'FindMemberFunction', signature: 'FindMemberFunction(obj as Dynamic, funcName as String) as Dynamic', returnType: 'Dynamic', description: 'Returns a function reference for the named member function on obj.', docsUrl: UTILITY_DOCS, category: 'utility' },
56
+ { name: 'FormatDrive', signature: 'FormatDrive(drive as String, fs_type as String) as Boolean', returnType: 'Boolean', description: 'Formats the storage volume at drive with the given filesystem type.', docsUrl: UTILITY_DOCS, category: 'utility' },
57
+ { name: 'GetGlobalAA', signature: 'GetGlobalAA() as Object', returnType: 'Object', description: 'Returns the global associative array shared across all BrightScript code.', docsUrl: RUNTIME_DOCS, category: 'utility' },
58
+ { name: 'GetLastRunCompileError', signature: 'GetLastRunCompileError() as Object', returnType: 'Object', description: 'Returns an roAssociativeArray describing the last compile-time error.', docsUrl: RUNTIME_DOCS, category: 'utility' },
59
+ { name: 'GetLastRunRuntimeError', signature: 'GetLastRunRuntimeError() as Integer', returnType: 'Integer', description: 'Returns the error code from the last Run() call.', docsUrl: RUNTIME_DOCS, category: 'utility' },
60
+ { name: 'RebootSystem', signature: 'RebootSystem()', returnType: 'Void', description: 'Reboots the Roku device.', docsUrl: UTILITY_DOCS, category: 'utility' },
61
+ { name: 'Run', signature: 'Run(filename as String, ...args) as Dynamic', returnType: 'Dynamic', description: 'Deprecated. Compiles and executes a BrightScript source file at runtime.', docsUrl: RUNTIME_DOCS, category: 'utility' },
62
+ { name: 'RunGarbageCollector', signature: 'RunGarbageCollector() as Object', returnType: 'Object', description: 'Runs the BrightScript garbage collector.', docsUrl: UTILITY_DOCS, category: 'utility' },
63
+ { name: 'Sleep', signature: 'Sleep(milliseconds as Integer)', returnType: 'Void', description: 'Pauses execution for the given number of milliseconds.', docsUrl: UTILITY_DOCS, category: 'utility' },
64
+ { name: 'StrToI', signature: 'StrToI(str as String) as Dynamic', returnType: 'Dynamic', description: 'Converts the string str to an integer.', docsUrl: UTILITY_DOCS, category: 'utility' },
65
+ { name: 'UpTime', signature: 'UpTime(dummy as Integer) as Float', returnType: 'Float', description: 'Returns the number of seconds since the system last rebooted.', docsUrl: UTILITY_DOCS, category: 'utility' },
66
+ { name: 'Wait', signature: 'Wait(timeout as Integer, port as Object) as Object', returnType: 'Object', description: 'Waits up to timeout ms for a message on port.', docsUrl: UTILITY_DOCS, category: 'utility' },
67
+ // JSON
68
+ { name: 'FormatJson', signature: 'FormatJson(obj as Object, flags = 0 as Integer) as String', returnType: 'String', description: 'Serializes obj to a JSON string.', docsUrl: UTILITY_DOCS, category: 'utility' },
69
+ { name: 'ParseJson', signature: 'ParseJson(json as String, flags = "" as String) as Dynamic', returnType: 'Dynamic', description: 'Parses a JSON string into a BrightScript object.', docsUrl: UTILITY_DOCS, category: 'utility' },
70
+ // IO
71
+ { name: 'ReadAsciiFile', signature: 'ReadAsciiFile(filePath as String) as String', returnType: 'String', description: 'Reads the content of a text file and returns it as a string.', docsUrl: UTILITY_DOCS, category: 'io' },
72
+ { name: 'WriteAsciiFile', signature: 'WriteAsciiFile(filePath as String, text as String) as Boolean', returnType: 'Boolean', description: 'Writes text to a file at filePath.', docsUrl: UTILITY_DOCS, category: 'io' },
73
+ // Filesystem
74
+ { name: 'CopyFile', signature: 'CopyFile(source as String, destination as String) as Boolean', returnType: 'Boolean', description: 'Copies the file at source to destination.', docsUrl: UTILITY_DOCS, category: 'filesystem' },
75
+ { name: 'CreateDirectory', signature: 'CreateDirectory(path as String) as Boolean', returnType: 'Boolean', description: 'Creates a new directory at path.', docsUrl: UTILITY_DOCS, category: 'filesystem' },
76
+ { name: 'DeleteDirectory', signature: 'DeleteDirectory(path as String) as Boolean', returnType: 'Boolean', description: 'Deletes the directory at path.', docsUrl: UTILITY_DOCS, category: 'filesystem' },
77
+ { name: 'DeleteFile', signature: 'DeleteFile(path as String) as Boolean', returnType: 'Boolean', description: 'Deletes the file at path.', docsUrl: UTILITY_DOCS, category: 'filesystem' },
78
+ { name: 'ListDir', signature: 'ListDir(path as String) as Object', returnType: 'Object', description: 'Returns an roArray of filenames in path.', docsUrl: UTILITY_DOCS, category: 'filesystem' },
79
+ { name: 'MatchFiles', signature: 'MatchFiles(path as String, pattern as String) as Object', returnType: 'Object', description: 'Returns an roArray of filenames matching the glob pattern.', docsUrl: UTILITY_DOCS, category: 'filesystem' },
80
+ { name: 'MoveFile', signature: 'MoveFile(source as String, destination as String) as Boolean', returnType: 'Boolean', description: 'Moves (renames) the file at source to destination.', docsUrl: UTILITY_DOCS, category: 'filesystem' },
81
+ ];
82
+ const _builtinMap = new Map(exports.BRIGHTSCRIPT_BUILTINS.map((b) => [b.name.toLowerCase(), b]));
83
+ function findBuiltin(name) {
84
+ return _builtinMap.get(name.toLowerCase());
85
+ }
86
+ exports.BRIGHTSCRIPT_KEYWORDS = [
87
+ 'and', 'as', 'boolean', 'catch', 'dim', 'double',
88
+ 'dynamic', 'each', 'else', 'elseif', 'end', 'endif', 'endsub', 'endfor',
89
+ 'endfunction', 'endtry', 'endwhile', 'exit', 'exitwhile', 'exitfor', 'false',
90
+ 'float', 'for', 'function', 'goto', 'if', 'in', 'integer', 'invalid', 'let',
91
+ 'interface', 'line_num', 'longinteger', 'mod', 'next', 'not', 'object', 'or', 'print',
92
+ 'rem', 'return', 'step', 'stop', 'string', 'sub', 'tab', 'then', 'throw',
93
+ 'to', 'true', 'try', 'void', 'while',
94
+ ];
95
+ /** Pre-built sets for O(1) lookup */
96
+ exports.builtinNames = new Set(exports.BRIGHTSCRIPT_BUILTINS.map((b) => b.name.toLowerCase()));
97
+ exports.keywordNames = new Set(exports.BRIGHTSCRIPT_KEYWORDS.map((k) => k.toLowerCase()));
98
+ /** Maps lowercased builtin name → { min, max } expected argument counts. */
99
+ exports.builtinArity = (() => {
100
+ const map = new Map();
101
+ for (const b of exports.BRIGHTSCRIPT_BUILTINS) {
102
+ const m = /\(([^)]*)\)/.exec(b.signature);
103
+ if (!m) {
104
+ map.set(b.name.toLowerCase(), { min: 0, max: 0 });
105
+ continue;
106
+ }
107
+ const paramsStr = m[1].trim();
108
+ if (!paramsStr) {
109
+ map.set(b.name.toLowerCase(), { min: 0, max: 0 });
110
+ continue;
111
+ }
112
+ const params = paramsStr.split(',').map((p) => p.trim());
113
+ const hasRest = params.some((p) => p.startsWith('...'));
114
+ let min = 0;
115
+ for (const p of params) {
116
+ if (!p.startsWith('...') && !/=/.test(p))
117
+ min++;
118
+ }
119
+ map.set(b.name.toLowerCase(), { min, max: hasRest ? Infinity : params.length });
120
+ }
121
+ return map;
122
+ })();
123
+ //# sourceMappingURL=builtins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../../src/catalog/builtins.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Valid BrightScript component names for CreateObject() validation.
3
+ *
4
+ * Kept in sync with the extension's src/server/brightscript/components.ts.
5
+ */
6
+ /** Returns the canonical component name if valid, or undefined if not found (case-insensitive). */
7
+ export declare function findComponent(name: string): string | undefined;
8
+ //# sourceMappingURL=components.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/catalog/components.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA4BH,mGAAmG;AACnG,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE9D"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ /**
3
+ * Valid BrightScript component names for CreateObject() validation.
4
+ *
5
+ * Kept in sync with the extension's src/server/brightscript/components.ts.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.findComponent = findComponent;
9
+ const COMPONENT_NAMES = [
10
+ 'roAppInfo', 'roAppManager', 'roAppMemoryMonitor', 'roArray', 'roAssociativeArray',
11
+ 'roAudioGuide', 'roAudioMetadata', 'roAudioPlayer', 'roAudioResource',
12
+ 'roBitmap', 'roBoolean', 'roByteArray',
13
+ 'roCECStatus', 'roChannelStore', 'roCompositor',
14
+ 'roDataGramSocket', 'roDateTime', 'roDeviceCrypto', 'roDeviceInfo', 'roDouble',
15
+ 'roEVPCipher', 'roEVPDigest',
16
+ 'roFileSystem', 'roFloat', 'roFont', 'roFontRegistry', 'roFunction',
17
+ 'roHMAC', 'roHdmiStatus', 'roHttpAgent',
18
+ 'roImageMetadata', 'roInput', 'roInt',
19
+ 'roList', 'roLocalization', 'roLongInteger',
20
+ 'roMessagePort',
21
+ 'roPath',
22
+ 'roRSA', 'roRegex', 'roRegion', 'roRegistry', 'roRegistrySection', 'roRemoteInfo',
23
+ 'roSGNode', 'roSGScreen', 'roScreen', 'roSocketAddress', 'roSprite',
24
+ 'roStreamSocket', 'roString', 'roSystemLog',
25
+ 'roTextToSpeech', 'roTextureManager', 'roTextureRequest', 'roTimespan',
26
+ 'roUrlTransfer',
27
+ 'roVideoPlayer',
28
+ 'roXMLElement', 'roXMLList',
29
+ ];
30
+ const _componentMap = new Map(COMPONENT_NAMES.map((name) => [name.toLowerCase(), name]));
31
+ /** Returns the canonical component name if valid, or undefined if not found (case-insensitive). */
32
+ function findComponent(name) {
33
+ return _componentMap.get(name.toLowerCase());
34
+ }
35
+ //# sourceMappingURL=components.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.js","sourceRoot":"","sources":["../../../src/catalog/components.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AA6BH,sCAEC;AA7BD,MAAM,eAAe,GAAa;IAChC,WAAW,EAAE,cAAc,EAAE,oBAAoB,EAAE,SAAS,EAAE,oBAAoB;IAClF,cAAc,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB;IACrE,UAAU,EAAE,WAAW,EAAE,aAAa;IACtC,aAAa,EAAE,gBAAgB,EAAE,cAAc;IAC/C,kBAAkB,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,UAAU;IAC9E,aAAa,EAAE,aAAa;IAC5B,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,YAAY;IACnE,QAAQ,EAAE,cAAc,EAAE,aAAa;IACvC,iBAAiB,EAAE,SAAS,EAAE,OAAO;IACrC,QAAQ,EAAE,gBAAgB,EAAE,eAAe;IAC3C,eAAe;IACf,QAAQ;IACR,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,mBAAmB,EAAE,cAAc;IACjF,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,UAAU;IACnE,gBAAgB,EAAE,UAAU,EAAE,aAAa;IAC3C,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,YAAY;IACtE,eAAe;IACf,eAAe;IACf,cAAc,EAAE,WAAW;CAC5B,CAAC;AAEF,MAAM,aAAa,GAAG,IAAI,GAAG,CAC3B,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC,CAC1D,CAAC;AAEF,mGAAmG;AACnG,SAAgB,aAAa,CAAC,IAAY;IACxC,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { GeneratedModuleConfig, RuleConfig } from './types';
2
+ export interface LinterConfig {
3
+ rules: RuleConfig;
4
+ sourceDir: string;
5
+ resolveModules: boolean;
6
+ generatedPaths: string[];
7
+ generatedModules: GeneratedModuleConfig[];
8
+ siblingPatterns: string[][];
9
+ }
10
+ export declare const DEFAULT_RULE_CONFIG: RuleConfig;
11
+ export declare const DEFAULT_LINTER_CONFIG: LinterConfig;
12
+ export declare function parseLinterConfig(raw: Record<string, unknown>): LinterConfig;
13
+ /**
14
+ * Resolves linter config from the project root.
15
+ *
16
+ * Priority:
17
+ * 1. Explicit config path (--config flag)
18
+ * 2. kopytko-linter.json in project root
19
+ * 3. .vscode/settings.json (kopytko.lint.* keys)
20
+ * 4. Default config
21
+ */
22
+ export declare function resolveConfig(projectRoot: string, configPath?: string): LinterConfig;
23
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAgB,qBAAqB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG/E,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gBAAgB,EAAE,qBAAqB,EAAE,CAAC;IAC1C,eAAe,EAAE,MAAM,EAAE,EAAE,CAAC;CAC7B;AAED,eAAO,MAAM,mBAAmB,EAAE,UAoBjC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,YAOnC,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAmB5E;AAMD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,CA8BpF"}
@@ -0,0 +1,167 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.DEFAULT_LINTER_CONFIG = exports.DEFAULT_RULE_CONFIG = void 0;
37
+ exports.parseLinterConfig = parseLinterConfig;
38
+ exports.resolveConfig = resolveConfig;
39
+ const fs = __importStar(require("fs"));
40
+ const nodePath = __importStar(require("path"));
41
+ const jsonc_1 = require("./jsonc");
42
+ exports.DEFAULT_RULE_CONFIG = {
43
+ 'import/duplicate': 'error',
44
+ 'import/missing-path': 'error',
45
+ 'import/path-not-absolute': 'warning',
46
+ 'import/wrong-comment-style': 'error',
47
+ 'import/build-generated': 'info',
48
+ 'import/unresolved': 'warning',
49
+ 'import/unused': 'warning',
50
+ 'identifier/undefined-function': 'error',
51
+ 'identifier/wrong-arg-count': 'error',
52
+ 'identifier/undefined-variable': 'error',
53
+ 'identifier/shadows-builtin': 'error',
54
+ 'identifier/unused-parameter': 'hint',
55
+ 'throw/invalid-value': 'warning',
56
+ 'throw/missing-message': 'warning',
57
+ 'createobject/unknown-component': 'warning',
58
+ 'syntax/trailing-comma': 'error',
59
+ 'syntax/flow-outside-loop': 'error',
60
+ 'test/missing-mock-annotation': 'warning',
61
+ 'test/missing-return-ts': 'warning',
62
+ };
63
+ exports.DEFAULT_LINTER_CONFIG = {
64
+ rules: { ...exports.DEFAULT_RULE_CONFIG },
65
+ sourceDir: 'src',
66
+ resolveModules: true,
67
+ generatedPaths: [],
68
+ generatedModules: [],
69
+ siblingPatterns: [],
70
+ };
71
+ function parseLinterConfig(raw) {
72
+ const config = { ...exports.DEFAULT_LINTER_CONFIG };
73
+ if (raw['rules'] && typeof raw['rules'] === 'object') {
74
+ config.rules = { ...exports.DEFAULT_RULE_CONFIG };
75
+ for (const [key, value] of Object.entries(raw['rules'])) {
76
+ if (isValidSeverity(value)) {
77
+ config.rules[key] = value;
78
+ }
79
+ }
80
+ }
81
+ if (typeof raw['sourceDir'] === 'string')
82
+ config.sourceDir = raw['sourceDir'];
83
+ if (typeof raw['resolveModules'] === 'boolean')
84
+ config.resolveModules = raw['resolveModules'];
85
+ if (Array.isArray(raw['generatedPaths']))
86
+ config.generatedPaths = raw['generatedPaths'];
87
+ if (Array.isArray(raw['generatedModules']))
88
+ config.generatedModules = raw['generatedModules'];
89
+ if (Array.isArray(raw['siblingPatterns']))
90
+ config.siblingPatterns = raw['siblingPatterns'];
91
+ return config;
92
+ }
93
+ function isValidSeverity(value) {
94
+ return value === 'error' || value === 'warning' || value === 'info' || value === 'hint' || value === 'off';
95
+ }
96
+ /**
97
+ * Resolves linter config from the project root.
98
+ *
99
+ * Priority:
100
+ * 1. Explicit config path (--config flag)
101
+ * 2. kopytko-linter.json in project root
102
+ * 3. .vscode/settings.json (kopytko.lint.* keys)
103
+ * 4. Default config
104
+ */
105
+ function resolveConfig(projectRoot, configPath) {
106
+ // 1. Explicit config path
107
+ if (configPath) {
108
+ const fullPath = nodePath.isAbsolute(configPath) ? configPath : nodePath.join(projectRoot, configPath);
109
+ try {
110
+ const text = fs.readFileSync(fullPath, 'utf-8');
111
+ return parseLinterConfig((0, jsonc_1.parseJsonc)(text));
112
+ }
113
+ catch {
114
+ throw new Error(`Cannot read config file: ${fullPath}`);
115
+ }
116
+ }
117
+ // 2. kopytko-linter.json
118
+ const linterJsonPath = nodePath.join(projectRoot, 'kopytko-linter.json');
119
+ try {
120
+ const text = fs.readFileSync(linterJsonPath, 'utf-8');
121
+ return parseLinterConfig((0, jsonc_1.parseJsonc)(text));
122
+ }
123
+ catch { /* not found */ }
124
+ // 3. .vscode/settings.json
125
+ const vscodeSettingsPath = nodePath.join(projectRoot, '.vscode', 'settings.json');
126
+ try {
127
+ const text = fs.readFileSync(vscodeSettingsPath, 'utf-8');
128
+ const settings = (0, jsonc_1.parseJsonc)(text);
129
+ const lintConfig = extractVscodeSettings(settings);
130
+ if (lintConfig)
131
+ return lintConfig;
132
+ }
133
+ catch { /* not found */ }
134
+ // 4. Default
135
+ return { ...exports.DEFAULT_LINTER_CONFIG };
136
+ }
137
+ function extractVscodeSettings(settings) {
138
+ const config = { ...exports.DEFAULT_LINTER_CONFIG };
139
+ let found = false;
140
+ for (const [key, value] of Object.entries(settings)) {
141
+ if (!key.startsWith('kopytko.lint.'))
142
+ continue;
143
+ found = true;
144
+ const subKey = key.replace('kopytko.lint.', '');
145
+ if (subKey === 'sourceDir' && typeof value === 'string') {
146
+ config.sourceDir = value;
147
+ }
148
+ else if (subKey === 'resolveModules' && typeof value === 'boolean') {
149
+ config.resolveModules = value;
150
+ }
151
+ else if (subKey === 'generatedPaths' && Array.isArray(value)) {
152
+ config.generatedPaths = value;
153
+ }
154
+ else if (subKey === 'generatedModules' && Array.isArray(value)) {
155
+ config.generatedModules = value;
156
+ }
157
+ else if (subKey === 'siblingPatterns' && Array.isArray(value)) {
158
+ config.siblingPatterns = value;
159
+ }
160
+ else if (subKey.startsWith('rules.') && isValidSeverity(value)) {
161
+ const ruleKey = subKey.replace('rules.', '');
162
+ config.rules[ruleKey] = value;
163
+ }
164
+ }
165
+ return found ? config : null;
166
+ }
167
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,8CAmBC;AAeD,sCA8BC;AA7GD,uCAAyB;AACzB,+CAAiC;AAEjC,mCAAqC;AAWxB,QAAA,mBAAmB,GAAe;IAC7C,kBAAkB,EAAE,OAAO;IAC3B,qBAAqB,EAAE,OAAO;IAC9B,0BAA0B,EAAE,SAAS;IACrC,4BAA4B,EAAE,OAAO;IACrC,wBAAwB,EAAE,MAAM;IAChC,mBAAmB,EAAE,SAAS;IAC9B,eAAe,EAAE,SAAS;IAC1B,+BAA+B,EAAE,OAAO;IACxC,4BAA4B,EAAE,OAAO;IACrC,+BAA+B,EAAE,OAAO;IACxC,4BAA4B,EAAE,OAAO;IACrC,6BAA6B,EAAE,MAAM;IACrC,qBAAqB,EAAE,SAAS;IAChC,uBAAuB,EAAE,SAAS;IAClC,gCAAgC,EAAE,SAAS;IAC3C,uBAAuB,EAAE,OAAO;IAChC,0BAA0B,EAAE,OAAO;IACnC,8BAA8B,EAAE,SAAS;IACzC,wBAAwB,EAAE,SAAS;CACpC,CAAC;AAEW,QAAA,qBAAqB,GAAiB;IACjD,KAAK,EAAE,EAAE,GAAG,2BAAmB,EAAE;IACjC,SAAS,EAAE,KAAK;IAChB,cAAc,EAAE,IAAI;IACpB,cAAc,EAAE,EAAE;IAClB,gBAAgB,EAAE,EAAE;IACpB,eAAe,EAAE,EAAE;CACpB,CAAC;AAEF,SAAgB,iBAAiB,CAAC,GAA4B;IAC5D,MAAM,MAAM,GAAG,EAAE,GAAG,6BAAqB,EAAE,CAAC;IAE5C,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QACrD,MAAM,CAAC,KAAK,GAAG,EAAE,GAAG,2BAAmB,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAA4B,CAAC,EAAE,CAAC;YACnF,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,QAAQ;QAAE,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC;IAC9E,IAAI,OAAO,GAAG,CAAC,gBAAgB,CAAC,KAAK,SAAS;QAAE,MAAM,CAAC,cAAc,GAAG,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC9F,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAAE,MAAM,CAAC,cAAc,GAAG,GAAG,CAAC,gBAAgB,CAAa,CAAC;IACpG,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAAE,MAAM,CAAC,gBAAgB,GAAG,GAAG,CAAC,kBAAkB,CAA4B,CAAC;IACzH,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAAE,MAAM,CAAC,eAAe,GAAG,GAAG,CAAC,iBAAiB,CAAe,CAAC;IAEzG,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,KAAK,CAAC;AAC7G,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,aAAa,CAAC,WAAmB,EAAE,UAAmB;IACpE,0BAA0B;IAC1B,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACvG,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAChD,OAAO,iBAAiB,CAAC,IAAA,kBAAU,EAAC,IAAI,CAAC,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;IACzE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QACtD,OAAO,iBAAiB,CAAC,IAAA,kBAAU,EAAC,IAAI,CAAC,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;IAE3B,2BAA2B;IAC3B,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;IAClF,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,IAAA,kBAAU,EAAC,IAAI,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,UAAU;YAAE,OAAO,UAAU,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;IAE3B,aAAa;IACb,OAAO,EAAE,GAAG,6BAAqB,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAiC;IAC9D,MAAM,MAAM,GAAG,EAAE,GAAG,6BAAqB,EAAE,CAAC;IAC5C,IAAI,KAAK,GAAG,KAAK,CAAC;IAElB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC;YAAE,SAAS;QAC/C,KAAK,GAAG,IAAI,CAAC;QAEb,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAEhD,IAAI,MAAM,KAAK,WAAW,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACxD,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC;aAAM,IAAI,MAAM,KAAK,gBAAgB,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YACrE,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC;QAChC,CAAC;aAAM,IAAI,MAAM,KAAK,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/D,MAAM,CAAC,cAAc,GAAG,KAAiB,CAAC;QAC5C,CAAC;aAAM,IAAI,MAAM,KAAK,kBAAkB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjE,MAAM,CAAC,gBAAgB,GAAG,KAAgC,CAAC;QAC7D,CAAC;aAAM,IAAI,MAAM,KAAK,iBAAiB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,MAAM,CAAC,eAAe,GAAG,KAAmB,CAAC;QAC/C,CAAC;aAAM,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YACjE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC7C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { GeneratedModuleConfig, KopytkoImport } from './types';
2
+ /**
3
+ * Abstraction over cross-file project data.
4
+ *
5
+ * - **CLI mode**: built by ProjectContextBuilder from disk scanning
6
+ * - **Extension mode**: built from LSP caches (documentCache, importResolver, workspaceFunctionIndex)
7
+ */
8
+ export interface LintContext {
9
+ knownFuncNames: Set<string>;
10
+ parseImports(text: string): KopytkoImport[];
11
+ resolveImportPath(importPath: string, fromModule?: string): string | null;
12
+ importExists(importPath: string, fromModule?: string): boolean;
13
+ readFile(filePath: string): string | null;
14
+ parseFunctionsFromFile(filePath: string): string[];
15
+ getSiblingFiles(filePath: string): string[];
16
+ getTestSiblings(filePath: string): string[];
17
+ isTestFile(filePath: string): boolean;
18
+ generatedPaths: string[];
19
+ generatedModules: GeneratedModuleConfig[];
20
+ siblingPatterns: string[][];
21
+ }
22
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAEpE;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAE5B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAAC;IAC5C,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC1E,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/D,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC1C,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACnD,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5C,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5C,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;IAEtC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gBAAgB,EAAE,qBAAqB,EAAE,CAAC;IAC1C,eAAe,EAAE,MAAM,EAAE,EAAE,CAAC;CAC7B"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * kopytko-linter — BrightScript linter for the Kopytko ecosystem.
3
+ *
4
+ * @example
5
+ * ```ts
6
+ * import { lintProject, lintFile, DEFAULT_LINTER_CONFIG } from 'kopytko-linter';
7
+ *
8
+ * // CLI mode: lint a whole project
9
+ * const result = lintProject('/path/to/project');
10
+ *
11
+ * // Library mode: lint a single file with pre-built context
12
+ * const diagnostics = lintFile(filePath, content, context, config);
13
+ * ```
14
+ */
15
+ export { lintFile, lintProject, createFileContext } from './linter';
16
+ export { LinterConfig, DEFAULT_LINTER_CONFIG, DEFAULT_RULE_CONFIG, parseLinterConfig, resolveConfig } from './config';
17
+ export type { LintDiagnostic, LintResult, LintSeverity, GeneratedModuleConfig, KopytkoImport, FunctionDefinition, RuleContext, RuleConfig, RuleFn, RuleDefinition } from './types';
18
+ export type { LintContext } from './context';
19
+ export { formatText } from './output/textFormatter';
20
+ export { formatJson } from './output/jsonFormatter';
21
+ export { formatSarif } from './output/sarifFormatter';
22
+ export { BRIGHTSCRIPT_BUILTINS, BRIGHTSCRIPT_KEYWORDS, findBuiltin, builtinNames, keywordNames } from './catalog/builtins';
23
+ export { findComponent } from './catalog/components';
24
+ export { parseImports, ImportResolver } from './analysis/importParser';
25
+ export { parseFunctionDefs, parseInnerMethodDefs } from './analysis/functionIndex';
26
+ export { isTestFile, getTestBaseName, findTestSiblings } from './analysis/testUtils';
27
+ export { stripStringLiterals, escapeRegex } from './analysis/textUtils';
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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;AACpE,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"}