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,92 @@
1
+ /**
2
+ * Parser for PHP linter configuration files (phpcs.xml, phpstan.neon)
3
+ */
4
+ import { PatternType } from '../core/types.js';
5
+ import { isGlobPattern } from '../validator/glob.js';
6
+ /** Parse phpcs.xml and extract file patterns */
7
+ function parsePhpcsConfig(_filename, content) {
8
+ const patterns = [];
9
+ const lines = content.split('\n');
10
+ // Regex patterns for PHPCS XML
11
+ const filePatternRegexes = [
12
+ // <exclude-pattern>...</exclude-pattern>
13
+ /<exclude-pattern[^>]*>([^<]+)<\/exclude-pattern>/gi,
14
+ // <file>...</file>
15
+ /<file[^>]*>([^<]+)<\/file>/gi,
16
+ // <exclude name="..." />
17
+ /<exclude[^>]*\sname\s*=\s*["']([^"']+)["']/gi
18
+ ];
19
+ for (let i = 0; i < lines.length; i++) {
20
+ const line = lines[i];
21
+ const lineNum = i + 1;
22
+ for (const regex of filePatternRegexes) {
23
+ regex.lastIndex = 0;
24
+ let match;
25
+ while ((match = regex.exec(line)) !== null) {
26
+ const value = match[1]?.trim();
27
+ if (!value)
28
+ continue;
29
+ const type = isGlobPattern(value) ? PatternType.GLOB : PatternType.PATH;
30
+ patterns.push({
31
+ value,
32
+ type,
33
+ line: lineNum,
34
+ column: (match.index ?? 0) + 1
35
+ });
36
+ }
37
+ }
38
+ }
39
+ return patterns;
40
+ }
41
+ /** Parse phpstan.neon and extract file patterns */
42
+ function parsePhpstanConfig(_filename, content) {
43
+ const patterns = [];
44
+ const lines = content.split('\n');
45
+ // Track if we're in a paths/excludes section
46
+ let inPathsSection = false;
47
+ for (let i = 0; i < lines.length; i++) {
48
+ const line = lines[i];
49
+ const lineNum = i + 1;
50
+ const trimmed = line.trim();
51
+ // Check for paths/excludes section headers
52
+ if (/^(paths|excludePaths|scanFiles|scanDirectories|excludes_analyse):/.test(trimmed)) {
53
+ inPathsSection = true;
54
+ continue;
55
+ }
56
+ // End of section (new key at same or lower indent)
57
+ if (inPathsSection && /^\w+:/.test(trimmed) && !trimmed.startsWith('-')) {
58
+ inPathsSection = false;
59
+ continue;
60
+ }
61
+ // Extract list items
62
+ if (inPathsSection) {
63
+ const listMatch = trimmed.match(/^-\s+(?:%[^%]+%\/)?(.+)$/);
64
+ if (listMatch) {
65
+ const value = listMatch[1].trim();
66
+ if (value && !value.startsWith('%')) {
67
+ const type = isGlobPattern(value) ? PatternType.GLOB : PatternType.PATH;
68
+ patterns.push({
69
+ value,
70
+ type,
71
+ line: lineNum,
72
+ column: line.indexOf(value) + 1
73
+ });
74
+ }
75
+ }
76
+ }
77
+ }
78
+ return patterns;
79
+ }
80
+ /** PHPCS parser */
81
+ export const phpcsParser = {
82
+ name: 'phpcs',
83
+ filePatterns: ['phpcs.xml', 'phpcs.xml.dist', '.phpcs.xml', '**/phpcs.xml', '**/phpcs.xml.dist'],
84
+ parse: parsePhpcsConfig
85
+ };
86
+ /** PHPStan parser */
87
+ export const phpstanParser = {
88
+ name: 'phpstan',
89
+ filePatterns: ['phpstan.neon', 'phpstan.neon.dist', '**/phpstan.neon', '**/phpstan.neon.dist'],
90
+ parse: parsePhpstanConfig
91
+ };
92
+ //# sourceMappingURL=php.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"php.js","sourceRoot":"","sources":["../../src/parsers/php.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Parser for Prettier ignore files
3
+ */
4
+ import type { Parser } from '../plugin/types.js';
5
+ /** Prettier ignore file parser */
6
+ export declare const prettierIgnoreParser: Parser;
7
+ //# sourceMappingURL=prettier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prettier.d.ts","sourceRoot":"","sources":["../../src/parsers/prettier.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAyCjD,kCAAkC;AAClC,eAAO,MAAM,oBAAoB,EAAE,MAIlC,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Parser for Prettier ignore files
3
+ */
4
+ import { PatternType } from '../core/types.js';
5
+ import { isGlobPattern } from '../validator/glob.js';
6
+ /** Parse .prettierignore file (same format as .gitignore) */
7
+ function parsePrettierIgnore(_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
+ /** Prettier ignore file parser */
38
+ export const prettierIgnoreParser = {
39
+ name: 'prettierignore',
40
+ filePatterns: ['.prettierignore', '**/.prettierignore'],
41
+ parse: parsePrettierIgnore
42
+ };
43
+ //# sourceMappingURL=prettier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prettier.js","sourceRoot":"","sources":["../../src/parsers/prettier.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,6DAA6D;AAC7D,SAAS,mBAAmB,CAAC,SAAiB,EAAE,OAAe;IAC7D,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,kCAAkC;AAClC,MAAM,CAAC,MAAM,oBAAoB,GAAW;IAC1C,IAAI,EAAE,gBAAgB;IACtB,YAAY,EAAE,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;IACvD,KAAK,EAAE,mBAAmB;CAC3B,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Parser for Pylint configuration files
3
+ * Pylint is a Python static code analysis tool
4
+ */
5
+ import type { Parser } from '../plugin/types.js';
6
+ /** Pylint .pylintrc file parser */
7
+ export declare const pylintrcParser: Parser;
8
+ //# sourceMappingURL=pylint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pylint.d.ts","sourceRoot":"","sources":["../../src/parsers/pylint.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA8FjD,mCAAmC;AACnC,eAAO,MAAM,cAAc,EAAE,MAI5B,CAAC"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Parser for Pylint configuration files
3
+ * Pylint is a Python static code analysis tool
4
+ */
5
+ import { PatternType } from '../core/types.js';
6
+ import { isGlobPattern } from '../validator/glob.js';
7
+ import { looksLikeRegex } from '../validator/regex.js';
8
+ /** Parse .pylintrc or pylintrc file */
9
+ function parsePylint(_filename, content) {
10
+ const patterns = [];
11
+ const lines = content.split('\n');
12
+ let inMasterSection = false;
13
+ let currentKey = '';
14
+ for (let i = 0; i < lines.length; i++) {
15
+ const line = lines[i];
16
+ const lineNum = i + 1;
17
+ const trimmed = line.trim();
18
+ // Check for [MASTER] or [MAIN] section
19
+ if (trimmed === '[MASTER]' || trimmed === '[MAIN]') {
20
+ inMasterSection = true;
21
+ continue;
22
+ }
23
+ // Check if we've entered a different section
24
+ if (trimmed.startsWith('[') &&
25
+ trimmed.endsWith(']') &&
26
+ trimmed !== '[MASTER]' &&
27
+ trimmed !== '[MAIN]') {
28
+ inMasterSection = false;
29
+ continue;
30
+ }
31
+ if (!inMasterSection)
32
+ continue;
33
+ // Skip empty lines and comments
34
+ if (!trimmed || trimmed.startsWith('#') || trimmed.startsWith(';')) {
35
+ continue;
36
+ }
37
+ // Parse key = value
38
+ if (trimmed.includes('=')) {
39
+ const [key, value] = trimmed.split('=').map((s) => s.trim());
40
+ currentKey = key;
41
+ // Check if this is a path-related field
42
+ if (isPathField(key) && value) {
43
+ extractPatterns(value, lineNum, patterns);
44
+ }
45
+ }
46
+ else if (currentKey && isPathField(currentKey)) {
47
+ // Continuation line
48
+ extractPatterns(trimmed, lineNum, patterns);
49
+ }
50
+ }
51
+ return patterns;
52
+ }
53
+ /** Check if a key is a path-related field */
54
+ function isPathField(key) {
55
+ return ['ignore', 'ignore-paths', 'ignore-patterns', 'source-roots'].includes(key);
56
+ }
57
+ /** Extract patterns from a value string */
58
+ function extractPatterns(value, line, patterns) {
59
+ // Split by comma
60
+ const parts = value
61
+ .split(',')
62
+ .map((s) => s.trim())
63
+ .filter(Boolean);
64
+ for (const part of parts) {
65
+ if (!part)
66
+ continue;
67
+ // Determine pattern type
68
+ let type;
69
+ if (looksLikeRegex(part)) {
70
+ type = PatternType.REGEX;
71
+ }
72
+ else if (isGlobPattern(part)) {
73
+ type = PatternType.GLOB;
74
+ }
75
+ else {
76
+ type = PatternType.PATH;
77
+ }
78
+ patterns.push({
79
+ value: part,
80
+ type,
81
+ line,
82
+ column: 1
83
+ });
84
+ }
85
+ }
86
+ /** Pylint .pylintrc file parser */
87
+ export const pylintrcParser = {
88
+ name: 'pylintrc',
89
+ filePatterns: ['.pylintrc', 'pylintrc', '**/.pylintrc', '**/pylintrc'],
90
+ parse: parsePylint
91
+ };
92
+ //# sourceMappingURL=pylint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pylint.js","sourceRoot":"","sources":["../../src/parsers/pylint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Parser for pyproject.toml files
3
+ */
4
+ import type { Parser } from '../plugin/types.js';
5
+ /** pyproject.toml parser */
6
+ export declare const pyprojectParser: Parser;
7
+ //# sourceMappingURL=pyproject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pyproject.d.ts","sourceRoot":"","sources":["../../src/parsers/pyproject.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA0IjD,4BAA4B;AAC5B,eAAO,MAAM,eAAe,EAAE,MAI7B,CAAC"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Parser for pyproject.toml files
3
+ */
4
+ import { parse as parseToml } from 'smol-toml';
5
+ import { PatternType } from '../core/types.js';
6
+ import { isGlobPattern } from '../validator/glob.js';
7
+ import { looksLikeRegex } from '../validator/regex.js';
8
+ /** Known path/pattern fields in pyproject.toml */
9
+ const PATTERN_FIELDS = [
10
+ // pytest
11
+ 'tool.pytest.ini_options.testpaths',
12
+ 'tool.pytest.ini_options.python_files',
13
+ 'tool.pytest.ini_options.python_classes',
14
+ 'tool.pytest.ini_options.python_functions',
15
+ 'tool.pytest.ini_options.norecursedirs',
16
+ // coverage
17
+ 'tool.coverage.run.source',
18
+ 'tool.coverage.run.omit',
19
+ 'tool.coverage.run.include',
20
+ 'tool.coverage.report.exclude_lines',
21
+ 'tool.coverage.report.omit',
22
+ // mypy
23
+ 'tool.mypy.exclude',
24
+ 'tool.mypy.files',
25
+ // ruff
26
+ 'tool.ruff.exclude',
27
+ 'tool.ruff.extend-exclude',
28
+ 'tool.ruff.include',
29
+ 'tool.ruff.lint.exclude',
30
+ // black
31
+ 'tool.black.exclude',
32
+ 'tool.black.extend-exclude',
33
+ 'tool.black.include',
34
+ // isort
35
+ 'tool.isort.skip',
36
+ 'tool.isort.skip_glob',
37
+ 'tool.isort.src_paths'
38
+ ];
39
+ /** Parse pyproject.toml and extract patterns */
40
+ function parsePyproject(_filename, content) {
41
+ const patterns = [];
42
+ let toml;
43
+ try {
44
+ toml = parseToml(content);
45
+ }
46
+ catch {
47
+ return patterns;
48
+ }
49
+ // Track line numbers by parsing the raw content
50
+ const lineMap = buildLineMap(content);
51
+ for (const fieldPath of PATTERN_FIELDS) {
52
+ const value = getNestedValue(toml, fieldPath);
53
+ if (!value)
54
+ continue;
55
+ const values = Array.isArray(value) ? value : [value];
56
+ for (const v of values) {
57
+ if (typeof v !== 'string')
58
+ continue;
59
+ const lineInfo = lineMap.get(v);
60
+ const line = lineInfo?.line ?? 1;
61
+ const column = lineInfo?.column;
62
+ const type = determinePatternType(v, fieldPath);
63
+ patterns.push({
64
+ value: v,
65
+ type,
66
+ line,
67
+ column
68
+ });
69
+ }
70
+ }
71
+ return patterns;
72
+ }
73
+ /** Determine pattern type based on value and field */
74
+ function determinePatternType(value, fieldPath) {
75
+ // Regex fields
76
+ if (fieldPath.includes('exclude_lines') ||
77
+ fieldPath.includes('python_files') ||
78
+ fieldPath.includes('python_classes') ||
79
+ fieldPath.includes('python_functions')) {
80
+ if (looksLikeRegex(value)) {
81
+ return PatternType.REGEX;
82
+ }
83
+ }
84
+ // Glob patterns
85
+ if (isGlobPattern(value)) {
86
+ return PatternType.GLOB;
87
+ }
88
+ // Default to path
89
+ return PatternType.PATH;
90
+ }
91
+ /** Get a nested value from an object using dot notation */
92
+ function getNestedValue(obj, path) {
93
+ const parts = path.split('.');
94
+ let current = obj;
95
+ for (const part of parts) {
96
+ if (current === null || typeof current !== 'object') {
97
+ return undefined;
98
+ }
99
+ current = current[part];
100
+ }
101
+ return current;
102
+ }
103
+ /** Build a map of string values to their line numbers */
104
+ function buildLineMap(content) {
105
+ const map = new Map();
106
+ const lines = content.split('\n');
107
+ for (let i = 0; i < lines.length; i++) {
108
+ const line = lines[i];
109
+ const lineNum = i + 1;
110
+ // Match quoted strings
111
+ const stringMatches = line.matchAll(/"([^"]+)"|'([^']+)'/g);
112
+ for (const match of stringMatches) {
113
+ const value = match[1] || match[2];
114
+ if (value && !map.has(value)) {
115
+ map.set(value, { line: lineNum, column: (match.index ?? 0) + 1 });
116
+ }
117
+ }
118
+ }
119
+ return map;
120
+ }
121
+ /** pyproject.toml parser */
122
+ export const pyprojectParser = {
123
+ name: 'pyproject',
124
+ filePatterns: ['pyproject.toml', '**/pyproject.toml'],
125
+ parse: parsePyproject
126
+ };
127
+ //# sourceMappingURL=pyproject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pyproject.js","sourceRoot":"","sources":["../../src/parsers/pyproject.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,WAAW,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAIvD,kDAAkD;AAClD,MAAM,cAAc,GAAG;IACrB,SAAS;IACT,mCAAmC;IACnC,sCAAsC;IACtC,wCAAwC;IACxC,0CAA0C;IAC1C,uCAAuC;IACvC,WAAW;IACX,0BAA0B;IAC1B,wBAAwB;IACxB,2BAA2B;IAC3B,oCAAoC;IACpC,2BAA2B;IAC3B,OAAO;IACP,mBAAmB;IACnB,iBAAiB;IACjB,OAAO;IACP,mBAAmB;IACnB,0BAA0B;IAC1B,mBAAmB;IACnB,wBAAwB;IACxB,QAAQ;IACR,oBAAoB;IACpB,2BAA2B;IAC3B,oBAAoB;IACpB,QAAQ;IACR,iBAAiB;IACjB,sBAAsB;IACtB,sBAAsB;CACvB,CAAC;AAEF,gDAAgD;AAChD,SAAS,cAAc,CAAC,SAAiB,EAAE,OAAe;IACxD,MAAM,QAAQ,GAAc,EAAE,CAAC;IAE/B,IAAI,IAAe,CAAC;IACpB,IAAI,CAAC;QACH,IAAI,GAAG,SAAS,CAAC,OAAO,CAAc,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,gDAAgD;IAChD,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAEtC,KAAK,MAAM,SAAS,IAAI,cAAc,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACtD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,SAAS;YAEpC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,QAAQ,EAAE,IAAI,IAAI,CAAC,CAAC;YACjC,MAAM,MAAM,GAAG,QAAQ,EAAE,MAAM,CAAC;YAEhC,MAAM,IAAI,GAAG,oBAAoB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YAEhD,QAAQ,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,CAAC;gBACR,IAAI;gBACJ,IAAI;gBACJ,MAAM;aACP,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,sDAAsD;AACtD,SAAS,oBAAoB,CAAC,KAAa,EAAE,SAAiB;IAC5D,eAAe;IACf,IACE,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC;QACnC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC;QAClC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACpC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EACtC,CAAC;QACD,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,WAAW,CAAC,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,WAAW,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED,kBAAkB;IAClB,OAAO,WAAW,CAAC,IAAI,CAAC;AAC1B,CAAC;AAED,2DAA2D;AAC3D,SAAS,cAAc,CAAC,GAAc,EAAE,IAAY;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,OAAO,GAAY,GAAG,CAAC;IAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YACpD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,GAAI,OAAmC,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,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,uBAAuB;QACvB,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;QAC5D,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;YACnC,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,4BAA4B;AAC5B,MAAM,CAAC,MAAM,eAAe,GAAW;IACrC,IAAI,EAAE,WAAW;IACjB,YAAY,EAAE,CAAC,gBAAgB,EAAE,mBAAmB,CAAC;IACrD,KAAK,EAAE,cAAc;CACtB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Parser for Pyright configuration files
3
+ * Pyright is a fast type checker for Python
4
+ */
5
+ import type { Parser } from '../plugin/types.js';
6
+ /** Pyright configuration parser */
7
+ export declare const pyrightParser: Parser;
8
+ //# sourceMappingURL=pyright.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pyright.d.ts","sourceRoot":"","sources":["../../src/parsers/pyright.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAyEjD,mCAAmC;AACnC,eAAO,MAAM,aAAa,EAAE,MAI3B,CAAC"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Parser for Pyright configuration files
3
+ * Pyright is a fast type checker for Python
4
+ */
5
+ import { PatternType } from '../core/types.js';
6
+ import { isGlobPattern } from '../validator/glob.js';
7
+ /** Parse pyrightconfig.json file */
8
+ function parsePyright(_filename, content) {
9
+ const patterns = [];
10
+ let config;
11
+ try {
12
+ config = JSON.parse(content);
13
+ }
14
+ catch {
15
+ return patterns;
16
+ }
17
+ const lineMap = buildLineMap(content);
18
+ // Extract patterns from various fields
19
+ const fields = [config.include, config.exclude, config.ignore, config.extraPaths];
20
+ for (const field of fields) {
21
+ if (!field || !Array.isArray(field))
22
+ continue;
23
+ for (const pattern of field) {
24
+ if (typeof pattern !== 'string')
25
+ continue;
26
+ const lineInfo = lineMap.get(pattern);
27
+ const line = lineInfo?.line ?? 1;
28
+ const column = lineInfo?.column;
29
+ const type = isGlobPattern(pattern) ? PatternType.GLOB : PatternType.PATH;
30
+ patterns.push({
31
+ value: pattern,
32
+ type,
33
+ line,
34
+ column
35
+ });
36
+ }
37
+ }
38
+ return patterns;
39
+ }
40
+ /** Build a map of string values to their line numbers */
41
+ function buildLineMap(content) {
42
+ const map = new Map();
43
+ const lines = content.split('\n');
44
+ for (let i = 0; i < lines.length; i++) {
45
+ const line = lines[i];
46
+ const lineNum = i + 1;
47
+ const stringMatches = line.matchAll(/"([^"]+)"/g);
48
+ for (const match of stringMatches) {
49
+ const value = match[1];
50
+ if (value && !map.has(value)) {
51
+ map.set(value, { line: lineNum, column: (match.index ?? 0) + 1 });
52
+ }
53
+ }
54
+ }
55
+ return map;
56
+ }
57
+ /** Pyright configuration parser */
58
+ export const pyrightParser = {
59
+ name: 'pyright',
60
+ filePatterns: ['pyrightconfig.json', '**/pyrightconfig.json'],
61
+ parse: parsePyright
62
+ };
63
+ //# sourceMappingURL=pyright.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pyright.js","sourceRoot":"","sources":["../../src/parsers/pyright.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAWrD,oCAAoC;AACpC,SAAS,YAAY,CAAC,SAAiB,EAAE,OAAe;IACtD,MAAM,QAAQ,GAAc,EAAE,CAAC;IAE/B,IAAI,MAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAEtC,uCAAuC;IACvC,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAElF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,SAAS;QAE9C,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;YAC5B,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,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,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,mCAAmC;AACnC,MAAM,CAAC,MAAM,aAAa,GAAW;IACnC,IAAI,EAAE,SAAS;IACf,YAAY,EAAE,CAAC,oBAAoB,EAAE,uBAAuB,CAAC;IAC7D,KAAK,EAAE,YAAY;CACpB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Parser for .rubocop.yml files
3
+ */
4
+ import type { Parser } from '../plugin/types.js';
5
+ /** Rubocop parser */
6
+ export declare const rubocopParser: Parser;
7
+ //# sourceMappingURL=rubocop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rubocop.d.ts","sourceRoot":"","sources":["../../src/parsers/rubocop.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA0HjD,qBAAqB;AACrB,eAAO,MAAM,aAAa,EAAE,MAI3B,CAAC"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Parser for .rubocop.yml files
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 .rubocop.yml and extract patterns */
9
+ function parseRubocop(_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
+ // Build line map for accurate line numbers
22
+ const lineMap = buildLineMap(content);
23
+ // Extract patterns from AllCops
24
+ if (config.AllCops) {
25
+ extractPatterns(config.AllCops.Exclude, patterns, lineMap);
26
+ extractPatterns(config.AllCops.Include, patterns, lineMap);
27
+ }
28
+ // Extract patterns from individual cops
29
+ for (const [key, value] of Object.entries(config)) {
30
+ if (key === 'AllCops' || !value || typeof value !== 'object') {
31
+ continue;
32
+ }
33
+ const cop = value;
34
+ if (Array.isArray(cop.Exclude)) {
35
+ extractPatterns(cop.Exclude, patterns, lineMap);
36
+ }
37
+ if (Array.isArray(cop.Include)) {
38
+ extractPatterns(cop.Include, patterns, lineMap);
39
+ }
40
+ }
41
+ return patterns;
42
+ }
43
+ /** Extract patterns from an array of values */
44
+ function extractPatterns(values, patterns, lineMap) {
45
+ if (!Array.isArray(values)) {
46
+ return;
47
+ }
48
+ for (const value of values) {
49
+ if (typeof value !== 'string') {
50
+ continue;
51
+ }
52
+ // Skip special RuboCop patterns like !ruby/regexp
53
+ if (value.startsWith('!ruby/')) {
54
+ continue;
55
+ }
56
+ const lineInfo = lineMap.get(value);
57
+ const line = lineInfo?.line ?? 1;
58
+ const column = lineInfo?.column;
59
+ const type = determinePatternType(value);
60
+ patterns.push({
61
+ value,
62
+ type,
63
+ line,
64
+ column
65
+ });
66
+ }
67
+ }
68
+ /** Determine pattern type */
69
+ function determinePatternType(value) {
70
+ if (looksLikeRegex(value)) {
71
+ return PatternType.REGEX;
72
+ }
73
+ if (isGlobPattern(value)) {
74
+ return PatternType.GLOB;
75
+ }
76
+ return PatternType.PATH;
77
+ }
78
+ /** Build a map of string values to their line numbers */
79
+ function buildLineMap(content) {
80
+ const map = new Map();
81
+ const lines = content.split('\n');
82
+ for (let i = 0; i < lines.length; i++) {
83
+ const line = lines[i];
84
+ const lineNum = i + 1;
85
+ // Match YAML list items: - value or - "value" or - 'value'
86
+ const listMatch = line.match(/^\s*-\s+(?:"([^"]+)"|'([^']+)'|([^\s#]+))/);
87
+ if (listMatch) {
88
+ const value = listMatch[1] || listMatch[2] || listMatch[3];
89
+ if (value && !map.has(value)) {
90
+ map.set(value, { line: lineNum, column: line.indexOf(value) + 1 });
91
+ }
92
+ }
93
+ }
94
+ return map;
95
+ }
96
+ /** Rubocop parser */
97
+ export const rubocopParser = {
98
+ name: 'rubocop',
99
+ filePatterns: ['.rubocop.yml', '**/.rubocop.yml'],
100
+ parse: parseRubocop
101
+ };
102
+ //# sourceMappingURL=rubocop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rubocop.js","sourceRoot":"","sources":["../../src/parsers/rubocop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Parser for Rust configuration files (rustfmt.toml, .rustfmt.toml, clippy.toml)
3
+ */
4
+ import type { Parser } from '../plugin/types.js';
5
+ /** Rustfmt parser */
6
+ export declare const rustfmtParser: Parser;
7
+ /** Clippy parser */
8
+ export declare const clippyParser: Parser;
9
+ //# sourceMappingURL=rust.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rust.d.ts","sourceRoot":"","sources":["../../src/parsers/rust.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAgEjD,qBAAqB;AACrB,eAAO,MAAM,aAAa,EAAE,MAI3B,CAAC;AAEF,oBAAoB;AACpB,eAAO,MAAM,YAAY,EAAE,MAI1B,CAAC"}