big-code-analysis-cli 2.0.0__py3-none-macosx_11_0_arm64.whl

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.
man/bca-ops.1 ADDED
@@ -0,0 +1,116 @@
1
+ .ie \n(.g .ds Aq \(aq
2
+ .el .ds Aq '
3
+ .TH BCA-OPS 1 "big-code-analysis 2.0.0" "big-code-analysis Manual"
4
+ .SH NAME
5
+ bca\-ops \- Extract per\-file operands and operators
6
+ .SH SYNOPSIS
7
+ \fBbca\-ops\fR [\fB\-p\fR|\fB\-\-paths\fR] [\fB\-I\fR|\fB\-\-include\fR] [\fB\-X\fR|\fB\-\-exclude\fR] [\fB\-l\fR|\fB\-\-language\fR] [\fB\-\-no\-skip\-generated\fR] [\fB\-\-paths\-from\fR] [\fB\-\-exclude\-from\fR] [\fB\-\-no\-ignore\fR] [\fB\-\-no\-config\fR] [\fB\-j\fR|\fB\-\-jobs\fR] [\fB\-\-exclude\-tests\fR] [\fB\-\-cyclomatic\-count\-try\fR] [\fB\-\-preproc\-data\fR] [\fB\-\-color\fR] [\fB\-O\fR|\fB\-\-format\fR] [\fB\-o\fR|\fB\-\-output\fR] [\fB\-\-output\-dir\fR] [\fB\-\-pretty\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fIPATHS\fR]
8
+ .SH DESCRIPTION
9
+ Extract per\-file operands and operators
10
+ .SH OPTIONS
11
+ .TP
12
+ \fB\-O\fR, \fB\-\-format\fR \fI<FORMAT>\fR
13
+ Output format. When omitted, the default `text` format prints a human\-readable colored tree to stdout (`metrics` shows the metric tree, `ops` the operator/operand tree); pass `\-\-format text` to request that default explicitly (e.g. to override a `bca.toml` that set a structured format). `json` / `yaml` / `toml` / `cbor` / `csv` emit structured per\-file data. `\-\-output\-format` is accepted as a deprecated alias; it is hidden from help and slated for removal in 2.0
14
+ .br
15
+
16
+ .br
17
+ \fIPossible values:\fR
18
+ .RS 14
19
+ .IP \(bu 2
20
+ text: Human\-readable colored tree printed to stdout (`metrics` shows the metric tree, `ops` the operator/operand tree) — the default when `\-\-format` is omitted. Selecting it explicitly produces byte\-identical output to omitting the flag, so it is the way to request the default in a script or to override a `bca.toml` that set a structured format. It only ever streams to stdout, so unlike the structured serializers it has no file destination: pairing it with `\-\-output`/`\-\-output\-dir` is a hard error, not a silent no\-op — pass a structured `\-\-format` to write files
21
+ .IP \(bu 2
22
+ cbor
23
+ .IP \(bu 2
24
+ csv
25
+ .IP \(bu 2
26
+ json
27
+ .IP \(bu 2
28
+ toml
29
+ .IP \(bu 2
30
+ yaml
31
+ .RE
32
+ .TP
33
+ \fB\-o\fR, \fB\-\-output\fR \fI<OUTPUT>\fR
34
+ Output file. Writes one aggregate document (a top\-level array of the per\-file results; TOML wraps it under a `files` key) for the whole run. Stdout if omitted (CBOR requires this flag). Use `\-\-output\-dir` for the per\-file directory tree; passing both is an error
35
+ .TP
36
+ \fB\-\-output\-dir\fR \fI<OUTPUT_DIR>\fR
37
+ Output directory. Writes one document per input file, named by the input path plus the format extension. Mutually exclusive with `\-\-output` (which writes a single aggregate file)
38
+ .TP
39
+ \fB\-\-pretty\fR
40
+ Pretty\-print JSON / TOML output
41
+ .TP
42
+ \fB\-h\fR, \fB\-\-help\fR
43
+ Print help (see a summary with \*(Aq\-h\*(Aq)
44
+ .SH "INPUT SELECTION"
45
+ .TP
46
+ \fB\-p\fR, \fB\-\-paths\fR \fI<PATHS>\fR
47
+ Input files or directories to analyze. Unioned with any positional `[PATHS]`. Defaults to the current directory (`.`) when omitted and no manifest `paths` is set; an explicitly\-given path that does not exist is an error (exit 1)
48
+ .TP
49
+ \fB\-I\fR, \fB\-\-include\fR \fI<INCLUDE>\fR
50
+ Glob to include files. Repeat the flag to add multiple globs (`\-I \*(Aq*.rs\*(Aq \-I \*(Aq*.toml\*(Aq`); each occurrence takes exactly one value, so a positional argument that follows is never swallowed. A leading `./` is optional: `dir/**` and `./dir/**` are equivalent
51
+ .TP
52
+ \fB\-X\fR, \fB\-\-exclude\fR \fI<EXCLUDE>\fR
53
+ Glob to exclude files. Repeat the flag to add multiple globs (`\-X \*(Aq*.tmp\*(Aq \-X \*(Aq*.bak\*(Aq`); each occurrence takes exactly one value, so a positional argument that follows is never swallowed. A leading `./` is optional: `dir/**` and `./dir/**` are equivalent. CLI values are *merged with* (unioned, not a replacement for) any `bca.toml` `exclude` list and any `\-\-exclude\-from` patterns, so a CLI `\-\-exclude` never silently un\-excludes a directory the project config deliberately skipped. Pass `\-\-no\-config` to ignore the manifest entirely
54
+ .TP
55
+ \fB\-l\fR, \fB\-\-language\fR \fI<LANGUAGE>\fR
56
+ Force a language instead of inferring from extension. Accepts a canonical language name (`rust`, `python`, `cpp`, …) or a file extension (`rs`, `py`, …). An unrecognized value is a hard error
57
+ .TP
58
+ \fB\-\-no\-skip\-generated\fR
59
+ Disable auto\-skip of files marked as generated (e.g. `@generated`, `DO NOT EDIT`, `GENERATED CODE` near the top). By default the CLI skips such files so generated bindings do not skew metrics
60
+ .TP
61
+ \fB\-\-paths\-from\fR \fI<PATHS_FROM>\fR
62
+ Read newline\-separated input paths from a file. Use `\-` to read from stdin. Combined as a union with any `\-\-paths` values; globs still apply. Blank lines are skipped; `#` is treated as a path character (not a comment). To pass a file literally named `\-`, use `./\-`
63
+ .TP
64
+ \fB\-\-exclude\-from\fR \fI<EXCLUDE_FROM>\fR
65
+ Read additional `\-\-exclude` glob patterns from a file (one per line, `.gitignore`\-style). Blank lines and lines whose first non\-whitespace character is `#` are skipped. Use `\-` to read from stdin; to pass a file literally named `\-`, use `./\-`. Patterns are unioned with any `\-\-exclude` values into a single deny\-set; order does not matter. Convention is a `.bcaignore` at the repo root, mirroring `.gitignore` / `.dockerignore`
66
+ .TP
67
+ \fB\-\-no\-ignore\fR
68
+ Disable `.gitignore` / `.ignore` / global gitignore awareness when expanding input directories. Explicit file paths are always honored regardless of this flag
69
+ .TP
70
+ \fB\-\-no\-config\fR
71
+ Skip auto\-discovery of a `bca.toml` manifest. By default `bca` climbs from the working directory to the repo root looking for `bca.toml` and merges its keys *under* any explicit CLI flags. Pass this for raw, fully\-explicit invocations that must not pick up repo\-level config (e.g. a reproducible CI one\-liner). When no manifest is discovered this flag is a no\-op
72
+ .TP
73
+ [\fIPATHS\fR]
74
+ Input files or directories to analyze, given positionally (`bca metrics src/ tests/`). Unioned with any `\-\-paths`/`\-p` values
75
+ .SH "WALKER TUNING"
76
+ .TP
77
+ \fB\-j\fR, \fB\-\-jobs\fR \fI<N|auto>\fR [default: auto]
78
+ Number of jobs.
79
+
80
+ Defaults to the effective CPU count as reported by the OS (cgroup\-quota\- and cpuset\-aware on Linux). Pass an explicit integer or `auto` to override. `\-\-jobs 1` forces serial mode for debugging. `\-\-num\-jobs` is kept as a hidden alias for one release cycle and is slated for removal in the next major.
81
+ .TP
82
+ \fB\-\-exclude\-tests\fR
83
+ Exclude inline test code from metric computation. Currently applies to Rust only (skips `#[test]`, `#[cfg(test)]`, `#[tokio::test]`, `#[rstest]`, `#![cfg(test)]` items and their subtrees). Default is off — every node is counted, so numbers stay byte\-for\-byte stable. Languages without a test\-subtree skip rule ignore this flag
84
+ .TP
85
+ \fB\-\-cyclomatic\-count\-try\fR[=\fI<BOOL>\fR]
86
+ Whether Rust\*(Aqs `?` operator (the `try_expression` node) contributes to cyclomatic complexity (standard and modified). Defaults to `true` — `?` counts +1, matching upstream rust\-code\-analysis and every published metric value. Pass `\-\-cyclomatic\-count\-try=false` to treat `?` as linear error propagation — useful when cyclomatic is used as a maintainability gate that should not penalize fallible\-but\-linear code. Rust\-only: no other language emits the node, so the flag is inert elsewhere. Mirrors the `cyclomatic_count_try` manifest key; the CLI value overrides the manifest in either direction
87
+ .br
88
+
89
+ .br
90
+ \fIPossible values:\fR
91
+ .RS 14
92
+ .IP \(bu 2
93
+ true
94
+ .IP \(bu 2
95
+ false
96
+ .RE
97
+ .SH PREPROCESSOR
98
+ .TP
99
+ \fB\-\-preproc\-data\fR \fI<PREPROC_DATA>\fR
100
+ Existing preprocessor\-data JSON to consume during C/C++ analysis. Use `bca preproc` to produce one
101
+ .SH OUTPUT
102
+ .TP
103
+ \fB\-\-color\fR \fI<WHEN>\fR [default: auto]
104
+ When to colorize the human\-readable `text` dumps (`metrics` / `ops` default tree, `dump`, `find`, `functions`): `auto` (default — color only when stdout is a terminal and `NO_COLOR` is unset), `always` (force escapes even when piped/redirected), or `never` (plain text). Structured formats (`json` / `yaml` / `toml` / `cbor` / `csv`) and file output are never colorized. Honors the `NO_COLOR` convention (<https://no\-color.org>) unless `\-\-color always` overrides it
105
+ .br
106
+
107
+ .br
108
+ \fIPossible values:\fR
109
+ .RS 14
110
+ .IP \(bu 2
111
+ auto: Color when stdout is a terminal and `NO_COLOR` is unset
112
+ .IP \(bu 2
113
+ always: Always emit color, even when piped or redirected
114
+ .IP \(bu 2
115
+ never: Never emit color
116
+ .RE
man/bca-preproc.1 ADDED
@@ -0,0 +1,69 @@
1
+ .ie \n(.g .ds Aq \(aq
2
+ .el .ds Aq '
3
+ .TH BCA-PREPROC 1 "big-code-analysis 2.0.0" "big-code-analysis Manual"
4
+ .SH NAME
5
+ bca\-preproc \- Generate preprocessor\-data JSON for C/C++ analysis
6
+ .SH SYNOPSIS
7
+ \fBbca\-preproc\fR [\fB\-p\fR|\fB\-\-paths\fR] [\fB\-I\fR|\fB\-\-include\fR] [\fB\-X\fR|\fB\-\-exclude\fR] [\fB\-l\fR|\fB\-\-language\fR] [\fB\-\-no\-skip\-generated\fR] [\fB\-\-paths\-from\fR] [\fB\-\-exclude\-from\fR] [\fB\-\-no\-ignore\fR] [\fB\-\-no\-config\fR] [\fB\-j\fR|\fB\-\-jobs\fR] [\fB\-\-exclude\-tests\fR] [\fB\-\-cyclomatic\-count\-try\fR] [\fB\-o\fR|\fB\-\-output\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fIPATHS\fR]
8
+ .SH DESCRIPTION
9
+ Generate preprocessor\-data JSON for C/C++ analysis
10
+ .SH OPTIONS
11
+ .TP
12
+ \fB\-o\fR, \fB\-\-output\fR \fI<OUTPUT>\fR
13
+ Output JSON file. Stdout if omitted
14
+ .TP
15
+ \fB\-h\fR, \fB\-\-help\fR
16
+ Print help (see a summary with \*(Aq\-h\*(Aq)
17
+ .SH "INPUT SELECTION"
18
+ .TP
19
+ \fB\-p\fR, \fB\-\-paths\fR \fI<PATHS>\fR
20
+ Input files or directories to analyze. Unioned with any positional `[PATHS]`. Defaults to the current directory (`.`) when omitted and no manifest `paths` is set; an explicitly\-given path that does not exist is an error (exit 1)
21
+ .TP
22
+ \fB\-I\fR, \fB\-\-include\fR \fI<INCLUDE>\fR
23
+ Glob to include files. Repeat the flag to add multiple globs (`\-I \*(Aq*.rs\*(Aq \-I \*(Aq*.toml\*(Aq`); each occurrence takes exactly one value, so a positional argument that follows is never swallowed. A leading `./` is optional: `dir/**` and `./dir/**` are equivalent
24
+ .TP
25
+ \fB\-X\fR, \fB\-\-exclude\fR \fI<EXCLUDE>\fR
26
+ Glob to exclude files. Repeat the flag to add multiple globs (`\-X \*(Aq*.tmp\*(Aq \-X \*(Aq*.bak\*(Aq`); each occurrence takes exactly one value, so a positional argument that follows is never swallowed. A leading `./` is optional: `dir/**` and `./dir/**` are equivalent. CLI values are *merged with* (unioned, not a replacement for) any `bca.toml` `exclude` list and any `\-\-exclude\-from` patterns, so a CLI `\-\-exclude` never silently un\-excludes a directory the project config deliberately skipped. Pass `\-\-no\-config` to ignore the manifest entirely
27
+ .TP
28
+ \fB\-l\fR, \fB\-\-language\fR \fI<LANGUAGE>\fR
29
+ Force a language instead of inferring from extension. Accepts a canonical language name (`rust`, `python`, `cpp`, …) or a file extension (`rs`, `py`, …). An unrecognized value is a hard error
30
+ .TP
31
+ \fB\-\-no\-skip\-generated\fR
32
+ Disable auto\-skip of files marked as generated (e.g. `@generated`, `DO NOT EDIT`, `GENERATED CODE` near the top). By default the CLI skips such files so generated bindings do not skew metrics
33
+ .TP
34
+ \fB\-\-paths\-from\fR \fI<PATHS_FROM>\fR
35
+ Read newline\-separated input paths from a file. Use `\-` to read from stdin. Combined as a union with any `\-\-paths` values; globs still apply. Blank lines are skipped; `#` is treated as a path character (not a comment). To pass a file literally named `\-`, use `./\-`
36
+ .TP
37
+ \fB\-\-exclude\-from\fR \fI<EXCLUDE_FROM>\fR
38
+ Read additional `\-\-exclude` glob patterns from a file (one per line, `.gitignore`\-style). Blank lines and lines whose first non\-whitespace character is `#` are skipped. Use `\-` to read from stdin; to pass a file literally named `\-`, use `./\-`. Patterns are unioned with any `\-\-exclude` values into a single deny\-set; order does not matter. Convention is a `.bcaignore` at the repo root, mirroring `.gitignore` / `.dockerignore`
39
+ .TP
40
+ \fB\-\-no\-ignore\fR
41
+ Disable `.gitignore` / `.ignore` / global gitignore awareness when expanding input directories. Explicit file paths are always honored regardless of this flag
42
+ .TP
43
+ \fB\-\-no\-config\fR
44
+ Skip auto\-discovery of a `bca.toml` manifest. By default `bca` climbs from the working directory to the repo root looking for `bca.toml` and merges its keys *under* any explicit CLI flags. Pass this for raw, fully\-explicit invocations that must not pick up repo\-level config (e.g. a reproducible CI one\-liner). When no manifest is discovered this flag is a no\-op
45
+ .TP
46
+ [\fIPATHS\fR]
47
+ Input files or directories to analyze, given positionally (`bca metrics src/ tests/`). Unioned with any `\-\-paths`/`\-p` values
48
+ .SH "WALKER TUNING"
49
+ .TP
50
+ \fB\-j\fR, \fB\-\-jobs\fR \fI<N|auto>\fR [default: auto]
51
+ Number of jobs.
52
+
53
+ Defaults to the effective CPU count as reported by the OS (cgroup\-quota\- and cpuset\-aware on Linux). Pass an explicit integer or `auto` to override. `\-\-jobs 1` forces serial mode for debugging. `\-\-num\-jobs` is kept as a hidden alias for one release cycle and is slated for removal in the next major.
54
+ .TP
55
+ \fB\-\-exclude\-tests\fR
56
+ Exclude inline test code from metric computation. Currently applies to Rust only (skips `#[test]`, `#[cfg(test)]`, `#[tokio::test]`, `#[rstest]`, `#![cfg(test)]` items and their subtrees). Default is off — every node is counted, so numbers stay byte\-for\-byte stable. Languages without a test\-subtree skip rule ignore this flag
57
+ .TP
58
+ \fB\-\-cyclomatic\-count\-try\fR[=\fI<BOOL>\fR]
59
+ Whether Rust\*(Aqs `?` operator (the `try_expression` node) contributes to cyclomatic complexity (standard and modified). Defaults to `true` — `?` counts +1, matching upstream rust\-code\-analysis and every published metric value. Pass `\-\-cyclomatic\-count\-try=false` to treat `?` as linear error propagation — useful when cyclomatic is used as a maintainability gate that should not penalize fallible\-but\-linear code. Rust\-only: no other language emits the node, so the flag is inert elsewhere. Mirrors the `cyclomatic_count_try` manifest key; the CLI value overrides the manifest in either direction
60
+ .br
61
+
62
+ .br
63
+ \fIPossible values:\fR
64
+ .RS 14
65
+ .IP \(bu 2
66
+ true
67
+ .IP \(bu 2
68
+ false
69
+ .RE
man/bca-report.1 ADDED
@@ -0,0 +1,105 @@
1
+ .ie \n(.g .ds Aq \(aq
2
+ .el .ds Aq '
3
+ .TH BCA-REPORT 1 "big-code-analysis 2.0.0" "big-code-analysis Manual"
4
+ .SH NAME
5
+ bca\-report \- Generate an aggregated report across the analyzed source
6
+ .SH SYNOPSIS
7
+ \fBbca\-report\fR [\fB\-p\fR|\fB\-\-paths\fR] [\fB\-I\fR|\fB\-\-include\fR] [\fB\-X\fR|\fB\-\-exclude\fR] [\fB\-l\fR|\fB\-\-language\fR] [\fB\-\-no\-skip\-generated\fR] [\fB\-\-paths\-from\fR] [\fB\-\-exclude\-from\fR] [\fB\-\-no\-ignore\fR] [\fB\-\-no\-config\fR] [\fB\-j\fR|\fB\-\-jobs\fR] [\fB\-\-exclude\-tests\fR] [\fB\-\-cyclomatic\-count\-try\fR] [\fB\-\-preproc\-data\fR] [\fB\-O\fR|\fB\-\-format\fR] [\fB\-o\fR|\fB\-\-output\fR] [\fB\-\-top\fR] [\fB\-\-strip\-prefix\fR] [\fB\-\-no\-suppress\fR] [\fB\-\-vcs\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fIFORMAT\fR]
8
+ .SH DESCRIPTION
9
+ Generate an aggregated report across the analyzed source
10
+ .SH OPTIONS
11
+ .TP
12
+ \fB\-O\fR, \fB\-\-format\fR \fI<FORMAT>\fR
13
+ Report format (`markdown` or `html`). Defaults to `markdown` when neither this flag nor the deprecated positional form is given
14
+ .br
15
+
16
+ .br
17
+ \fIPossible values:\fR
18
+ .RS 14
19
+ .IP \(bu 2
20
+ markdown
21
+ .IP \(bu 2
22
+ html
23
+ .RE
24
+ .TP
25
+ \fB\-o\fR, \fB\-\-output\fR \fI<OUTPUT>\fR
26
+ Output file. Stdout if omitted
27
+ .TP
28
+ \fB\-\-top\fR \fI<TOP>\fR [default: 20]
29
+ Maximum number of entries per hotspot table (`0` = all)
30
+ .TP
31
+ \fB\-\-strip\-prefix\fR \fI<STRIP_PREFIX>\fR [default: ]
32
+ Path prefix to strip from displayed file paths
33
+ .TP
34
+ \fB\-\-no\-suppress\fR[=\fI<BOOL>\fR]
35
+ Include functions silenced by in\-source suppression markers (`bca: suppress`, `bca: suppress\-file`, `#lizard forgives`) in the hotspot tables. By default the report honors these markers and omits a function from a metric\*(Aqs hotspot table when that metric is suppressed for it — matching `bca check` and the SARIF emitter. Pass this for the raw audit view that lists every offender. Value\-taking: a bare `\-\-no\-suppress` means `true`; `\-\-no\-suppress=false` forces the marker\-honoring default even when the `[report] no_suppress` key in `bca.toml` enabled it. The CLI value overrides the manifest in either direction
36
+ .br
37
+
38
+ .br
39
+ \fIPossible values:\fR
40
+ .RS 14
41
+ .IP \(bu 2
42
+ true
43
+ .IP \(bu 2
44
+ false
45
+ .RE
46
+ .TP
47
+ \fB\-\-vcs\fR
48
+ Append a "Change\-history risk" section ranking files by VCS risk (churn, authorship, fix history) using default windows, mirroring `bca metrics \-\-vcs`. Ignored (with a warning) outside a git working tree. See `bca vcs` for the standalone, tunable report
49
+ .TP
50
+ \fB\-h\fR, \fB\-\-help\fR
51
+ Print help (see a summary with \*(Aq\-h\*(Aq)
52
+ .SH "INPUT SELECTION"
53
+ .TP
54
+ \fB\-p\fR, \fB\-\-paths\fR \fI<PATHS>\fR
55
+ Input files or directories to analyze. Unioned with any positional `[PATHS]`. Defaults to the current directory (`.`) when omitted and no manifest `paths` is set; an explicitly\-given path that does not exist is an error (exit 1)
56
+ .TP
57
+ \fB\-I\fR, \fB\-\-include\fR \fI<INCLUDE>\fR
58
+ Glob to include files. Repeat the flag to add multiple globs (`\-I \*(Aq*.rs\*(Aq \-I \*(Aq*.toml\*(Aq`); each occurrence takes exactly one value, so a positional argument that follows is never swallowed. A leading `./` is optional: `dir/**` and `./dir/**` are equivalent
59
+ .TP
60
+ \fB\-X\fR, \fB\-\-exclude\fR \fI<EXCLUDE>\fR
61
+ Glob to exclude files. Repeat the flag to add multiple globs (`\-X \*(Aq*.tmp\*(Aq \-X \*(Aq*.bak\*(Aq`); each occurrence takes exactly one value, so a positional argument that follows is never swallowed. A leading `./` is optional: `dir/**` and `./dir/**` are equivalent. CLI values are *merged with* (unioned, not a replacement for) any `bca.toml` `exclude` list and any `\-\-exclude\-from` patterns, so a CLI `\-\-exclude` never silently un\-excludes a directory the project config deliberately skipped. Pass `\-\-no\-config` to ignore the manifest entirely
62
+ .TP
63
+ \fB\-l\fR, \fB\-\-language\fR \fI<LANGUAGE>\fR
64
+ Force a language instead of inferring from extension. Accepts a canonical language name (`rust`, `python`, `cpp`, …) or a file extension (`rs`, `py`, …). An unrecognized value is a hard error
65
+ .TP
66
+ \fB\-\-no\-skip\-generated\fR
67
+ Disable auto\-skip of files marked as generated (e.g. `@generated`, `DO NOT EDIT`, `GENERATED CODE` near the top). By default the CLI skips such files so generated bindings do not skew metrics
68
+ .TP
69
+ \fB\-\-paths\-from\fR \fI<PATHS_FROM>\fR
70
+ Read newline\-separated input paths from a file. Use `\-` to read from stdin. Combined as a union with any `\-\-paths` values; globs still apply. Blank lines are skipped; `#` is treated as a path character (not a comment). To pass a file literally named `\-`, use `./\-`
71
+ .TP
72
+ \fB\-\-exclude\-from\fR \fI<EXCLUDE_FROM>\fR
73
+ Read additional `\-\-exclude` glob patterns from a file (one per line, `.gitignore`\-style). Blank lines and lines whose first non\-whitespace character is `#` are skipped. Use `\-` to read from stdin; to pass a file literally named `\-`, use `./\-`. Patterns are unioned with any `\-\-exclude` values into a single deny\-set; order does not matter. Convention is a `.bcaignore` at the repo root, mirroring `.gitignore` / `.dockerignore`
74
+ .TP
75
+ \fB\-\-no\-ignore\fR
76
+ Disable `.gitignore` / `.ignore` / global gitignore awareness when expanding input directories. Explicit file paths are always honored regardless of this flag
77
+ .TP
78
+ \fB\-\-no\-config\fR
79
+ Skip auto\-discovery of a `bca.toml` manifest. By default `bca` climbs from the working directory to the repo root looking for `bca.toml` and merges its keys *under* any explicit CLI flags. Pass this for raw, fully\-explicit invocations that must not pick up repo\-level config (e.g. a reproducible CI one\-liner). When no manifest is discovered this flag is a no\-op
80
+ .SH "WALKER TUNING"
81
+ .TP
82
+ \fB\-j\fR, \fB\-\-jobs\fR \fI<N|auto>\fR [default: auto]
83
+ Number of jobs.
84
+
85
+ Defaults to the effective CPU count as reported by the OS (cgroup\-quota\- and cpuset\-aware on Linux). Pass an explicit integer or `auto` to override. `\-\-jobs 1` forces serial mode for debugging. `\-\-num\-jobs` is kept as a hidden alias for one release cycle and is slated for removal in the next major.
86
+ .TP
87
+ \fB\-\-exclude\-tests\fR
88
+ Exclude inline test code from metric computation. Currently applies to Rust only (skips `#[test]`, `#[cfg(test)]`, `#[tokio::test]`, `#[rstest]`, `#![cfg(test)]` items and their subtrees). Default is off — every node is counted, so numbers stay byte\-for\-byte stable. Languages without a test\-subtree skip rule ignore this flag
89
+ .TP
90
+ \fB\-\-cyclomatic\-count\-try\fR[=\fI<BOOL>\fR]
91
+ Whether Rust\*(Aqs `?` operator (the `try_expression` node) contributes to cyclomatic complexity (standard and modified). Defaults to `true` — `?` counts +1, matching upstream rust\-code\-analysis and every published metric value. Pass `\-\-cyclomatic\-count\-try=false` to treat `?` as linear error propagation — useful when cyclomatic is used as a maintainability gate that should not penalize fallible\-but\-linear code. Rust\-only: no other language emits the node, so the flag is inert elsewhere. Mirrors the `cyclomatic_count_try` manifest key; the CLI value overrides the manifest in either direction
92
+ .br
93
+
94
+ .br
95
+ \fIPossible values:\fR
96
+ .RS 14
97
+ .IP \(bu 2
98
+ true
99
+ .IP \(bu 2
100
+ false
101
+ .RE
102
+ .SH PREPROCESSOR
103
+ .TP
104
+ \fB\-\-preproc\-data\fR \fI<PREPROC_DATA>\fR
105
+ Existing preprocessor\-data JSON to consume during C/C++ analysis. Use `bca preproc` to produce one
@@ -0,0 +1,76 @@
1
+ .ie \n(.g .ds Aq \(aq
2
+ .el .ds Aq '
3
+ .TH BCA-STRIP-COMMENTS 1 "big-code-analysis 2.0.0" "big-code-analysis Manual"
4
+ .SH NAME
5
+ bca\-strip\-comments \- Remove comments from source files
6
+ .SH SYNOPSIS
7
+ \fBbca\-strip\-comments\fR [\fB\-p\fR|\fB\-\-paths\fR] [\fB\-I\fR|\fB\-\-include\fR] [\fB\-X\fR|\fB\-\-exclude\fR] [\fB\-l\fR|\fB\-\-language\fR] [\fB\-\-no\-skip\-generated\fR] [\fB\-\-paths\-from\fR] [\fB\-\-exclude\-from\fR] [\fB\-\-no\-ignore\fR] [\fB\-\-no\-config\fR] [\fB\-j\fR|\fB\-\-jobs\fR] [\fB\-\-exclude\-tests\fR] [\fB\-\-cyclomatic\-count\-try\fR] [\fB\-\-preproc\-data\fR] [\fB\-\-in\-place\fR] [\fB\-o\fR|\fB\-\-output\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fIPATHS\fR]
8
+ .SH DESCRIPTION
9
+ Remove comments from source files
10
+ .SH OPTIONS
11
+ .TP
12
+ \fB\-\-in\-place\fR
13
+ Rewrite each input file in place instead of writing to stdout. Use this for multi\-file rewrites; it is mutually exclusive with `\-\-output`
14
+ .TP
15
+ \fB\-o\fR, \fB\-\-output\fR \fI<OUTPUT>\fR
16
+ Write the stripped output to this file instead of stdout. Requires a single input file — a multi\-file run is rejected (use `\-\-in\-place` for that). Mutually exclusive with `\-\-in\-place`. Omit it (and `\-\-in\-place`) to stream the result to stdout
17
+ .TP
18
+ \fB\-h\fR, \fB\-\-help\fR
19
+ Print help (see a summary with \*(Aq\-h\*(Aq)
20
+ .SH "INPUT SELECTION"
21
+ .TP
22
+ \fB\-p\fR, \fB\-\-paths\fR \fI<PATHS>\fR
23
+ Input files or directories to analyze. Unioned with any positional `[PATHS]`. Defaults to the current directory (`.`) when omitted and no manifest `paths` is set; an explicitly\-given path that does not exist is an error (exit 1)
24
+ .TP
25
+ \fB\-I\fR, \fB\-\-include\fR \fI<INCLUDE>\fR
26
+ Glob to include files. Repeat the flag to add multiple globs (`\-I \*(Aq*.rs\*(Aq \-I \*(Aq*.toml\*(Aq`); each occurrence takes exactly one value, so a positional argument that follows is never swallowed. A leading `./` is optional: `dir/**` and `./dir/**` are equivalent
27
+ .TP
28
+ \fB\-X\fR, \fB\-\-exclude\fR \fI<EXCLUDE>\fR
29
+ Glob to exclude files. Repeat the flag to add multiple globs (`\-X \*(Aq*.tmp\*(Aq \-X \*(Aq*.bak\*(Aq`); each occurrence takes exactly one value, so a positional argument that follows is never swallowed. A leading `./` is optional: `dir/**` and `./dir/**` are equivalent. CLI values are *merged with* (unioned, not a replacement for) any `bca.toml` `exclude` list and any `\-\-exclude\-from` patterns, so a CLI `\-\-exclude` never silently un\-excludes a directory the project config deliberately skipped. Pass `\-\-no\-config` to ignore the manifest entirely
30
+ .TP
31
+ \fB\-l\fR, \fB\-\-language\fR \fI<LANGUAGE>\fR
32
+ Force a language instead of inferring from extension. Accepts a canonical language name (`rust`, `python`, `cpp`, …) or a file extension (`rs`, `py`, …). An unrecognized value is a hard error
33
+ .TP
34
+ \fB\-\-no\-skip\-generated\fR
35
+ Disable auto\-skip of files marked as generated (e.g. `@generated`, `DO NOT EDIT`, `GENERATED CODE` near the top). By default the CLI skips such files so generated bindings do not skew metrics
36
+ .TP
37
+ \fB\-\-paths\-from\fR \fI<PATHS_FROM>\fR
38
+ Read newline\-separated input paths from a file. Use `\-` to read from stdin. Combined as a union with any `\-\-paths` values; globs still apply. Blank lines are skipped; `#` is treated as a path character (not a comment). To pass a file literally named `\-`, use `./\-`
39
+ .TP
40
+ \fB\-\-exclude\-from\fR \fI<EXCLUDE_FROM>\fR
41
+ Read additional `\-\-exclude` glob patterns from a file (one per line, `.gitignore`\-style). Blank lines and lines whose first non\-whitespace character is `#` are skipped. Use `\-` to read from stdin; to pass a file literally named `\-`, use `./\-`. Patterns are unioned with any `\-\-exclude` values into a single deny\-set; order does not matter. Convention is a `.bcaignore` at the repo root, mirroring `.gitignore` / `.dockerignore`
42
+ .TP
43
+ \fB\-\-no\-ignore\fR
44
+ Disable `.gitignore` / `.ignore` / global gitignore awareness when expanding input directories. Explicit file paths are always honored regardless of this flag
45
+ .TP
46
+ \fB\-\-no\-config\fR
47
+ Skip auto\-discovery of a `bca.toml` manifest. By default `bca` climbs from the working directory to the repo root looking for `bca.toml` and merges its keys *under* any explicit CLI flags. Pass this for raw, fully\-explicit invocations that must not pick up repo\-level config (e.g. a reproducible CI one\-liner). When no manifest is discovered this flag is a no\-op
48
+ .TP
49
+ [\fIPATHS\fR]
50
+ Input files or directories to analyze, given positionally (`bca metrics src/ tests/`). Unioned with any `\-\-paths`/`\-p` values
51
+ .SH "WALKER TUNING"
52
+ .TP
53
+ \fB\-j\fR, \fB\-\-jobs\fR \fI<N|auto>\fR [default: auto]
54
+ Number of jobs.
55
+
56
+ Defaults to the effective CPU count as reported by the OS (cgroup\-quota\- and cpuset\-aware on Linux). Pass an explicit integer or `auto` to override. `\-\-jobs 1` forces serial mode for debugging. `\-\-num\-jobs` is kept as a hidden alias for one release cycle and is slated for removal in the next major.
57
+ .TP
58
+ \fB\-\-exclude\-tests\fR
59
+ Exclude inline test code from metric computation. Currently applies to Rust only (skips `#[test]`, `#[cfg(test)]`, `#[tokio::test]`, `#[rstest]`, `#![cfg(test)]` items and their subtrees). Default is off — every node is counted, so numbers stay byte\-for\-byte stable. Languages without a test\-subtree skip rule ignore this flag
60
+ .TP
61
+ \fB\-\-cyclomatic\-count\-try\fR[=\fI<BOOL>\fR]
62
+ Whether Rust\*(Aqs `?` operator (the `try_expression` node) contributes to cyclomatic complexity (standard and modified). Defaults to `true` — `?` counts +1, matching upstream rust\-code\-analysis and every published metric value. Pass `\-\-cyclomatic\-count\-try=false` to treat `?` as linear error propagation — useful when cyclomatic is used as a maintainability gate that should not penalize fallible\-but\-linear code. Rust\-only: no other language emits the node, so the flag is inert elsewhere. Mirrors the `cyclomatic_count_try` manifest key; the CLI value overrides the manifest in either direction
63
+ .br
64
+
65
+ .br
66
+ \fIPossible values:\fR
67
+ .RS 14
68
+ .IP \(bu 2
69
+ true
70
+ .IP \(bu 2
71
+ false
72
+ .RE
73
+ .SH PREPROCESSOR
74
+ .TP
75
+ \fB\-\-preproc\-data\fR \fI<PREPROC_DATA>\fR
76
+ Existing preprocessor\-data JSON to consume during C/C++ analysis. Use `bca preproc` to produce one
man/bca-vcs-commit.1 ADDED
@@ -0,0 +1,45 @@
1
+ .ie \n(.g .ds Aq \(aq
2
+ .el .ds Aq '
3
+ .TH BCA-VCS-COMMIT 1 "big-code-analysis 2.0.0" "big-code-analysis Manual"
4
+ .SH NAME
5
+ bca\-vcs\-commit \- Score a single commit for defect\-induction risk — the just\-in\-time (JIT) defect\-prediction unit a CI gate reviews at check\-in. Emits a JSON breakdown of size / diffusion / history / experience / purpose features, their contributions, and an ordinal composite score. Window / `\-\-ref` / bot / merge / rename behaviour comes from the parent `vcs` flags. The old `jit` spelling stays a hidden alias for one release cycle
6
+ .SH SYNOPSIS
7
+ \fBbca\-vcs\-commit\fR [\fB\-\-diff\fR] [\fB\-O\fR|\fB\-\-format\fR] [\fB\-o\fR|\fB\-\-output\fR] [\fB\-\-pretty\fR] [\fB\-\-fail\-above\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fICOMMIT\fR]
8
+ .SH DESCRIPTION
9
+ Score a single commit for defect\-induction risk — the just\-in\-time (JIT) defect\-prediction unit a CI gate reviews at check\-in. Emits a JSON breakdown of size / diffusion / history / experience / purpose features, their contributions, and an ordinal composite score. Window / `\-\-ref` / bot / merge / rename behaviour comes from the parent `vcs` flags. The old `jit` spelling stays a hidden alias for one release cycle
10
+ .SH OPTIONS
11
+ .TP
12
+ \fB\-\-diff\fR \fI<FILE>\fR
13
+ Score a `git diff` instead of a commit. Reads the diff from the given file, or from stdin when the value is `\-`. The input must be a git\-style unified diff with `diff \-\-git` file headers (as produced by `git diff` / `git format\-patch`); plain `diff \-u` output without those headers and combined / merge diffs (`git diff \-\-cc`, `@@@` headers) are not supported. A bare diff has no author / parent / history, so ONLY the size and diffusion groups are scored; the result is a deliberately PARTIAL report (history / experience / purpose are marked unavailable, not zero) and its score is NOT comparable to a commit score. Mutually exclusive with the positional commit spec
14
+ .TP
15
+ \fB\-O\fR, \fB\-\-format\fR \fI<FORMAT>\fR [default: json]
16
+ Output format (`json` default, plus `yaml` / `toml` / `cbor`)
17
+ .br
18
+
19
+ .br
20
+ \fIPossible values:\fR
21
+ .RS 14
22
+ .IP \(bu 2
23
+ json
24
+ .IP \(bu 2
25
+ yaml
26
+ .IP \(bu 2
27
+ toml
28
+ .IP \(bu 2
29
+ cbor
30
+ .RE
31
+ .TP
32
+ \fB\-o\fR, \fB\-\-output\fR \fI<OUTPUT>\fR
33
+ Output file. Stdout if omitted (CBOR requires this flag — it is binary)
34
+ .TP
35
+ \fB\-\-pretty\fR
36
+ Pretty\-print JSON / TOML output
37
+ .TP
38
+ \fB\-\-fail\-above\fR \fI<SCORE>\fR
39
+ Fail the gate (exit code 2, the `check` "metric gate" convention) when the composite score is at or above this threshold. For use as a CI gate. The score is ordinal, so calibrate the threshold against the repository\*(Aqs own commit\-score distribution. The old `\-\-fail\-over` spelling stays a hidden alias for one release cycle
40
+ .TP
41
+ \fB\-h\fR, \fB\-\-help\fR
42
+ Print help
43
+ .TP
44
+ [\fICOMMIT\fR] [default: HEAD]
45
+ Commit / revision to score (any git revision spelling: a SHA, a tag, `HEAD`, `main~3`, …). Scored against its first parent. Mutually exclusive with `\-\-diff`
man/bca-vcs-trend.1 ADDED
@@ -0,0 +1,43 @@
1
+ .ie \n(.g .ds Aq \(aq
2
+ .el .ds Aq '
3
+ .TH BCA-VCS-TREND 1 "big-code-analysis 2.0.0" "big-code-analysis Manual"
4
+ .SH NAME
5
+ bca\-vcs\-trend \- Sample the change\-history metrics at several points in time and emit a per\-file time series, surfacing whether code is improving or degrading over the project\*(Aqs life. Each point re\-anchors at the mainline tip of that moment, so it is a faithful historical snapshot. Window / `\-\-ref` / bot / merge / rename / as\-of (the most\-recent anchor) and `\-\-top` (files kept) come from the parent `vcs` flags
6
+ .SH SYNOPSIS
7
+ \fBbca\-vcs\-trend\fR [\fB\-\-points\fR] [\fB\-\-span\fR] [\fB\-\-top\-deltas\fR] [\fB\-O\fR|\fB\-\-format\fR] [\fB\-o\fR|\fB\-\-output\fR] [\fB\-\-pretty\fR] [\fB\-h\fR|\fB\-\-help\fR]
8
+ .SH DESCRIPTION
9
+ Sample the change\-history metrics at several points in time and emit a per\-file time series, surfacing whether code is improving or degrading over the project\*(Aqs life. Each point re\-anchors at the mainline tip of that moment, so it is a faithful historical snapshot. Window / `\-\-ref` / bot / merge / rename / as\-of (the most\-recent anchor) and `\-\-top` (files kept) come from the parent `vcs` flags
10
+ .SH OPTIONS
11
+ .TP
12
+ \fB\-\-points\fR \fI<POINTS>\fR [default: 12]
13
+ Number of evenly\-spaced sample points across `\-\-span`, inclusive of both endpoints (the oldest is `as\-of − span`, the newest is `as\-of`). Minimum 2, maximum 120 — the cap bounds the per\-point history walks on deep histories
14
+ .TP
15
+ \fB\-\-span\fR \fI<SPAN>\fR [default: 12mo]
16
+ Total look\-back window the points span (`12mo`, `2y`, `52w`, `365d`, or ISO 8601 `P1Y`). With the default 12 points this yields roughly monthly snapshots over the past year
17
+ .TP
18
+ \fB\-\-top\-deltas\fR \fI<TOP_DELTAS>\fR [default: 10]
19
+ Show only the top N files in each improving / regressing delta summary (`0` = all)
20
+ .TP
21
+ \fB\-O\fR, \fB\-\-format\fR \fI<FORMAT>\fR [default: json]
22
+ Output format (`json` default, plus `yaml` / `cbor`). TOML is excluded — absent points serialize as `null`, which TOML cannot represent
23
+ .br
24
+
25
+ .br
26
+ \fIPossible values:\fR
27
+ .RS 14
28
+ .IP \(bu 2
29
+ json
30
+ .IP \(bu 2
31
+ yaml
32
+ .IP \(bu 2
33
+ cbor
34
+ .RE
35
+ .TP
36
+ \fB\-o\fR, \fB\-\-output\fR \fI<OUTPUT>\fR
37
+ Output file. Stdout if omitted (CBOR requires this flag — it is binary)
38
+ .TP
39
+ \fB\-\-pretty\fR
40
+ Pretty\-print JSON output
41
+ .TP
42
+ \fB\-h\fR, \fB\-\-help\fR
43
+ Print help
man/bca-vcs.1 ADDED
@@ -0,0 +1,173 @@
1
+ .ie \n(.g .ds Aq \(aq
2
+ .el .ds Aq '
3
+ .TH BCA-VCS 1 "big-code-analysis 2.0.0" "big-code-analysis Manual"
4
+ .SH NAME
5
+ bca\-vcs \- Rank files by change\-history (VCS) risk: churn, commit and author counts, ownership dilution, and bug\- / security\-fix history over a git working tree. Errors clearly outside a repo
6
+ .SH SYNOPSIS
7
+ \fBbca\-vcs\fR [\fB\-p\fR|\fB\-\-paths\fR] [\fB\-I\fR|\fB\-\-include\fR] [\fB\-X\fR|\fB\-\-exclude\fR] [\fB\-l\fR|\fB\-\-language\fR] [\fB\-\-no\-skip\-generated\fR] [\fB\-\-paths\-from\fR] [\fB\-\-exclude\-from\fR] [\fB\-\-no\-ignore\fR] [\fB\-\-no\-config\fR] [\fB\-j\fR|\fB\-\-jobs\fR] [\fB\-\-exclude\-tests\fR] [\fB\-\-cyclomatic\-count\-try\fR] [\fB\-O\fR|\fB\-\-format\fR] [\fB\-o\fR|\fB\-\-output\fR] [\fB\-\-pretty\fR] [\fB\-\-long\-window\fR] [\fB\-\-recent\-window\fR] [\fB\-\-top\fR] [\fB\-\-file\-types\fR] [\fB\-\-ref\fR] [\fB\-\-full\-history\fR] [\fB\-\-include\-merges\fR] [\fB\-\-no\-follow\-renames\fR] [\fB\-\-no\-exclude\-bots\fR] [\fB\-\-bot\-pattern\fR] [\fB\-\-as\-of\fR] [\fB\-\-risk\-formula\fR] [\fB\-\-emit\-author\-details\fR] [\fB\-\-author\-hash\-key\fR] [\fB\-\-include\-deleted\fR] [\fB\-\-bus\-factor\-threshold\fR] [\fB\-\-no\-cache\fR] [\fB\-\-clear\-cache\fR] [\fB\-\-cache\-dir\fR] [\fB\-h\fR|\fB\-\-help\fR] [\fIsubcommands\fR]
8
+ .SH DESCRIPTION
9
+ Rank files by change\-history (VCS) risk: churn, commit and author counts, ownership dilution, and bug\- / security\-fix history over a git working tree. Errors clearly outside a repo
10
+ .SH OPTIONS
11
+ .TP
12
+ \fB\-O\fR, \fB\-\-format\fR \fI<FORMAT>\fR
13
+ Output format. When omitted, the human\-readable ranked `text` table is printed; pass `\-\-format text` to request it explicitly. `markdown` / `html` render a sortable report page like `bca report`; `json` / `yaml` / `toml` / `cbor` / `csv` emit structured data. `\-\-output\-format` is accepted as a deprecated alias
14
+ .br
15
+
16
+ .br
17
+ \fIPossible values:\fR
18
+ .RS 14
19
+ .IP \(bu 2
20
+ text: The human\-readable ranked table — the same output a bare `bca vcs` prints, now explicitly selectable so the human format is named and requestable everywhere
21
+ .IP \(bu 2
22
+ cbor
23
+ .IP \(bu 2
24
+ csv
25
+ .IP \(bu 2
26
+ json
27
+ .IP \(bu 2
28
+ toml
29
+ .IP \(bu 2
30
+ yaml
31
+ .IP \(bu 2
32
+ markdown
33
+ .IP \(bu 2
34
+ html
35
+ .RE
36
+ .TP
37
+ \fB\-o\fR, \fB\-\-output\fR \fI<OUTPUT>\fR
38
+ Output file. A change\-history report is a single whole\-repo document, so this names one file. Stdout if omitted (CBOR requires this flag — it is binary)
39
+ .TP
40
+ \fB\-\-pretty\fR
41
+ Pretty\-print JSON / TOML output
42
+ .TP
43
+ \fB\-\-long\-window\fR \fI<LONG_WINDOW>\fR [default: 12mo]
44
+ Long observation window (`12mo`, `2y`, `52w`, `365d`, or ISO 8601 `P1Y`). Accepted in the parent or subcommand position
45
+ .TP
46
+ \fB\-\-recent\-window\fR \fI<RECENT_WINDOW>\fR [default: 90d]
47
+ Recent observation window. Accepted in the parent or subcommand position
48
+ .TP
49
+ \fB\-\-top\fR \fI<TOP>\fR [default: 50]
50
+ Show only the top N files by risk score (`0` = all)
51
+ .TP
52
+ \fB\-\-file\-types\fR \fI<SCOPE>\fR
53
+ Which tracked files to rank: `metrics` (only files bca has metrics for — the default), `all` (every tracked text file), or a comma\-separated extension allow\-list (`rs,py,toml`). Applied on top of `\-\-paths`/`\-\-include`/`\-\-exclude` (AND semantics). When omitted, the `bca.toml` `[vcs] file_types` key is used if present, else `metrics`. Setting it here replaces the manifest value
54
+ .TP
55
+ \fB\-\-ref\fR \fI<REFERENCE>\fR
56
+ Revision to analyze (defaults to `HEAD`). Accepted in the parent or `trend` subcommand position, but rejected under `commit`, which names its commit positionally
57
+ .TP
58
+ \fB\-\-full\-history\fR
59
+ Walk the full commit DAG rather than first\-parent only
60
+ .TP
61
+ \fB\-\-include\-merges\fR
62
+ Include merge commits (skipped by default)
63
+ .TP
64
+ \fB\-\-no\-follow\-renames\fR
65
+ Do not follow file renames across history
66
+ .TP
67
+ \fB\-\-no\-exclude\-bots\fR
68
+ Do not exclude bot author identities
69
+ .TP
70
+ \fB\-\-bot\-pattern\fR \fI<BOT_PATTERN>\fR
71
+ Override the bot\-author exclusion regex
72
+ .TP
73
+ \fB\-\-as\-of\fR \fI<AS_OF>\fR
74
+ Reference "now" for reproducible runs (RFC 3339, `@unix`, or any git date spelling). Defaults to wall\-clock time
75
+ .TP
76
+ \fB\-\-risk\-formula\fR \fI<RISK_FORMULA>\fR [default: weighted]
77
+ Composite risk\-score formula
78
+ .br
79
+
80
+ .br
81
+ \fIPossible values:\fR
82
+ .RS 14
83
+ .IP \(bu 2
84
+ weighted: Log\-scaled weighted sum with categorical bumps (default)
85
+ .IP \(bu 2
86
+ percentile: Per\-signal percentile rank within the analyzed set, averaged
87
+ .RE
88
+ .TP
89
+ \fB\-\-emit\-author\-details\fR
90
+ Emit SHA\-256\-hashed canonical author identities
91
+ .TP
92
+ \fB\-\-author\-hash\-key\fR \fI<KEY>\fR
93
+ Secret key that hardens `\-\-emit\-author\-details` into a keyed HMAC\-SHA256: an attacker can no longer recover the emitted digests by hashing a candidate set of emails or with a precomputed email→hash table. Without it the digests are a bare SHA\-256 pseudonym. Requires `\-\-emit\-author\-details`; the same key yields the same digests across runs and a cache replay.
94
+
95
+ Prefer the `BCA_AUTHOR_HASH_KEY` environment variable: a key on the command line is visible to other users via the process list (`ps`) and lands in shell history. The flag takes precedence when both are set.
96
+ .TP
97
+ \fB\-\-include\-deleted\fR
98
+ Emit stats for files deleted at the target ref
99
+ .TP
100
+ \fB\-\-bus\-factor\-threshold\fR \fI<BUS_FACTOR_THRESHOLD>\fR [default: 0.5]
101
+ Bus\-factor coverage (abandonment) threshold — the fraction of a directory\*(Aqs files that must be orphaned for the truck\-factor greedy removal to stop. Must be in `(0, 1)`; default `0.5` per Avelino. Ignored by `bca vcs commit`
102
+ .TP
103
+ \fB\-\-no\-cache\fR
104
+ Disable the persistent change\-history cache for the file ranking: always walk fresh, and neither read nor write the cache. The cache otherwise reuses prior work on an unchanged tree and walks only new commits when `HEAD` has advanced
105
+ .TP
106
+ \fB\-\-clear\-cache\fR
107
+ Remove this repository\*(Aqs cached history before ranking, forcing a full rebuild. Combine with `\-\-no\-cache` to wipe without re\-priming
108
+ .TP
109
+ \fB\-\-cache\-dir\fR \fI<CACHE_DIR>\fR
110
+ Directory for the persistent history cache. Defaults to `$XDG_CACHE_HOME/big\-code\-analysis/vcs` (or the platform equivalent: `%LOCALAPPDATA%` on Windows, `~/.cache` otherwise)
111
+ .TP
112
+ \fB\-h\fR, \fB\-\-help\fR
113
+ Print help (see a summary with \*(Aq\-h\*(Aq)
114
+ .SH "INPUT SELECTION"
115
+ .TP
116
+ \fB\-p\fR, \fB\-\-paths\fR \fI<PATHS>\fR
117
+ Input files or directories to analyze. Unioned with any positional `[PATHS]`. Defaults to the current directory (`.`) when omitted and no manifest `paths` is set; an explicitly\-given path that does not exist is an error (exit 1)
118
+ .TP
119
+ \fB\-I\fR, \fB\-\-include\fR \fI<INCLUDE>\fR
120
+ Glob to include files. Repeat the flag to add multiple globs (`\-I \*(Aq*.rs\*(Aq \-I \*(Aq*.toml\*(Aq`); each occurrence takes exactly one value, so a positional argument that follows is never swallowed. A leading `./` is optional: `dir/**` and `./dir/**` are equivalent
121
+ .TP
122
+ \fB\-X\fR, \fB\-\-exclude\fR \fI<EXCLUDE>\fR
123
+ Glob to exclude files. Repeat the flag to add multiple globs (`\-X \*(Aq*.tmp\*(Aq \-X \*(Aq*.bak\*(Aq`); each occurrence takes exactly one value, so a positional argument that follows is never swallowed. A leading `./` is optional: `dir/**` and `./dir/**` are equivalent. CLI values are *merged with* (unioned, not a replacement for) any `bca.toml` `exclude` list and any `\-\-exclude\-from` patterns, so a CLI `\-\-exclude` never silently un\-excludes a directory the project config deliberately skipped. Pass `\-\-no\-config` to ignore the manifest entirely
124
+ .TP
125
+ \fB\-l\fR, \fB\-\-language\fR \fI<LANGUAGE>\fR
126
+ Force a language instead of inferring from extension. Accepts a canonical language name (`rust`, `python`, `cpp`, …) or a file extension (`rs`, `py`, …). An unrecognized value is a hard error
127
+ .TP
128
+ \fB\-\-no\-skip\-generated\fR
129
+ Disable auto\-skip of files marked as generated (e.g. `@generated`, `DO NOT EDIT`, `GENERATED CODE` near the top). By default the CLI skips such files so generated bindings do not skew metrics
130
+ .TP
131
+ \fB\-\-paths\-from\fR \fI<PATHS_FROM>\fR
132
+ Read newline\-separated input paths from a file. Use `\-` to read from stdin. Combined as a union with any `\-\-paths` values; globs still apply. Blank lines are skipped; `#` is treated as a path character (not a comment). To pass a file literally named `\-`, use `./\-`
133
+ .TP
134
+ \fB\-\-exclude\-from\fR \fI<EXCLUDE_FROM>\fR
135
+ Read additional `\-\-exclude` glob patterns from a file (one per line, `.gitignore`\-style). Blank lines and lines whose first non\-whitespace character is `#` are skipped. Use `\-` to read from stdin; to pass a file literally named `\-`, use `./\-`. Patterns are unioned with any `\-\-exclude` values into a single deny\-set; order does not matter. Convention is a `.bcaignore` at the repo root, mirroring `.gitignore` / `.dockerignore`
136
+ .TP
137
+ \fB\-\-no\-ignore\fR
138
+ Disable `.gitignore` / `.ignore` / global gitignore awareness when expanding input directories. Explicit file paths are always honored regardless of this flag
139
+ .TP
140
+ \fB\-\-no\-config\fR
141
+ Skip auto\-discovery of a `bca.toml` manifest. By default `bca` climbs from the working directory to the repo root looking for `bca.toml` and merges its keys *under* any explicit CLI flags. Pass this for raw, fully\-explicit invocations that must not pick up repo\-level config (e.g. a reproducible CI one\-liner). When no manifest is discovered this flag is a no\-op
142
+ .SH "WALKER TUNING"
143
+ .TP
144
+ \fB\-j\fR, \fB\-\-jobs\fR \fI<N|auto>\fR [default: auto]
145
+ Number of jobs.
146
+
147
+ Defaults to the effective CPU count as reported by the OS (cgroup\-quota\- and cpuset\-aware on Linux). Pass an explicit integer or `auto` to override. `\-\-jobs 1` forces serial mode for debugging. `\-\-num\-jobs` is kept as a hidden alias for one release cycle and is slated for removal in the next major.
148
+ .TP
149
+ \fB\-\-exclude\-tests\fR
150
+ Exclude inline test code from metric computation. Currently applies to Rust only (skips `#[test]`, `#[cfg(test)]`, `#[tokio::test]`, `#[rstest]`, `#![cfg(test)]` items and their subtrees). Default is off — every node is counted, so numbers stay byte\-for\-byte stable. Languages without a test\-subtree skip rule ignore this flag
151
+ .TP
152
+ \fB\-\-cyclomatic\-count\-try\fR[=\fI<BOOL>\fR]
153
+ Whether Rust\*(Aqs `?` operator (the `try_expression` node) contributes to cyclomatic complexity (standard and modified). Defaults to `true` — `?` counts +1, matching upstream rust\-code\-analysis and every published metric value. Pass `\-\-cyclomatic\-count\-try=false` to treat `?` as linear error propagation — useful when cyclomatic is used as a maintainability gate that should not penalize fallible\-but\-linear code. Rust\-only: no other language emits the node, so the flag is inert elsewhere. Mirrors the `cyclomatic_count_try` manifest key; the CLI value overrides the manifest in either direction
154
+ .br
155
+
156
+ .br
157
+ \fIPossible values:\fR
158
+ .RS 14
159
+ .IP \(bu 2
160
+ true
161
+ .IP \(bu 2
162
+ false
163
+ .RE
164
+ .SH SUBCOMMANDS
165
+ .TP
166
+ bca\-vcs\-commit(1)
167
+ Score a single commit for defect\-induction risk — the just\-in\-time (JIT) defect\-prediction unit a CI gate reviews at check\-in. Emits a JSON breakdown of size / diffusion / history / experience / purpose features, their contributions, and an ordinal composite score. Window / `\-\-ref` / bot / merge / rename behaviour comes from the parent `vcs` flags. The old `jit` spelling stays a hidden alias for one release cycle
168
+ .TP
169
+ bca\-vcs\-trend(1)
170
+ Sample the change\-history metrics at several points in time and emit a per\-file time series, surfacing whether code is improving or degrading over the project\*(Aqs life. Each point re\-anchors at the mainline tip of that moment, so it is a faithful historical snapshot. Window / `\-\-ref` / bot / merge / rename / as\-of (the most\-recent anchor) and `\-\-top` (files kept) come from the parent `vcs` flags
171
+ .TP
172
+ bca\-vcs\-help(1)
173
+ Print this message or the help of the given subcommand(s)