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.
- big_code_analysis_cli-2.0.0.data/scripts/bca +0 -0
- big_code_analysis_cli-2.0.0.dist-info/METADATA +195 -0
- big_code_analysis_cli-2.0.0.dist-info/RECORD +26 -0
- big_code_analysis_cli-2.0.0.dist-info/WHEEL +4 -0
- big_code_analysis_cli-2.0.0.dist-info/licenses/LICENSE +355 -0
- big_code_analysis_cli-2.0.0.dist-info/licenses/THIRD-PARTY-LICENSES-bca.md +5463 -0
- big_code_analysis_cli-2.0.0.dist-info/sboms/big-code-analysis-cli.cyclonedx.json +8253 -0
- man/bca-check.1 +208 -0
- man/bca-count.1 +73 -0
- man/bca-diff-baseline.1 +55 -0
- man/bca-diff.1 +104 -0
- man/bca-dump.1 +92 -0
- man/bca-exemptions.1 +109 -0
- man/bca-find.1 +95 -0
- man/bca-functions.1 +86 -0
- man/bca-init.1 +76 -0
- man/bca-list-metrics.1 +26 -0
- man/bca-metrics.1 +125 -0
- man/bca-ops.1 +116 -0
- man/bca-preproc.1 +69 -0
- man/bca-report.1 +105 -0
- man/bca-strip-comments.1 +76 -0
- man/bca-vcs-commit.1 +45 -0
- man/bca-vcs-trend.1 +43 -0
- man/bca-vcs.1 +173 -0
- man/bca.1 +93 -0
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
|
man/bca-strip-comments.1
ADDED
|
@@ -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)
|