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.
- package/CHANGELOG.md +83 -0
- package/LICENSE +21 -0
- package/LICENSE.md +21 -0
- package/README.md +445 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +139 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/discovery.d.ts +23 -0
- package/dist/core/discovery.d.ts.map +1 -0
- package/dist/core/discovery.js +75 -0
- package/dist/core/discovery.js.map +1 -0
- package/dist/core/engine.d.ts +24 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +86 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/severity.d.ts +25 -0
- package/dist/core/severity.d.ts.map +1 -0
- package/dist/core/severity.js +225 -0
- package/dist/core/severity.js.map +1 -0
- package/dist/core/types.d.ts +77 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +21 -0
- package/dist/core/types.js.map +1 -0
- package/dist/filetree/scanner.d.ts +26 -0
- package/dist/filetree/scanner.d.ts.map +1 -0
- package/dist/filetree/scanner.js +71 -0
- package/dist/filetree/scanner.js.map +1 -0
- package/dist/filetree/tree.d.ts +5 -0
- package/dist/filetree/tree.d.ts.map +1 -0
- package/dist/filetree/tree.js +5 -0
- package/dist/filetree/tree.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/output/formatter.d.ts +12 -0
- package/dist/output/formatter.d.ts.map +1 -0
- package/dist/output/formatter.js +5 -0
- package/dist/output/formatter.js.map +1 -0
- package/dist/output/json.d.ts +9 -0
- package/dist/output/json.d.ts.map +1 -0
- package/dist/output/json.js +14 -0
- package/dist/output/json.js.map +1 -0
- package/dist/output/sarif.d.ts +9 -0
- package/dist/output/sarif.d.ts.map +1 -0
- package/dist/output/sarif.js +84 -0
- package/dist/output/sarif.js.map +1 -0
- package/dist/output/text.d.ts +9 -0
- package/dist/output/text.d.ts.map +1 -0
- package/dist/output/text.js +87 -0
- package/dist/output/text.js.map +1 -0
- package/dist/parsers/bandit.d.ts +8 -0
- package/dist/parsers/bandit.d.ts.map +1 -0
- package/dist/parsers/bandit.js +66 -0
- package/dist/parsers/bandit.js.map +1 -0
- package/dist/parsers/biome.d.ts +8 -0
- package/dist/parsers/biome.d.ts.map +1 -0
- package/dist/parsers/biome.js +74 -0
- package/dist/parsers/biome.js.map +1 -0
- package/dist/parsers/clang.d.ts +9 -0
- package/dist/parsers/clang.d.ts.map +1 -0
- package/dist/parsers/clang.js +99 -0
- package/dist/parsers/clang.js.map +1 -0
- package/dist/parsers/deno.d.ts +8 -0
- package/dist/parsers/deno.d.ts.map +1 -0
- package/dist/parsers/deno.js +73 -0
- package/dist/parsers/deno.js.map +1 -0
- package/dist/parsers/dotnet.d.ts +9 -0
- package/dist/parsers/dotnet.d.ts.map +1 -0
- package/dist/parsers/dotnet.js +89 -0
- package/dist/parsers/dotnet.js.map +1 -0
- package/dist/parsers/elixir.d.ts +7 -0
- package/dist/parsers/elixir.d.ts.map +1 -0
- package/dist/parsers/elixir.js +59 -0
- package/dist/parsers/elixir.js.map +1 -0
- package/dist/parsers/eslint.d.ts +7 -0
- package/dist/parsers/eslint.d.ts.map +1 -0
- package/dist/parsers/eslint.js +43 -0
- package/dist/parsers/eslint.js.map +1 -0
- package/dist/parsers/flake8.d.ts +10 -0
- package/dist/parsers/flake8.d.ts.map +1 -0
- package/dist/parsers/flake8.js +89 -0
- package/dist/parsers/flake8.js.map +1 -0
- package/dist/parsers/gitignore.d.ts +11 -0
- package/dist/parsers/gitignore.d.ts.map +1 -0
- package/dist/parsers/gitignore.js +72 -0
- package/dist/parsers/gitignore.js.map +1 -0
- package/dist/parsers/gitleaks.d.ts +8 -0
- package/dist/parsers/gitleaks.d.ts.map +1 -0
- package/dist/parsers/gitleaks.js +127 -0
- package/dist/parsers/gitleaks.js.map +1 -0
- package/dist/parsers/golangci.d.ts +7 -0
- package/dist/parsers/golangci.d.ts.map +1 -0
- package/dist/parsers/golangci.js +73 -0
- package/dist/parsers/golangci.js.map +1 -0
- package/dist/parsers/hadolint.d.ts +8 -0
- package/dist/parsers/hadolint.d.ts.map +1 -0
- package/dist/parsers/hadolint.js +95 -0
- package/dist/parsers/hadolint.js.map +1 -0
- package/dist/parsers/index.d.ts +38 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +154 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/parsers/java.d.ts +11 -0
- package/dist/parsers/java.d.ts.map +1 -0
- package/dist/parsers/java.js +75 -0
- package/dist/parsers/java.js.map +1 -0
- package/dist/parsers/jest.d.ts +7 -0
- package/dist/parsers/jest.d.ts.map +1 -0
- package/dist/parsers/jest.js +118 -0
- package/dist/parsers/jest.js.map +1 -0
- package/dist/parsers/kotlin.d.ts +7 -0
- package/dist/parsers/kotlin.d.ts.map +1 -0
- package/dist/parsers/kotlin.js +90 -0
- package/dist/parsers/kotlin.js.map +1 -0
- package/dist/parsers/markdown.d.ts +7 -0
- package/dist/parsers/markdown.d.ts.map +1 -0
- package/dist/parsers/markdown.js +40 -0
- package/dist/parsers/markdown.js.map +1 -0
- package/dist/parsers/php.d.ts +9 -0
- package/dist/parsers/php.d.ts.map +1 -0
- package/dist/parsers/php.js +92 -0
- package/dist/parsers/php.js.map +1 -0
- package/dist/parsers/prettier.d.ts +7 -0
- package/dist/parsers/prettier.d.ts.map +1 -0
- package/dist/parsers/prettier.js +43 -0
- package/dist/parsers/prettier.js.map +1 -0
- package/dist/parsers/pylint.d.ts +8 -0
- package/dist/parsers/pylint.d.ts.map +1 -0
- package/dist/parsers/pylint.js +92 -0
- package/dist/parsers/pylint.js.map +1 -0
- package/dist/parsers/pyproject.d.ts +7 -0
- package/dist/parsers/pyproject.d.ts.map +1 -0
- package/dist/parsers/pyproject.js +127 -0
- package/dist/parsers/pyproject.js.map +1 -0
- package/dist/parsers/pyright.d.ts +8 -0
- package/dist/parsers/pyright.d.ts.map +1 -0
- package/dist/parsers/pyright.js +63 -0
- package/dist/parsers/pyright.js.map +1 -0
- package/dist/parsers/rubocop.d.ts +7 -0
- package/dist/parsers/rubocop.d.ts.map +1 -0
- package/dist/parsers/rubocop.js +102 -0
- package/dist/parsers/rubocop.js.map +1 -0
- package/dist/parsers/rust.d.ts +9 -0
- package/dist/parsers/rust.d.ts.map +1 -0
- package/dist/parsers/rust.js +68 -0
- package/dist/parsers/rust.js.map +1 -0
- package/dist/parsers/scala.d.ts +9 -0
- package/dist/parsers/scala.d.ts.map +1 -0
- package/dist/parsers/scala.js +72 -0
- package/dist/parsers/scala.js.map +1 -0
- package/dist/parsers/semgrep.d.ts +10 -0
- package/dist/parsers/semgrep.d.ts.map +1 -0
- package/dist/parsers/semgrep.js +111 -0
- package/dist/parsers/semgrep.js.map +1 -0
- package/dist/parsers/shellcheck.d.ts +8 -0
- package/dist/parsers/shellcheck.d.ts.map +1 -0
- package/dist/parsers/shellcheck.js +49 -0
- package/dist/parsers/shellcheck.js.map +1 -0
- package/dist/parsers/stylelint.d.ts +9 -0
- package/dist/parsers/stylelint.d.ts.map +1 -0
- package/dist/parsers/stylelint.js +95 -0
- package/dist/parsers/stylelint.js.map +1 -0
- package/dist/parsers/swift.d.ts +7 -0
- package/dist/parsers/swift.d.ts.map +1 -0
- package/dist/parsers/swift.js +64 -0
- package/dist/parsers/swift.js.map +1 -0
- package/dist/parsers/tflint.d.ts +8 -0
- package/dist/parsers/tflint.d.ts.map +1 -0
- package/dist/parsers/tflint.js +59 -0
- package/dist/parsers/tflint.js.map +1 -0
- package/dist/parsers/typescript.d.ts +7 -0
- package/dist/parsers/typescript.d.ts.map +1 -0
- package/dist/parsers/typescript.js +138 -0
- package/dist/parsers/typescript.js.map +1 -0
- package/dist/parsers/yamllint.d.ts +8 -0
- package/dist/parsers/yamllint.d.ts.map +1 -0
- package/dist/parsers/yamllint.js +93 -0
- package/dist/parsers/yamllint.js.map +1 -0
- package/dist/plugin/registry.d.ts +20 -0
- package/dist/plugin/registry.d.ts.map +1 -0
- package/dist/plugin/registry.js +52 -0
- package/dist/plugin/registry.js.map +1 -0
- package/dist/plugin/types.d.ts +16 -0
- package/dist/plugin/types.d.ts.map +1 -0
- package/dist/plugin/types.js +5 -0
- package/dist/plugin/types.js.map +1 -0
- package/dist/validator/glob.d.ts +16 -0
- package/dist/validator/glob.d.ts.map +1 -0
- package/dist/validator/glob.js +44 -0
- package/dist/validator/glob.js.map +1 -0
- package/dist/validator/regex.d.ts +10 -0
- package/dist/validator/regex.d.ts.map +1 -0
- package/dist/validator/regex.js +45 -0
- package/dist/validator/regex.js.map +1 -0
- package/dist/validator/validator.d.ts +17 -0
- package/dist/validator/validator.d.ts.map +1 -0
- package/dist/validator/validator.js +85 -0
- package/dist/validator/validator.js.map +1 -0
- package/package.json +75 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser for Rust configuration files (rustfmt.toml, .rustfmt.toml, clippy.toml)
|
|
3
|
+
*/
|
|
4
|
+
import { parse as parseToml } from 'smol-toml';
|
|
5
|
+
import { PatternType } from '../core/types.js';
|
|
6
|
+
import { isGlobPattern } from '../validator/glob.js';
|
|
7
|
+
/** Known path/pattern fields in Rust config files */
|
|
8
|
+
const PATTERN_FIELDS = ['ignore', 'skip_children', 'exclude', 'include'];
|
|
9
|
+
/** Parse rustfmt.toml/clippy.toml and extract patterns */
|
|
10
|
+
function parseRustConfig(_filename, content) {
|
|
11
|
+
const patterns = [];
|
|
12
|
+
let config;
|
|
13
|
+
try {
|
|
14
|
+
config = parseToml(content);
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return patterns;
|
|
18
|
+
}
|
|
19
|
+
const lineMap = buildLineMap(content);
|
|
20
|
+
for (const field of PATTERN_FIELDS) {
|
|
21
|
+
const value = config[field];
|
|
22
|
+
if (!value)
|
|
23
|
+
continue;
|
|
24
|
+
const values = Array.isArray(value) ? value : [value];
|
|
25
|
+
for (const v of values) {
|
|
26
|
+
if (typeof v !== 'string')
|
|
27
|
+
continue;
|
|
28
|
+
const lineInfo = lineMap.get(v);
|
|
29
|
+
const type = isGlobPattern(v) ? PatternType.GLOB : PatternType.PATH;
|
|
30
|
+
patterns.push({
|
|
31
|
+
value: v,
|
|
32
|
+
type,
|
|
33
|
+
line: lineInfo?.line ?? 1,
|
|
34
|
+
column: lineInfo?.column
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return patterns;
|
|
39
|
+
}
|
|
40
|
+
function buildLineMap(content) {
|
|
41
|
+
const map = new Map();
|
|
42
|
+
const lines = content.split('\n');
|
|
43
|
+
for (let i = 0; i < lines.length; i++) {
|
|
44
|
+
const line = lines[i];
|
|
45
|
+
const lineNum = i + 1;
|
|
46
|
+
const stringMatches = line.matchAll(/"([^"]+)"|'([^']+)'/g);
|
|
47
|
+
for (const match of stringMatches) {
|
|
48
|
+
const value = match[1] || match[2];
|
|
49
|
+
if (value && !map.has(value)) {
|
|
50
|
+
map.set(value, { line: lineNum, column: (match.index ?? 0) + 1 });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return map;
|
|
55
|
+
}
|
|
56
|
+
/** Rustfmt parser */
|
|
57
|
+
export const rustfmtParser = {
|
|
58
|
+
name: 'rustfmt',
|
|
59
|
+
filePatterns: ['rustfmt.toml', '.rustfmt.toml', '**/rustfmt.toml', '**/.rustfmt.toml'],
|
|
60
|
+
parse: parseRustConfig
|
|
61
|
+
};
|
|
62
|
+
/** Clippy parser */
|
|
63
|
+
export const clippyParser = {
|
|
64
|
+
name: 'clippy',
|
|
65
|
+
filePatterns: ['clippy.toml', '.clippy.toml', '**/clippy.toml', '**/.clippy.toml'],
|
|
66
|
+
parse: parseRustConfig
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=rust.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rust.js","sourceRoot":"","sources":["../../src/parsers/rust.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;AAIrD,qDAAqD;AACrD,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAEzE,0DAA0D;AAC1D,SAAS,eAAe,CAAC,SAAiB,EAAE,OAAe;IACzD,MAAM,QAAQ,GAAc,EAAE,CAAC;IAE/B,IAAI,MAAkB,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,GAAG,SAAS,CAAC,OAAO,CAAe,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAEtC,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,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,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;YAEpE,QAAQ,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,CAAC;gBACR,IAAI;gBACJ,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC;gBACzB,MAAM,EAAE,QAAQ,EAAE,MAAM;aACzB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,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,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,qBAAqB;AACrB,MAAM,CAAC,MAAM,aAAa,GAAW;IACnC,IAAI,EAAE,SAAS;IACf,YAAY,EAAE,CAAC,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,CAAC;IACtF,KAAK,EAAE,eAAe;CACvB,CAAC;AAEF,oBAAoB;AACpB,MAAM,CAAC,MAAM,YAAY,GAAW;IAClC,IAAI,EAAE,QAAQ;IACd,YAAY,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,CAAC;IAClF,KAAK,EAAE,eAAe;CACvB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser for Scala configuration files (.scalafmt.conf, .scalafix.conf)
|
|
3
|
+
*/
|
|
4
|
+
import type { Parser } from '../plugin/types.js';
|
|
5
|
+
/** Scalafmt parser */
|
|
6
|
+
export declare const scalafmtParser: Parser;
|
|
7
|
+
/** Scalafix parser */
|
|
8
|
+
export declare const scalafixParser: Parser;
|
|
9
|
+
//# sourceMappingURL=scala.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scala.d.ts","sourceRoot":"","sources":["../../src/parsers/scala.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAgEjD,sBAAsB;AACtB,eAAO,MAAM,cAAc,EAAE,MAI5B,CAAC;AAEF,sBAAsB;AACtB,eAAO,MAAM,cAAc,EAAE,MAI5B,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser for Scala configuration files (.scalafmt.conf, .scalafix.conf)
|
|
3
|
+
*/
|
|
4
|
+
import { PatternType } from '../core/types.js';
|
|
5
|
+
import { isGlobPattern } from '../validator/glob.js';
|
|
6
|
+
import { looksLikeRegex } from '../validator/regex.js';
|
|
7
|
+
/** Parse .scalafmt.conf (HOCON format - simplified parsing) */
|
|
8
|
+
function parseScalafmtConfig(_filename, content) {
|
|
9
|
+
const patterns = [];
|
|
10
|
+
const lines = content.split('\n');
|
|
11
|
+
// Look for project.excludeFilters, project.includeFilters, etc.
|
|
12
|
+
let inFiltersSection = false;
|
|
13
|
+
let bracketDepth = 0;
|
|
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 filter section start
|
|
19
|
+
if (/(?:excludeFilters|includeFilters|excludePaths)\s*[=:]/.test(trimmed)) {
|
|
20
|
+
inFiltersSection = true;
|
|
21
|
+
bracketDepth = 0;
|
|
22
|
+
}
|
|
23
|
+
// Track bracket depth
|
|
24
|
+
bracketDepth += (trimmed.match(/\[/g) || []).length;
|
|
25
|
+
bracketDepth -= (trimmed.match(/\]/g) || []).length;
|
|
26
|
+
if (inFiltersSection) {
|
|
27
|
+
// End of section
|
|
28
|
+
if (bracketDepth <= 0 && !trimmed.includes('[')) {
|
|
29
|
+
inFiltersSection = false;
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
// Extract quoted strings (patterns)
|
|
33
|
+
const stringMatches = line.matchAll(/"([^"]+)"/g);
|
|
34
|
+
for (const match of stringMatches) {
|
|
35
|
+
const value = match[1];
|
|
36
|
+
if (!value)
|
|
37
|
+
continue;
|
|
38
|
+
// Determine type
|
|
39
|
+
let type;
|
|
40
|
+
if (looksLikeRegex(value)) {
|
|
41
|
+
type = PatternType.REGEX;
|
|
42
|
+
}
|
|
43
|
+
else if (isGlobPattern(value)) {
|
|
44
|
+
type = PatternType.GLOB;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
type = PatternType.PATH;
|
|
48
|
+
}
|
|
49
|
+
patterns.push({
|
|
50
|
+
value,
|
|
51
|
+
type,
|
|
52
|
+
line: lineNum,
|
|
53
|
+
column: (match.index ?? 0) + 1
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return patterns;
|
|
59
|
+
}
|
|
60
|
+
/** Scalafmt parser */
|
|
61
|
+
export const scalafmtParser = {
|
|
62
|
+
name: 'scalafmt',
|
|
63
|
+
filePatterns: ['.scalafmt.conf', '**/.scalafmt.conf'],
|
|
64
|
+
parse: parseScalafmtConfig
|
|
65
|
+
};
|
|
66
|
+
/** Scalafix parser */
|
|
67
|
+
export const scalafixParser = {
|
|
68
|
+
name: 'scalafix',
|
|
69
|
+
filePatterns: ['.scalafix.conf', '**/.scalafix.conf'],
|
|
70
|
+
parse: parseScalafmtConfig
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=scala.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scala.js","sourceRoot":"","sources":["../../src/parsers/scala.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser for Semgrep configuration files
|
|
3
|
+
* Semgrep is a fast, open-source static analysis tool for finding bugs and enforcing code standards
|
|
4
|
+
*/
|
|
5
|
+
import type { Parser } from '../plugin/types.js';
|
|
6
|
+
/** Semgrep YAML config parser */
|
|
7
|
+
export declare const semgrepYmlParser: Parser;
|
|
8
|
+
/** Semgrep ignore file parser */
|
|
9
|
+
export declare const semgrepIgnoreParser: Parser;
|
|
10
|
+
//# sourceMappingURL=semgrep.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semgrep.d.ts","sourceRoot":"","sources":["../../src/parsers/semgrep.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA2HjD,iCAAiC;AACjC,eAAO,MAAM,gBAAgB,EAAE,MAI9B,CAAC;AAEF,iCAAiC;AACjC,eAAO,MAAM,mBAAmB,EAAE,MAIjC,CAAC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser for Semgrep configuration files
|
|
3
|
+
* Semgrep is a fast, open-source static analysis tool for finding bugs and enforcing code standards
|
|
4
|
+
*/
|
|
5
|
+
import { parse as parseYaml } from 'yaml';
|
|
6
|
+
import { PatternType } from '../core/types.js';
|
|
7
|
+
import { isGlobPattern } from '../validator/glob.js';
|
|
8
|
+
/** Parse .semgrep.yml file */
|
|
9
|
+
function parseSemgrepYml(_filename, content) {
|
|
10
|
+
const patterns = [];
|
|
11
|
+
let config;
|
|
12
|
+
try {
|
|
13
|
+
config = parseYaml(content);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return patterns;
|
|
17
|
+
}
|
|
18
|
+
const lineMap = buildLineMap(content);
|
|
19
|
+
// Extract patterns from rules
|
|
20
|
+
if (config.rules && Array.isArray(config.rules)) {
|
|
21
|
+
for (const rule of config.rules) {
|
|
22
|
+
if (!rule.paths)
|
|
23
|
+
continue;
|
|
24
|
+
const pathSections = [rule.paths.exclude, rule.paths.include];
|
|
25
|
+
for (const section of pathSections) {
|
|
26
|
+
if (!section || !Array.isArray(section))
|
|
27
|
+
continue;
|
|
28
|
+
for (const pattern of section) {
|
|
29
|
+
if (typeof pattern !== 'string')
|
|
30
|
+
continue;
|
|
31
|
+
const lineInfo = lineMap.get(pattern);
|
|
32
|
+
const line = lineInfo?.line ?? 1;
|
|
33
|
+
const column = lineInfo?.column;
|
|
34
|
+
const type = isGlobPattern(pattern) ? PatternType.GLOB : PatternType.PATH;
|
|
35
|
+
patterns.push({
|
|
36
|
+
value: pattern,
|
|
37
|
+
type,
|
|
38
|
+
line,
|
|
39
|
+
column
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return patterns;
|
|
46
|
+
}
|
|
47
|
+
/** Parse .semgrepignore file (gitignore format) */
|
|
48
|
+
function parseSemgrepIgnore(_filename, content) {
|
|
49
|
+
const patterns = [];
|
|
50
|
+
const lines = content.split('\n');
|
|
51
|
+
for (let i = 0; i < lines.length; i++) {
|
|
52
|
+
const line = lines[i];
|
|
53
|
+
const lineNum = i + 1;
|
|
54
|
+
const trimmed = line.trim();
|
|
55
|
+
if (!trimmed || trimmed.startsWith('#')) {
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
let patternValue = trimmed;
|
|
59
|
+
let negated = false;
|
|
60
|
+
if (patternValue.startsWith('!')) {
|
|
61
|
+
negated = true;
|
|
62
|
+
patternValue = patternValue.slice(1);
|
|
63
|
+
}
|
|
64
|
+
const type = isGlobPattern(patternValue) ? PatternType.GLOB : PatternType.PATH;
|
|
65
|
+
patterns.push({
|
|
66
|
+
value: patternValue,
|
|
67
|
+
type,
|
|
68
|
+
line: lineNum,
|
|
69
|
+
column: 1,
|
|
70
|
+
negated
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
return patterns;
|
|
74
|
+
}
|
|
75
|
+
/** Build a map of string values to their line numbers */
|
|
76
|
+
function buildLineMap(content) {
|
|
77
|
+
const map = new Map();
|
|
78
|
+
const lines = content.split('\n');
|
|
79
|
+
for (let i = 0; i < lines.length; i++) {
|
|
80
|
+
const line = lines[i];
|
|
81
|
+
const lineNum = i + 1;
|
|
82
|
+
const quotedMatches = line.matchAll(/["']([^"']+)["']/g);
|
|
83
|
+
for (const match of quotedMatches) {
|
|
84
|
+
const value = match[1];
|
|
85
|
+
if (value && !map.has(value)) {
|
|
86
|
+
map.set(value, { line: lineNum, column: (match.index ?? 0) + 1 });
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const unquotedMatch = line.match(/:\s*-\s*([^\s#]+)/);
|
|
90
|
+
if (unquotedMatch && unquotedMatch[1]) {
|
|
91
|
+
const value = unquotedMatch[1].trim();
|
|
92
|
+
if (value && !map.has(value)) {
|
|
93
|
+
map.set(value, { line: lineNum, column: (unquotedMatch.index ?? 0) + 1 });
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return map;
|
|
98
|
+
}
|
|
99
|
+
/** Semgrep YAML config parser */
|
|
100
|
+
export const semgrepYmlParser = {
|
|
101
|
+
name: 'semgrep',
|
|
102
|
+
filePatterns: ['.semgrep.yml', '.semgrep.yaml', '**/.semgrep.yml', '**/.semgrep.yaml'],
|
|
103
|
+
parse: parseSemgrepYml
|
|
104
|
+
};
|
|
105
|
+
/** Semgrep ignore file parser */
|
|
106
|
+
export const semgrepIgnoreParser = {
|
|
107
|
+
name: 'semgrepignore',
|
|
108
|
+
filePatterns: ['.semgrepignore', '**/.semgrepignore'],
|
|
109
|
+
parse: parseSemgrepIgnore
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=semgrep.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semgrep.js","sourceRoot":"","sources":["../../src/parsers/semgrep.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser for ShellCheck configuration files
|
|
3
|
+
* ShellCheck is a static analysis tool for shell scripts
|
|
4
|
+
*/
|
|
5
|
+
import type { Parser } from '../plugin/types.js';
|
|
6
|
+
/** ShellCheck .shellcheckrc file parser */
|
|
7
|
+
export declare const shellcheckParser: Parser;
|
|
8
|
+
//# sourceMappingURL=shellcheck.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shellcheck.d.ts","sourceRoot":"","sources":["../../src/parsers/shellcheck.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA+CjD,2CAA2C;AAC3C,eAAO,MAAM,gBAAgB,EAAE,MAI9B,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser for ShellCheck configuration files
|
|
3
|
+
* ShellCheck is a static analysis tool for shell scripts
|
|
4
|
+
*/
|
|
5
|
+
import { PatternType } from '../core/types.js';
|
|
6
|
+
import { isGlobPattern } from '../validator/glob.js';
|
|
7
|
+
/** Parse .shellcheckrc file */
|
|
8
|
+
function parseShellcheck(_filename, content) {
|
|
9
|
+
const patterns = [];
|
|
10
|
+
const lines = content.split('\n');
|
|
11
|
+
for (let i = 0; i < lines.length; i++) {
|
|
12
|
+
const line = lines[i];
|
|
13
|
+
const lineNum = i + 1;
|
|
14
|
+
const trimmed = line.trim();
|
|
15
|
+
// Skip empty lines and comments
|
|
16
|
+
if (!trimmed || trimmed.startsWith('#')) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
// Parse key=value format
|
|
20
|
+
if (trimmed.includes('=')) {
|
|
21
|
+
const [key, value] = trimmed.split('=').map((s) => s.trim());
|
|
22
|
+
// Check if this is a source-path directive
|
|
23
|
+
if (key === 'source-path' && value) {
|
|
24
|
+
// source-path can contain multiple paths separated by :
|
|
25
|
+
const paths = value
|
|
26
|
+
.split(':')
|
|
27
|
+
.map((s) => s.trim())
|
|
28
|
+
.filter(Boolean);
|
|
29
|
+
for (const path of paths) {
|
|
30
|
+
const type = isGlobPattern(path) ? PatternType.GLOB : PatternType.PATH;
|
|
31
|
+
patterns.push({
|
|
32
|
+
value: path,
|
|
33
|
+
type,
|
|
34
|
+
line: lineNum,
|
|
35
|
+
column: 1
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return patterns;
|
|
42
|
+
}
|
|
43
|
+
/** ShellCheck .shellcheckrc file parser */
|
|
44
|
+
export const shellcheckParser = {
|
|
45
|
+
name: 'shellcheck',
|
|
46
|
+
filePatterns: ['.shellcheckrc', '**/.shellcheckrc'],
|
|
47
|
+
parse: parseShellcheck
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=shellcheck.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shellcheck.js","sourceRoot":"","sources":["../../src/parsers/shellcheck.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,+BAA+B;AAC/B,SAAS,eAAe,CAAC,SAAiB,EAAE,OAAe;IACzD,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;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,gCAAgC;QAChC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,SAAS;QACX,CAAC;QAED,yBAAyB;QACzB,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAE7D,2CAA2C;YAC3C,IAAI,GAAG,KAAK,aAAa,IAAI,KAAK,EAAE,CAAC;gBACnC,wDAAwD;gBACxD,MAAM,KAAK,GAAG,KAAK;qBAChB,KAAK,CAAC,GAAG,CAAC;qBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;qBACpB,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;oBAEvE,QAAQ,CAAC,IAAI,CAAC;wBACZ,KAAK,EAAE,IAAI;wBACX,IAAI;wBACJ,IAAI,EAAE,OAAO;wBACb,MAAM,EAAE,CAAC;qBACV,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,2CAA2C;AAC3C,MAAM,CAAC,MAAM,gBAAgB,GAAW;IACtC,IAAI,EAAE,YAAY;IAClB,YAAY,EAAE,CAAC,eAAe,EAAE,kBAAkB,CAAC;IACnD,KAAK,EAAE,eAAe;CACvB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser for Stylelint configuration (.stylelintignore, .stylelintrc)
|
|
3
|
+
*/
|
|
4
|
+
import type { Parser } from '../plugin/types.js';
|
|
5
|
+
/** Stylelint ignore parser */
|
|
6
|
+
export declare const stylelintIgnoreParser: Parser;
|
|
7
|
+
/** Stylelint RC parser */
|
|
8
|
+
export declare const stylelintRcParser: Parser;
|
|
9
|
+
//# sourceMappingURL=stylelint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stylelint.d.ts","sourceRoot":"","sources":["../../src/parsers/stylelint.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAiGjD,8BAA8B;AAC9B,eAAO,MAAM,qBAAqB,EAAE,MAInC,CAAC;AAEF,0BAA0B;AAC1B,eAAO,MAAM,iBAAiB,EAAE,MAI/B,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser for Stylelint configuration (.stylelintignore, .stylelintrc)
|
|
3
|
+
*/
|
|
4
|
+
import { PatternType } from '../core/types.js';
|
|
5
|
+
import { isGlobPattern } from '../validator/glob.js';
|
|
6
|
+
/** Parse .stylelintignore file (same format as .gitignore) */
|
|
7
|
+
function parseStylelintIgnore(_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
|
+
if (!trimmed || trimmed.startsWith('#')) {
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
let patternValue = trimmed;
|
|
18
|
+
let negated = false;
|
|
19
|
+
if (patternValue.startsWith('!')) {
|
|
20
|
+
negated = true;
|
|
21
|
+
patternValue = patternValue.slice(1);
|
|
22
|
+
}
|
|
23
|
+
const type = isGlobPattern(patternValue) ? PatternType.GLOB : PatternType.PATH;
|
|
24
|
+
patterns.push({
|
|
25
|
+
value: patternValue,
|
|
26
|
+
type,
|
|
27
|
+
line: lineNum,
|
|
28
|
+
column: 1,
|
|
29
|
+
negated
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
return patterns;
|
|
33
|
+
}
|
|
34
|
+
/** Parse .stylelintrc.json and extract ignoreFiles patterns */
|
|
35
|
+
function parseStylelintRc(_filename, content) {
|
|
36
|
+
const patterns = [];
|
|
37
|
+
let config;
|
|
38
|
+
try {
|
|
39
|
+
config = JSON.parse(content);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return patterns;
|
|
43
|
+
}
|
|
44
|
+
if (!config || typeof config !== 'object') {
|
|
45
|
+
return patterns;
|
|
46
|
+
}
|
|
47
|
+
const lineMap = buildLineMap(content);
|
|
48
|
+
if (config.ignoreFiles) {
|
|
49
|
+
const ignoreFiles = Array.isArray(config.ignoreFiles)
|
|
50
|
+
? config.ignoreFiles
|
|
51
|
+
: [config.ignoreFiles];
|
|
52
|
+
for (const value of ignoreFiles) {
|
|
53
|
+
if (typeof value !== 'string')
|
|
54
|
+
continue;
|
|
55
|
+
const lineInfo = lineMap.get(value);
|
|
56
|
+
const type = isGlobPattern(value) ? PatternType.GLOB : PatternType.PATH;
|
|
57
|
+
patterns.push({
|
|
58
|
+
value,
|
|
59
|
+
type,
|
|
60
|
+
line: lineInfo?.line ?? 1,
|
|
61
|
+
column: lineInfo?.column
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return patterns;
|
|
66
|
+
}
|
|
67
|
+
function buildLineMap(content) {
|
|
68
|
+
const map = new Map();
|
|
69
|
+
const lines = content.split('\n');
|
|
70
|
+
for (let i = 0; i < lines.length; i++) {
|
|
71
|
+
const line = lines[i];
|
|
72
|
+
const lineNum = i + 1;
|
|
73
|
+
const stringMatches = line.matchAll(/"([^"]+)"/g);
|
|
74
|
+
for (const match of stringMatches) {
|
|
75
|
+
const value = match[1];
|
|
76
|
+
if (value && !map.has(value)) {
|
|
77
|
+
map.set(value, { line: lineNum, column: (match.index ?? 0) + 1 });
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return map;
|
|
82
|
+
}
|
|
83
|
+
/** Stylelint ignore parser */
|
|
84
|
+
export const stylelintIgnoreParser = {
|
|
85
|
+
name: 'stylelintignore',
|
|
86
|
+
filePatterns: ['.stylelintignore', '**/.stylelintignore'],
|
|
87
|
+
parse: parseStylelintIgnore
|
|
88
|
+
};
|
|
89
|
+
/** Stylelint RC parser */
|
|
90
|
+
export const stylelintRcParser = {
|
|
91
|
+
name: 'stylelintrc',
|
|
92
|
+
filePatterns: ['.stylelintrc', '.stylelintrc.json', '**/.stylelintrc', '**/.stylelintrc.json'],
|
|
93
|
+
parse: parseStylelintRc
|
|
94
|
+
};
|
|
95
|
+
//# sourceMappingURL=stylelint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stylelint.js","sourceRoot":"","sources":["../../src/parsers/stylelint.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,8DAA8D;AAC9D,SAAS,oBAAoB,CAAC,SAAiB,EAAE,OAAe;IAC9D,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,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,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,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,+DAA+D;AAC/D,SAAS,gBAAgB,CAAC,SAAiB,EAAE,OAAe;IAC1D,MAAM,QAAQ,GAAc,EAAE,CAAC;IAE/B,IAAI,MAA2C,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAwC,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAEtC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC;YACnD,CAAC,CAAC,MAAM,CAAC,WAAW;YACpB,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAEzB,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;YAChC,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,SAAS;YACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;YAExE,QAAQ,CAAC,IAAI,CAAC;gBACZ,KAAK;gBACL,IAAI;gBACJ,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC;gBACzB,MAAM,EAAE,QAAQ,EAAE,MAAM;aACzB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,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,8BAA8B;AAC9B,MAAM,CAAC,MAAM,qBAAqB,GAAW;IAC3C,IAAI,EAAE,iBAAiB;IACvB,YAAY,EAAE,CAAC,kBAAkB,EAAE,qBAAqB,CAAC;IACzD,KAAK,EAAE,oBAAoB;CAC5B,CAAC;AAEF,0BAA0B;AAC1B,MAAM,CAAC,MAAM,iBAAiB,GAAW;IACvC,IAAI,EAAE,aAAa;IACnB,YAAY,EAAE,CAAC,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,sBAAsB,CAAC;IAC9F,KAAK,EAAE,gBAAgB;CACxB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swift.d.ts","sourceRoot":"","sources":["../../src/parsers/swift.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA4EjD,uBAAuB;AACvB,eAAO,MAAM,eAAe,EAAE,MAI7B,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser for Swift linter configuration (.swiftlint.yml)
|
|
3
|
+
*/
|
|
4
|
+
import { parse as parseYaml } from 'yaml';
|
|
5
|
+
import { PatternType } from '../core/types.js';
|
|
6
|
+
import { isGlobPattern } from '../validator/glob.js';
|
|
7
|
+
/** Parse .swiftlint.yml and extract patterns */
|
|
8
|
+
function parseSwiftLint(_filename, content) {
|
|
9
|
+
const patterns = [];
|
|
10
|
+
let config;
|
|
11
|
+
try {
|
|
12
|
+
config = parseYaml(content);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return patterns;
|
|
16
|
+
}
|
|
17
|
+
if (!config || typeof config !== 'object') {
|
|
18
|
+
return patterns;
|
|
19
|
+
}
|
|
20
|
+
const lineMap = buildLineMap(content);
|
|
21
|
+
// Extract from included/excluded sections
|
|
22
|
+
extractPatterns(config.included, patterns, lineMap);
|
|
23
|
+
extractPatterns(config.excluded, patterns, lineMap);
|
|
24
|
+
return patterns;
|
|
25
|
+
}
|
|
26
|
+
function extractPatterns(values, patterns, lineMap) {
|
|
27
|
+
if (!Array.isArray(values))
|
|
28
|
+
return;
|
|
29
|
+
for (const value of values) {
|
|
30
|
+
if (typeof value !== 'string')
|
|
31
|
+
continue;
|
|
32
|
+
const lineInfo = lineMap.get(value);
|
|
33
|
+
const type = isGlobPattern(value) ? PatternType.GLOB : PatternType.PATH;
|
|
34
|
+
patterns.push({
|
|
35
|
+
value,
|
|
36
|
+
type,
|
|
37
|
+
line: lineInfo?.line ?? 1,
|
|
38
|
+
column: lineInfo?.column
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function buildLineMap(content) {
|
|
43
|
+
const map = new Map();
|
|
44
|
+
const lines = content.split('\n');
|
|
45
|
+
for (let i = 0; i < lines.length; i++) {
|
|
46
|
+
const line = lines[i];
|
|
47
|
+
const lineNum = i + 1;
|
|
48
|
+
const listMatch = line.match(/^\s*-\s+(?:"([^"]+)"|'([^']+)'|([^\s#]+))/);
|
|
49
|
+
if (listMatch) {
|
|
50
|
+
const value = listMatch[1] || listMatch[2] || listMatch[3];
|
|
51
|
+
if (value && !map.has(value)) {
|
|
52
|
+
map.set(value, { line: lineNum, column: line.indexOf(value) + 1 });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return map;
|
|
57
|
+
}
|
|
58
|
+
/** SwiftLint parser */
|
|
59
|
+
export const swiftlintParser = {
|
|
60
|
+
name: 'swiftlint',
|
|
61
|
+
filePatterns: ['.swiftlint.yml', '.swiftlint.yaml', '**/.swiftlint.yml', '**/.swiftlint.yaml'],
|
|
62
|
+
parse: parseSwiftLint
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=swift.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swift.js","sourceRoot":"","sources":["../../src/parsers/swift.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tflint.d.ts","sourceRoot":"","sources":["../../src/parsers/tflint.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA0DjD,qCAAqC;AACrC,eAAO,MAAM,YAAY,EAAE,MAI1B,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser for TFLint configuration files
|
|
3
|
+
* TFLint is a Terraform linter
|
|
4
|
+
*/
|
|
5
|
+
import { PatternType } from '../core/types.js';
|
|
6
|
+
import { isGlobPattern } from '../validator/glob.js';
|
|
7
|
+
/** Parse .tflint.hcl file */
|
|
8
|
+
function parseTflint(_filename, content) {
|
|
9
|
+
const patterns = [];
|
|
10
|
+
const lines = content.split('\n');
|
|
11
|
+
for (let i = 0; i < lines.length; i++) {
|
|
12
|
+
const line = lines[i];
|
|
13
|
+
const lineNum = i + 1;
|
|
14
|
+
const trimmed = line.trim();
|
|
15
|
+
// Skip empty lines and comments
|
|
16
|
+
if (!trimmed || trimmed.startsWith('#') || trimmed.startsWith('//')) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
// Look for disabled_by_default or paths in config blocks
|
|
20
|
+
// Example: disabled_by_default = "path/to/file"
|
|
21
|
+
// Example: source = "path/to/module"
|
|
22
|
+
const pathMatch = trimmed.match(/(?:disabled_by_default|source|module_dir)\s*=\s*"([^"]+)"/);
|
|
23
|
+
if (pathMatch) {
|
|
24
|
+
const path = pathMatch[1];
|
|
25
|
+
const type = isGlobPattern(path) ? PatternType.GLOB : PatternType.PATH;
|
|
26
|
+
patterns.push({
|
|
27
|
+
value: path,
|
|
28
|
+
type,
|
|
29
|
+
line: lineNum,
|
|
30
|
+
column: 1
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
// Look for exclude patterns in rule blocks
|
|
34
|
+
// Example: exclude = ["path/**"]
|
|
35
|
+
const excludeMatch = trimmed.match(/exclude\s*=\s*\[(.*?)\]/);
|
|
36
|
+
if (excludeMatch) {
|
|
37
|
+
const excludeContent = excludeMatch[1];
|
|
38
|
+
const pathMatches = excludeContent.matchAll(/"([^"]+)"/g);
|
|
39
|
+
for (const match of pathMatches) {
|
|
40
|
+
const path = match[1];
|
|
41
|
+
const type = isGlobPattern(path) ? PatternType.GLOB : PatternType.PATH;
|
|
42
|
+
patterns.push({
|
|
43
|
+
value: path,
|
|
44
|
+
type,
|
|
45
|
+
line: lineNum,
|
|
46
|
+
column: (match.index ?? 0) + 1
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return patterns;
|
|
52
|
+
}
|
|
53
|
+
/** TFLint .tflint.hcl file parser */
|
|
54
|
+
export const tflintParser = {
|
|
55
|
+
name: 'tflint',
|
|
56
|
+
filePatterns: ['.tflint.hcl', '**/.tflint.hcl'],
|
|
57
|
+
parse: parseTflint
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=tflint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tflint.js","sourceRoot":"","sources":["../../src/parsers/tflint.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,6BAA6B;AAC7B,SAAS,WAAW,CAAC,SAAiB,EAAE,OAAe;IACrD,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;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,gCAAgC;QAChC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACpE,SAAS;QACX,CAAC;QAED,yDAAyD;QACzD,gDAAgD;QAChD,qCAAqC;QACrC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC7F,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;YAEvE,QAAQ,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,IAAI;gBACX,IAAI;gBACJ,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,CAAC;aACV,CAAC,CAAC;QACL,CAAC;QAED,2CAA2C;QAC3C,iCAAiC;QACjC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC9D,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,cAAc,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAE1D,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;gBAChC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;gBAEvE,QAAQ,CAAC,IAAI,CAAC;oBACZ,KAAK,EAAE,IAAI;oBACX,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,qCAAqC;AACrC,MAAM,CAAC,MAAM,YAAY,GAAW;IAClC,IAAI,EAAE,QAAQ;IACd,YAAY,EAAE,CAAC,aAAa,EAAE,gBAAgB,CAAC;IAC/C,KAAK,EAAE,WAAW;CACnB,CAAC"}
|