lostconf 0.2.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 (201) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/LICENSE +21 -0
  3. package/LICENSE.md +21 -0
  4. package/README.md +445 -0
  5. package/dist/cli.d.ts +6 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +139 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/core/discovery.d.ts +23 -0
  10. package/dist/core/discovery.d.ts.map +1 -0
  11. package/dist/core/discovery.js +75 -0
  12. package/dist/core/discovery.js.map +1 -0
  13. package/dist/core/engine.d.ts +24 -0
  14. package/dist/core/engine.d.ts.map +1 -0
  15. package/dist/core/engine.js +86 -0
  16. package/dist/core/engine.js.map +1 -0
  17. package/dist/core/severity.d.ts +25 -0
  18. package/dist/core/severity.d.ts.map +1 -0
  19. package/dist/core/severity.js +225 -0
  20. package/dist/core/severity.js.map +1 -0
  21. package/dist/core/types.d.ts +77 -0
  22. package/dist/core/types.d.ts.map +1 -0
  23. package/dist/core/types.js +21 -0
  24. package/dist/core/types.js.map +1 -0
  25. package/dist/filetree/scanner.d.ts +26 -0
  26. package/dist/filetree/scanner.d.ts.map +1 -0
  27. package/dist/filetree/scanner.js +71 -0
  28. package/dist/filetree/scanner.js.map +1 -0
  29. package/dist/filetree/tree.d.ts +5 -0
  30. package/dist/filetree/tree.d.ts.map +1 -0
  31. package/dist/filetree/tree.js +5 -0
  32. package/dist/filetree/tree.js.map +1 -0
  33. package/dist/index.d.ts +15 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +18 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/output/formatter.d.ts +12 -0
  38. package/dist/output/formatter.d.ts.map +1 -0
  39. package/dist/output/formatter.js +5 -0
  40. package/dist/output/formatter.js.map +1 -0
  41. package/dist/output/json.d.ts +9 -0
  42. package/dist/output/json.d.ts.map +1 -0
  43. package/dist/output/json.js +14 -0
  44. package/dist/output/json.js.map +1 -0
  45. package/dist/output/sarif.d.ts +9 -0
  46. package/dist/output/sarif.d.ts.map +1 -0
  47. package/dist/output/sarif.js +84 -0
  48. package/dist/output/sarif.js.map +1 -0
  49. package/dist/output/text.d.ts +9 -0
  50. package/dist/output/text.d.ts.map +1 -0
  51. package/dist/output/text.js +87 -0
  52. package/dist/output/text.js.map +1 -0
  53. package/dist/parsers/bandit.d.ts +8 -0
  54. package/dist/parsers/bandit.d.ts.map +1 -0
  55. package/dist/parsers/bandit.js +66 -0
  56. package/dist/parsers/bandit.js.map +1 -0
  57. package/dist/parsers/biome.d.ts +8 -0
  58. package/dist/parsers/biome.d.ts.map +1 -0
  59. package/dist/parsers/biome.js +74 -0
  60. package/dist/parsers/biome.js.map +1 -0
  61. package/dist/parsers/clang.d.ts +9 -0
  62. package/dist/parsers/clang.d.ts.map +1 -0
  63. package/dist/parsers/clang.js +99 -0
  64. package/dist/parsers/clang.js.map +1 -0
  65. package/dist/parsers/deno.d.ts +8 -0
  66. package/dist/parsers/deno.d.ts.map +1 -0
  67. package/dist/parsers/deno.js +73 -0
  68. package/dist/parsers/deno.js.map +1 -0
  69. package/dist/parsers/dotnet.d.ts +9 -0
  70. package/dist/parsers/dotnet.d.ts.map +1 -0
  71. package/dist/parsers/dotnet.js +89 -0
  72. package/dist/parsers/dotnet.js.map +1 -0
  73. package/dist/parsers/elixir.d.ts +7 -0
  74. package/dist/parsers/elixir.d.ts.map +1 -0
  75. package/dist/parsers/elixir.js +59 -0
  76. package/dist/parsers/elixir.js.map +1 -0
  77. package/dist/parsers/eslint.d.ts +7 -0
  78. package/dist/parsers/eslint.d.ts.map +1 -0
  79. package/dist/parsers/eslint.js +43 -0
  80. package/dist/parsers/eslint.js.map +1 -0
  81. package/dist/parsers/flake8.d.ts +10 -0
  82. package/dist/parsers/flake8.d.ts.map +1 -0
  83. package/dist/parsers/flake8.js +89 -0
  84. package/dist/parsers/flake8.js.map +1 -0
  85. package/dist/parsers/gitignore.d.ts +11 -0
  86. package/dist/parsers/gitignore.d.ts.map +1 -0
  87. package/dist/parsers/gitignore.js +72 -0
  88. package/dist/parsers/gitignore.js.map +1 -0
  89. package/dist/parsers/gitleaks.d.ts +8 -0
  90. package/dist/parsers/gitleaks.d.ts.map +1 -0
  91. package/dist/parsers/gitleaks.js +127 -0
  92. package/dist/parsers/gitleaks.js.map +1 -0
  93. package/dist/parsers/golangci.d.ts +7 -0
  94. package/dist/parsers/golangci.d.ts.map +1 -0
  95. package/dist/parsers/golangci.js +73 -0
  96. package/dist/parsers/golangci.js.map +1 -0
  97. package/dist/parsers/hadolint.d.ts +8 -0
  98. package/dist/parsers/hadolint.d.ts.map +1 -0
  99. package/dist/parsers/hadolint.js +95 -0
  100. package/dist/parsers/hadolint.js.map +1 -0
  101. package/dist/parsers/index.d.ts +38 -0
  102. package/dist/parsers/index.d.ts.map +1 -0
  103. package/dist/parsers/index.js +154 -0
  104. package/dist/parsers/index.js.map +1 -0
  105. package/dist/parsers/java.d.ts +11 -0
  106. package/dist/parsers/java.d.ts.map +1 -0
  107. package/dist/parsers/java.js +75 -0
  108. package/dist/parsers/java.js.map +1 -0
  109. package/dist/parsers/jest.d.ts +7 -0
  110. package/dist/parsers/jest.d.ts.map +1 -0
  111. package/dist/parsers/jest.js +118 -0
  112. package/dist/parsers/jest.js.map +1 -0
  113. package/dist/parsers/kotlin.d.ts +7 -0
  114. package/dist/parsers/kotlin.d.ts.map +1 -0
  115. package/dist/parsers/kotlin.js +90 -0
  116. package/dist/parsers/kotlin.js.map +1 -0
  117. package/dist/parsers/markdown.d.ts +7 -0
  118. package/dist/parsers/markdown.d.ts.map +1 -0
  119. package/dist/parsers/markdown.js +40 -0
  120. package/dist/parsers/markdown.js.map +1 -0
  121. package/dist/parsers/php.d.ts +9 -0
  122. package/dist/parsers/php.d.ts.map +1 -0
  123. package/dist/parsers/php.js +92 -0
  124. package/dist/parsers/php.js.map +1 -0
  125. package/dist/parsers/prettier.d.ts +7 -0
  126. package/dist/parsers/prettier.d.ts.map +1 -0
  127. package/dist/parsers/prettier.js +43 -0
  128. package/dist/parsers/prettier.js.map +1 -0
  129. package/dist/parsers/pylint.d.ts +8 -0
  130. package/dist/parsers/pylint.d.ts.map +1 -0
  131. package/dist/parsers/pylint.js +92 -0
  132. package/dist/parsers/pylint.js.map +1 -0
  133. package/dist/parsers/pyproject.d.ts +7 -0
  134. package/dist/parsers/pyproject.d.ts.map +1 -0
  135. package/dist/parsers/pyproject.js +127 -0
  136. package/dist/parsers/pyproject.js.map +1 -0
  137. package/dist/parsers/pyright.d.ts +8 -0
  138. package/dist/parsers/pyright.d.ts.map +1 -0
  139. package/dist/parsers/pyright.js +63 -0
  140. package/dist/parsers/pyright.js.map +1 -0
  141. package/dist/parsers/rubocop.d.ts +7 -0
  142. package/dist/parsers/rubocop.d.ts.map +1 -0
  143. package/dist/parsers/rubocop.js +102 -0
  144. package/dist/parsers/rubocop.js.map +1 -0
  145. package/dist/parsers/rust.d.ts +9 -0
  146. package/dist/parsers/rust.d.ts.map +1 -0
  147. package/dist/parsers/rust.js +68 -0
  148. package/dist/parsers/rust.js.map +1 -0
  149. package/dist/parsers/scala.d.ts +9 -0
  150. package/dist/parsers/scala.d.ts.map +1 -0
  151. package/dist/parsers/scala.js +72 -0
  152. package/dist/parsers/scala.js.map +1 -0
  153. package/dist/parsers/semgrep.d.ts +10 -0
  154. package/dist/parsers/semgrep.d.ts.map +1 -0
  155. package/dist/parsers/semgrep.js +111 -0
  156. package/dist/parsers/semgrep.js.map +1 -0
  157. package/dist/parsers/shellcheck.d.ts +8 -0
  158. package/dist/parsers/shellcheck.d.ts.map +1 -0
  159. package/dist/parsers/shellcheck.js +49 -0
  160. package/dist/parsers/shellcheck.js.map +1 -0
  161. package/dist/parsers/stylelint.d.ts +9 -0
  162. package/dist/parsers/stylelint.d.ts.map +1 -0
  163. package/dist/parsers/stylelint.js +95 -0
  164. package/dist/parsers/stylelint.js.map +1 -0
  165. package/dist/parsers/swift.d.ts +7 -0
  166. package/dist/parsers/swift.d.ts.map +1 -0
  167. package/dist/parsers/swift.js +64 -0
  168. package/dist/parsers/swift.js.map +1 -0
  169. package/dist/parsers/tflint.d.ts +8 -0
  170. package/dist/parsers/tflint.d.ts.map +1 -0
  171. package/dist/parsers/tflint.js +59 -0
  172. package/dist/parsers/tflint.js.map +1 -0
  173. package/dist/parsers/typescript.d.ts +7 -0
  174. package/dist/parsers/typescript.d.ts.map +1 -0
  175. package/dist/parsers/typescript.js +138 -0
  176. package/dist/parsers/typescript.js.map +1 -0
  177. package/dist/parsers/yamllint.d.ts +8 -0
  178. package/dist/parsers/yamllint.d.ts.map +1 -0
  179. package/dist/parsers/yamllint.js +93 -0
  180. package/dist/parsers/yamllint.js.map +1 -0
  181. package/dist/plugin/registry.d.ts +20 -0
  182. package/dist/plugin/registry.d.ts.map +1 -0
  183. package/dist/plugin/registry.js +52 -0
  184. package/dist/plugin/registry.js.map +1 -0
  185. package/dist/plugin/types.d.ts +16 -0
  186. package/dist/plugin/types.d.ts.map +1 -0
  187. package/dist/plugin/types.js +5 -0
  188. package/dist/plugin/types.js.map +1 -0
  189. package/dist/validator/glob.d.ts +16 -0
  190. package/dist/validator/glob.d.ts.map +1 -0
  191. package/dist/validator/glob.js +44 -0
  192. package/dist/validator/glob.js.map +1 -0
  193. package/dist/validator/regex.d.ts +10 -0
  194. package/dist/validator/regex.d.ts.map +1 -0
  195. package/dist/validator/regex.js +45 -0
  196. package/dist/validator/regex.js.map +1 -0
  197. package/dist/validator/validator.d.ts +17 -0
  198. package/dist/validator/validator.d.ts.map +1 -0
  199. package/dist/validator/validator.js +85 -0
  200. package/dist/validator/validator.js.map +1 -0
  201. package/package.json +75 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bandit.js","sourceRoot":"","sources":["../../src/parsers/bandit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAUrD,yBAAyB;AACzB,SAAS,WAAW,CAAC,SAAiB,EAAE,OAAe;IACrD,MAAM,QAAQ,GAAc,EAAE,CAAC;IAE/B,IAAI,MAAoB,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,GAAG,SAAS,CAAC,OAAO,CAAiB,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,2CAA2C;IAC3C,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAEtC,iDAAiD;IACjD,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAErE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,SAAS;QAElD,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;YAC9B,IAAI,OAAO,OAAO,KAAK,QAAQ;gBAAE,SAAS;YAE1C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,QAAQ,EAAE,IAAI,IAAI,CAAC,CAAC;YACjC,MAAM,MAAM,GAAG,QAAQ,EAAE,MAAM,CAAC;YAEhC,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;YAE1E,QAAQ,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,OAAO;gBACd,IAAI;gBACJ,IAAI;gBACJ,MAAM;aACP,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,yDAAyD;AACzD,SAAS,YAAY,CAAC,OAAe;IACnC,MAAM,GAAG,GAAG,IAAI,GAAG,EAA6C,CAAC;IACjE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAEtB,0CAA0C;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC;QAC9D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;YAC/B,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7B,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,iCAAiC;AACjC,MAAM,CAAC,MAAM,YAAY,GAAW;IAClC,IAAI,EAAE,QAAQ;IACd,YAAY,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC;IACvC,KAAK,EAAE,WAAW;CACnB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Parser for Biome configuration files
3
+ * Biome is a fast formatter and linter for JavaScript, TypeScript, JSX, and JSON
4
+ */
5
+ import type { Parser } from '../plugin/types.js';
6
+ /** Biome configuration parser */
7
+ export declare const biomeParser: Parser;
8
+ //# sourceMappingURL=biome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"biome.d.ts","sourceRoot":"","sources":["../../src/parsers/biome.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAgGjD,iCAAiC;AACjC,eAAO,MAAM,WAAW,EAAE,MAIzB,CAAC"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Parser for Biome configuration files
3
+ * Biome is a fast formatter and linter for JavaScript, TypeScript, JSX, and JSON
4
+ */
5
+ import { PatternType } from '../core/types.js';
6
+ import { isGlobPattern } from '../validator/glob.js';
7
+ /** Parse biome.json/biome.jsonc file */
8
+ function parseBiome(_filename, content) {
9
+ const patterns = [];
10
+ let config;
11
+ try {
12
+ // Strip JSONC comments (simple approach - handles // and /* */ comments)
13
+ const cleanContent = content.replace(/\/\*[\s\S]*?\*\//g, '').replace(/\/\/.*/g, '');
14
+ config = JSON.parse(cleanContent);
15
+ }
16
+ catch {
17
+ return patterns;
18
+ }
19
+ // Build a line map to track line numbers
20
+ const lineMap = buildLineMap(content);
21
+ // Extract patterns from various sections
22
+ const sections = [
23
+ config.files?.ignore,
24
+ config.files?.include,
25
+ config.linter?.ignore,
26
+ config.linter?.include,
27
+ config.formatter?.ignore,
28
+ config.formatter?.include
29
+ ];
30
+ for (const section of sections) {
31
+ if (!section || !Array.isArray(section))
32
+ continue;
33
+ for (const pattern of section) {
34
+ if (typeof pattern !== 'string')
35
+ continue;
36
+ const lineInfo = lineMap.get(pattern);
37
+ const line = lineInfo?.line ?? 1;
38
+ const column = lineInfo?.column;
39
+ const type = isGlobPattern(pattern) ? PatternType.GLOB : PatternType.PATH;
40
+ patterns.push({
41
+ value: pattern,
42
+ type,
43
+ line,
44
+ column
45
+ });
46
+ }
47
+ }
48
+ return patterns;
49
+ }
50
+ /** Build a map of string values to their line numbers */
51
+ function buildLineMap(content) {
52
+ const map = new Map();
53
+ const lines = content.split('\n');
54
+ for (let i = 0; i < lines.length; i++) {
55
+ const line = lines[i];
56
+ const lineNum = i + 1;
57
+ // Match quoted strings
58
+ const stringMatches = line.matchAll(/"([^"]+)"/g);
59
+ for (const match of stringMatches) {
60
+ const value = match[1];
61
+ if (value && !map.has(value)) {
62
+ map.set(value, { line: lineNum, column: (match.index ?? 0) + 1 });
63
+ }
64
+ }
65
+ }
66
+ return map;
67
+ }
68
+ /** Biome configuration parser */
69
+ export const biomeParser = {
70
+ name: 'biome',
71
+ filePatterns: ['biome.json', 'biome.jsonc', '**/biome.json', '**/biome.jsonc'],
72
+ parse: parseBiome
73
+ };
74
+ //# sourceMappingURL=biome.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"biome.js","sourceRoot":"","sources":["../../src/parsers/biome.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Parser for C/C++ configuration files (.clang-format, .clang-tidy)
3
+ */
4
+ import type { Parser } from '../plugin/types.js';
5
+ /** Clang-Tidy parser */
6
+ export declare const clangTidyParser: Parser;
7
+ /** Clang-Format parser */
8
+ export declare const clangFormatParser: Parser;
9
+ //# sourceMappingURL=clang.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clang.d.ts","sourceRoot":"","sources":["../../src/parsers/clang.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA2GjD,wBAAwB;AACxB,eAAO,MAAM,eAAe,EAAE,MAI7B,CAAC;AAEF,0BAA0B;AAC1B,eAAO,MAAM,iBAAiB,EAAE,MAI/B,CAAC"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Parser for C/C++ configuration files (.clang-format, .clang-tidy)
3
+ */
4
+ import { parse as parseYaml } from 'yaml';
5
+ import { PatternType } from '../core/types.js';
6
+ import { isGlobPattern } from '../validator/glob.js';
7
+ import { looksLikeRegex } from '../validator/regex.js';
8
+ /** Parse .clang-tidy and extract patterns */
9
+ function parseClangTidy(_filename, content) {
10
+ const patterns = [];
11
+ let config;
12
+ try {
13
+ config = parseYaml(content);
14
+ }
15
+ catch {
16
+ return patterns;
17
+ }
18
+ if (!config || typeof config !== 'object') {
19
+ return patterns;
20
+ }
21
+ const lineMap = buildLineMap(content);
22
+ // Extract header filter regexes
23
+ if (typeof config.HeaderFilterRegex === 'string') {
24
+ const value = config.HeaderFilterRegex;
25
+ const lineInfo = lineMap.get(value);
26
+ patterns.push({
27
+ value,
28
+ type: looksLikeRegex(value) ? PatternType.REGEX : PatternType.GLOB,
29
+ line: lineInfo?.line ?? 1,
30
+ column: lineInfo?.column
31
+ });
32
+ }
33
+ if (typeof config.ExcludeHeaderFilterRegex === 'string') {
34
+ const value = config.ExcludeHeaderFilterRegex;
35
+ const lineInfo = lineMap.get(value);
36
+ patterns.push({
37
+ value,
38
+ type: looksLikeRegex(value) ? PatternType.REGEX : PatternType.GLOB,
39
+ line: lineInfo?.line ?? 1,
40
+ column: lineInfo?.column
41
+ });
42
+ }
43
+ return patterns;
44
+ }
45
+ /** Parse .clang-format - typically doesn't have file patterns, but may have some */
46
+ function parseClangFormat(_filename, content) {
47
+ const patterns = [];
48
+ const lines = content.split('\n');
49
+ for (let i = 0; i < lines.length; i++) {
50
+ const line = lines[i];
51
+ const lineNum = i + 1;
52
+ // Look for file-related directives
53
+ const match = line.match(/^\s*(?:IncludeCategories|SortIncludes).*["']([^"']+)["']/);
54
+ if (match) {
55
+ const value = match[1];
56
+ const type = isGlobPattern(value)
57
+ ? PatternType.GLOB
58
+ : looksLikeRegex(value)
59
+ ? PatternType.REGEX
60
+ : PatternType.PATH;
61
+ patterns.push({
62
+ value,
63
+ type,
64
+ line: lineNum,
65
+ column: line.indexOf(value) + 1
66
+ });
67
+ }
68
+ }
69
+ return patterns;
70
+ }
71
+ function buildLineMap(content) {
72
+ const map = new Map();
73
+ const lines = content.split('\n');
74
+ for (let i = 0; i < lines.length; i++) {
75
+ const line = lines[i];
76
+ const lineNum = i + 1;
77
+ const stringMatches = line.matchAll(/["']([^"']+)["']/g);
78
+ for (const match of stringMatches) {
79
+ const value = match[1];
80
+ if (value && !map.has(value)) {
81
+ map.set(value, { line: lineNum, column: (match.index ?? 0) + 1 });
82
+ }
83
+ }
84
+ }
85
+ return map;
86
+ }
87
+ /** Clang-Tidy parser */
88
+ export const clangTidyParser = {
89
+ name: 'clang-tidy',
90
+ filePatterns: ['.clang-tidy', '**/.clang-tidy'],
91
+ parse: parseClangTidy
92
+ };
93
+ /** Clang-Format parser */
94
+ export const clangFormatParser = {
95
+ name: 'clang-format',
96
+ filePatterns: ['.clang-format', '**/.clang-format', '_clang-format', '**/_clang-format'],
97
+ parse: parseClangFormat
98
+ };
99
+ //# sourceMappingURL=clang.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clang.js","sourceRoot":"","sources":["../../src/parsers/clang.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Parser for Deno configuration files
3
+ * Deno is a modern runtime for JavaScript and TypeScript
4
+ */
5
+ import type { Parser } from '../plugin/types.js';
6
+ /** Deno configuration parser */
7
+ export declare const denoParser: Parser;
8
+ //# sourceMappingURL=deno.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deno.d.ts","sourceRoot":"","sources":["../../src/parsers/deno.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA2FjD,gCAAgC;AAChC,eAAO,MAAM,UAAU,EAAE,MAIxB,CAAC"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Parser for Deno configuration files
3
+ * Deno is a modern runtime for JavaScript and TypeScript
4
+ */
5
+ import { PatternType } from '../core/types.js';
6
+ import { isGlobPattern } from '../validator/glob.js';
7
+ /** Parse deno.json/deno.jsonc file */
8
+ function parseDeno(_filename, content) {
9
+ const patterns = [];
10
+ let config;
11
+ try {
12
+ // Strip JSONC comments (simple approach - handles // and /* */ comments)
13
+ const cleanContent = content.replace(/\/\*[\s\S]*?\*\//g, '').replace(/\/\/.*/g, '');
14
+ config = JSON.parse(cleanContent);
15
+ }
16
+ catch {
17
+ return patterns;
18
+ }
19
+ const lineMap = buildLineMap(content);
20
+ // Extract patterns from various sections
21
+ const sections = [
22
+ config.exclude,
23
+ config.lint?.exclude,
24
+ config.lint?.include,
25
+ config.fmt?.exclude,
26
+ config.fmt?.include,
27
+ config.test?.exclude,
28
+ config.test?.include
29
+ ];
30
+ for (const section of sections) {
31
+ if (!section || !Array.isArray(section))
32
+ continue;
33
+ for (const pattern of section) {
34
+ if (typeof pattern !== 'string')
35
+ continue;
36
+ const lineInfo = lineMap.get(pattern);
37
+ const line = lineInfo?.line ?? 1;
38
+ const column = lineInfo?.column;
39
+ const type = isGlobPattern(pattern) ? PatternType.GLOB : PatternType.PATH;
40
+ patterns.push({
41
+ value: pattern,
42
+ type,
43
+ line,
44
+ column
45
+ });
46
+ }
47
+ }
48
+ return patterns;
49
+ }
50
+ /** Build a map of string values to their line numbers */
51
+ function buildLineMap(content) {
52
+ const map = new Map();
53
+ const lines = content.split('\n');
54
+ for (let i = 0; i < lines.length; i++) {
55
+ const line = lines[i];
56
+ const lineNum = i + 1;
57
+ const stringMatches = line.matchAll(/"([^"]+)"/g);
58
+ for (const match of stringMatches) {
59
+ const value = match[1];
60
+ if (value && !map.has(value)) {
61
+ map.set(value, { line: lineNum, column: (match.index ?? 0) + 1 });
62
+ }
63
+ }
64
+ }
65
+ return map;
66
+ }
67
+ /** Deno configuration parser */
68
+ export const denoParser = {
69
+ name: 'deno',
70
+ filePatterns: ['deno.json', 'deno.jsonc', '**/deno.json', '**/deno.jsonc'],
71
+ parse: parseDeno
72
+ };
73
+ //# sourceMappingURL=deno.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deno.js","sourceRoot":"","sources":["../../src/parsers/deno.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Parser for .NET configuration files (.editorconfig, Directory.Build.props)
3
+ */
4
+ import type { Parser } from '../plugin/types.js';
5
+ /** EditorConfig parser */
6
+ export declare const editorConfigParser: Parser;
7
+ /** Directory.Build.props parser */
8
+ export declare const buildPropsParser: Parser;
9
+ //# sourceMappingURL=dotnet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dotnet.d.ts","sourceRoot":"","sources":["../../src/parsers/dotnet.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAiFjD,0BAA0B;AAC1B,eAAO,MAAM,kBAAkB,EAAE,MAIhC,CAAC;AAEF,mCAAmC;AACnC,eAAO,MAAM,gBAAgB,EAAE,MAS9B,CAAC"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Parser for .NET configuration files (.editorconfig, Directory.Build.props)
3
+ */
4
+ import { PatternType } from '../core/types.js';
5
+ import { isGlobPattern } from '../validator/glob.js';
6
+ /** Parse .editorconfig and extract file patterns */
7
+ function parseEditorConfig(_filename, content) {
8
+ const patterns = [];
9
+ const lines = content.split('\n');
10
+ for (let i = 0; i < lines.length; i++) {
11
+ const line = lines[i];
12
+ const lineNum = i + 1;
13
+ const trimmed = line.trim();
14
+ // Skip comments and empty lines
15
+ if (!trimmed || trimmed.startsWith('#') || trimmed.startsWith(';')) {
16
+ continue;
17
+ }
18
+ // Match section headers like [*.cs] or [*.{js,ts}]
19
+ const sectionMatch = trimmed.match(/^\[([^\]]+)\]$/);
20
+ if (sectionMatch) {
21
+ const value = sectionMatch[1];
22
+ // Skip root indicator
23
+ if (value === '*')
24
+ continue;
25
+ const type = isGlobPattern(value) ? PatternType.GLOB : PatternType.PATH;
26
+ patterns.push({
27
+ value,
28
+ type,
29
+ line: lineNum,
30
+ column: 2 // After the [
31
+ });
32
+ }
33
+ }
34
+ return patterns;
35
+ }
36
+ /** Parse Directory.Build.props and extract file patterns */
37
+ function parseBuildProps(_filename, content) {
38
+ const patterns = [];
39
+ const lines = content.split('\n');
40
+ // Regex patterns for MSBuild file patterns
41
+ const filePatternRegexes = [
42
+ // <Compile Include="..." /> or <Compile Remove="..." />
43
+ /<(?:Compile|Content|None|EmbeddedResource)[^>]*\s(?:Include|Remove|Exclude)\s*=\s*["']([^"']+)["']/gi,
44
+ // <ProjectReference Include="..." />
45
+ /<ProjectReference[^>]*\sInclude\s*=\s*["']([^"']+)["']/gi
46
+ ];
47
+ for (let i = 0; i < lines.length; i++) {
48
+ const line = lines[i];
49
+ const lineNum = i + 1;
50
+ for (const regex of filePatternRegexes) {
51
+ regex.lastIndex = 0;
52
+ let match;
53
+ while ((match = regex.exec(line)) !== null) {
54
+ const value = match[1];
55
+ if (!value)
56
+ continue;
57
+ // Skip MSBuild variables
58
+ if (value.includes('$('))
59
+ continue;
60
+ const type = isGlobPattern(value) ? PatternType.GLOB : PatternType.PATH;
61
+ patterns.push({
62
+ value,
63
+ type,
64
+ line: lineNum,
65
+ column: (match.index ?? 0) + 1
66
+ });
67
+ }
68
+ }
69
+ }
70
+ return patterns;
71
+ }
72
+ /** EditorConfig parser */
73
+ export const editorConfigParser = {
74
+ name: 'editorconfig',
75
+ filePatterns: ['.editorconfig', '**/.editorconfig'],
76
+ parse: parseEditorConfig
77
+ };
78
+ /** Directory.Build.props parser */
79
+ export const buildPropsParser = {
80
+ name: 'msbuild',
81
+ filePatterns: [
82
+ 'Directory.Build.props',
83
+ 'Directory.Build.targets',
84
+ '**/Directory.Build.props',
85
+ '**/Directory.Build.targets'
86
+ ],
87
+ parse: parseBuildProps
88
+ };
89
+ //# sourceMappingURL=dotnet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dotnet.js","sourceRoot":"","sources":["../../src/parsers/dotnet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Parser for Elixir linter configuration (.credo.exs)
3
+ */
4
+ import type { Parser } from '../plugin/types.js';
5
+ /** Credo parser */
6
+ export declare const credoParser: Parser;
7
+ //# sourceMappingURL=elixir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elixir.d.ts","sourceRoot":"","sources":["../../src/parsers/elixir.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAyDjD,mBAAmB;AACnB,eAAO,MAAM,WAAW,EAAE,MAIzB,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Parser for Elixir linter configuration (.credo.exs)
3
+ */
4
+ import { PatternType } from '../core/types.js';
5
+ import { isGlobPattern } from '../validator/glob.js';
6
+ import { looksLikeRegex } from '../validator/regex.js';
7
+ /** Parse .credo.exs and extract patterns */
8
+ function parseCredoConfig(_filename, content) {
9
+ const patterns = [];
10
+ const lines = content.split('\n');
11
+ // Look for included/excluded patterns in Elixir syntax
12
+ // included: [~r"lib/", ~r"src/"]
13
+ // excluded: [~r"test/"]
14
+ for (let i = 0; i < lines.length; i++) {
15
+ const line = lines[i];
16
+ const lineNum = i + 1;
17
+ // Match Elixir regex patterns ~r"..." or ~r/.../ or ~r{...}
18
+ const regexMatches = line.matchAll(/~r["/{}]([^"/{}]+)["/{}]/g);
19
+ for (const match of regexMatches) {
20
+ const value = match[1];
21
+ if (!value)
22
+ continue;
23
+ patterns.push({
24
+ value,
25
+ type: looksLikeRegex(value) ? PatternType.REGEX : PatternType.GLOB,
26
+ line: lineNum,
27
+ column: (match.index ?? 0) + 1
28
+ });
29
+ }
30
+ // Match quoted strings that look like paths
31
+ const stringMatches = line.matchAll(/"([^"]+)"/g);
32
+ for (const match of stringMatches) {
33
+ const value = match[1];
34
+ if (!value)
35
+ continue;
36
+ // Skip if it's part of a config key or looks like a URL
37
+ if (value.includes(':') || value.startsWith('http'))
38
+ continue;
39
+ // Only include if it looks like a path or glob
40
+ if (value.includes('/') || isGlobPattern(value)) {
41
+ const type = isGlobPattern(value) ? PatternType.GLOB : PatternType.PATH;
42
+ patterns.push({
43
+ value,
44
+ type,
45
+ line: lineNum,
46
+ column: (match.index ?? 0) + 1
47
+ });
48
+ }
49
+ }
50
+ }
51
+ return patterns;
52
+ }
53
+ /** Credo parser */
54
+ export const credoParser = {
55
+ name: 'credo',
56
+ filePatterns: ['.credo.exs', '**/.credo.exs'],
57
+ parse: parseCredoConfig
58
+ };
59
+ //# sourceMappingURL=elixir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elixir.js","sourceRoot":"","sources":["../../src/parsers/elixir.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,4CAA4C;AAC5C,SAAS,gBAAgB,CAAC,SAAiB,EAAE,OAAe;IAC1D,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,uDAAuD;IACvD,iCAAiC;IACjC,wBAAwB;IAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAEtB,4DAA4D;QAC5D,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC;QAChE,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,KAAK;gBAAE,SAAS;YAErB,QAAQ,CAAC,IAAI,CAAC;gBACZ,KAAK;gBACL,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI;gBAClE,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC;aAC/B,CAAC,CAAC;QACL,CAAC;QAED,4CAA4C;QAC5C,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAClD,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,KAAK;gBAAE,SAAS;YAErB,wDAAwD;YACxD,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,SAAS;YAE9D,+CAA+C;YAC/C,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChD,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;gBAExE,QAAQ,CAAC,IAAI,CAAC;oBACZ,KAAK;oBACL,IAAI;oBACJ,IAAI,EAAE,OAAO;oBACb,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC;iBAC/B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,mBAAmB;AACnB,MAAM,CAAC,MAAM,WAAW,GAAW;IACjC,IAAI,EAAE,OAAO;IACb,YAAY,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC;IAC7C,KAAK,EAAE,gBAAgB;CACxB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Parser for ESLint ignore files and configs
3
+ */
4
+ import type { Parser } from '../plugin/types.js';
5
+ /** ESLint ignore file parser */
6
+ export declare const eslintIgnoreParser: Parser;
7
+ //# sourceMappingURL=eslint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eslint.d.ts","sourceRoot":"","sources":["../../src/parsers/eslint.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAyCjD,gCAAgC;AAChC,eAAO,MAAM,kBAAkB,EAAE,MAIhC,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Parser for ESLint ignore files and configs
3
+ */
4
+ import { PatternType } from '../core/types.js';
5
+ import { isGlobPattern } from '../validator/glob.js';
6
+ /** Parse .eslintignore file (same format as .gitignore) */
7
+ function parseEslintIgnore(_filename, content) {
8
+ const patterns = [];
9
+ const lines = content.split('\n');
10
+ for (let i = 0; i < lines.length; i++) {
11
+ const line = lines[i];
12
+ const lineNum = i + 1;
13
+ // Skip empty lines and comments
14
+ const trimmed = line.trim();
15
+ if (!trimmed || trimmed.startsWith('#')) {
16
+ continue;
17
+ }
18
+ // Check for negation
19
+ let patternValue = trimmed;
20
+ let negated = false;
21
+ if (patternValue.startsWith('!')) {
22
+ negated = true;
23
+ patternValue = patternValue.slice(1);
24
+ }
25
+ // Determine pattern type
26
+ const type = isGlobPattern(patternValue) ? PatternType.GLOB : PatternType.PATH;
27
+ patterns.push({
28
+ value: patternValue,
29
+ type,
30
+ line: lineNum,
31
+ column: 1,
32
+ negated
33
+ });
34
+ }
35
+ return patterns;
36
+ }
37
+ /** ESLint ignore file parser */
38
+ export const eslintIgnoreParser = {
39
+ name: 'eslintignore',
40
+ filePatterns: ['.eslintignore', '**/.eslintignore'],
41
+ parse: parseEslintIgnore
42
+ };
43
+ //# sourceMappingURL=eslint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eslint.js","sourceRoot":"","sources":["../../src/parsers/eslint.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,2DAA2D;AAC3D,SAAS,iBAAiB,CAAC,SAAiB,EAAE,OAAe;IAC3D,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAEtB,gCAAgC;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,SAAS;QACX,CAAC;QAED,qBAAqB;QACrB,IAAI,YAAY,GAAG,OAAO,CAAC;QAC3B,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,yBAAyB;QACzB,MAAM,IAAI,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;QAE/E,QAAQ,CAAC,IAAI,CAAC;YACZ,KAAK,EAAE,YAAY;YACnB,IAAI;YACJ,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,CAAC;YACT,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,gCAAgC;AAChC,MAAM,CAAC,MAAM,kBAAkB,GAAW;IACxC,IAAI,EAAE,cAAc;IACpB,YAAY,EAAE,CAAC,eAAe,EAAE,kBAAkB,CAAC;IACnD,KAAK,EAAE,iBAAiB;CACzB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Parser for Flake8 configuration files
3
+ * Flake8 is a Python linting tool that checks for PEP 8 compliance
4
+ */
5
+ import type { Parser } from '../plugin/types.js';
6
+ /** Flake8 .flake8 file parser */
7
+ export declare const flake8Parser: Parser;
8
+ /** Flake8 setup.cfg parser (only processes [flake8] section) */
9
+ export declare const flake8SetupCfgParser: Parser;
10
+ //# sourceMappingURL=flake8.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flake8.d.ts","sourceRoot":"","sources":["../../src/parsers/flake8.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAsFjD,iCAAiC;AACjC,eAAO,MAAM,YAAY,EAAE,MAI1B,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,oBAAoB,EAAE,MAIlC,CAAC"}