Skip to main content

big-code-analysis-cli

bca analyzes source code and emits per-file structured metrics, aggregated reports, AST dumps, node lookups, and more.

Migrating from the flag-style CLI? The CLI is now subcommand-driven. See the migration guide for old-form -> new-form mappings of every flag.

Installation

From PyPI (pip)

The fastest path on Linux, macOS, and Windows — no Rust toolchain required:

pip install big-code-analysis-cli   # installs the `bca` command on PATH
bca --version

Note the deliberate split between the distribution name and the command name: you pip install big-code-analysis-cli, but the installed executable is bca. The bca name on PyPI belongs to an unrelated project, and big-code-analysis is this project's importable library bindings (pip install big-code-analysis — a different deliverable). The wheel ships the full all-languages grammar set; a single py3-none-<platform> wheel covers every CPython 3.x (and PyPy) on that platform. Prebuilt wheels are published for Linux (manylinux_2_28 x86_64 / aarch64), macOS (x86_64 / arm64), and Windows (x86_64); other platforms fall back to a source build.

From crates.io (cargo)

cargo install big-code-analysis-cli

From source

cd big-code-analysis-cli/
cargo build --release

Usage

bca [OPTIONS] <COMMAND> [COMMAND OPTIONS]

The command picks what to do; its options describe both what to walk (paths, includes/excludes, parallelism, language overrides) and how to format the result. Input-selection and walker-tuning flags are scoped to the subcommand that consumes them and must be written after the subcommand token — only -w / --warnings and --report-skipped are universal and accepted in any position.

Commands

Command Purpose
metrics Per-file metric output (-O cbor/csv/json/toml/yaml, --output-dir DIR).
ops Per-file operand/operator output (same formats as metrics).
report <FORMAT> Aggregated report (markdown or html).
check Check per-function metrics against thresholds; exits 2 on threshold violations.
dump AST dump to stdout (--line-start/--line-end to scope a range).
find <NODE>... Find nodes of one or more types (--line-start/--line-end to scope a range).
count <NODE>... Count nodes of one or more types.
functions List functions/methods and their spans.
strip-comments Remove comments from source files (--in-place).
preproc Build preprocessor-data JSON for C/C++ analysis.
list-metrics [names|descriptions] List computable metrics.

Run bca <COMMAND> --help for command-specific options.

Walking options

These input-selection and walker-tuning flags are accepted by the walking subcommands (metrics, ops, report, check, dump, find, count, functions, strip-comments) and must be written after the subcommand. A flag passed to a subcommand that never consumes it is a hard usage error (exit 1), not a silent no-op.

  • -p, --paths <FILE>... — input files or directories. The walking subcommands also accept paths positionally (bca metrics src/).
  • -I, --include <GLOB> — include files matching pattern (repeatable).
  • -X, --exclude <GLOB> — exclude files matching pattern (repeatable).
  • -j, --jobs <N> — worker threads (--num-jobs is a deprecated alias).
  • -l, --language <LANG> — force a language instead of inferring. Accepts a language name (rust) or extension (rs); unknown values error out.
  • -w, --warnings — print warnings (skipped files, unrecognized languages). --warning is a deprecated alias.
  • --no-skip-generated — disable auto-skip of files marked as generated (see Skipping generated code).
  • --report-skipped — log a skipped (generated): <path> line to stderr for every file the generated-code detector excludes.
  • --preproc-data <FILE> — consume an existing preproc JSON during C/C++ analysis. Build one with bca preproc.

-w / --warnings and --report-skipped are the only universal options; they are accepted in any position, before or after the subcommand.

Building with a subset of languages

The shipped bca binary compiles every supported tree-sitter grammar in. The big-code-analysis-cli crate pins the library's all-languages feature set explicitly, so passing --no-default-features or a custom --features list to cargo build -p big-code-analysis-cli does not drop grammars from the resulting binary — feature selection on the CLI crate is not honoured (see #252 for the rationale: dropping a grammar silently from a user-facing binary would surface as "language X stopped working" rather than a build error).

Consumers who need a reduced feature set should embed the big-code-analysis library in their own Rust code and control feature selection in their own Cargo.toml. See the library's per-language Cargo features chapter for the full list of features and a worked example.

Examples

Per-file JSON metrics:

bca metrics --paths ./src -O json --output-dir ./out/

Aggregated markdown quality report:

bca report markdown --paths "$PWD" --jobs $(nproc) \
    --top 20 --strip-prefix "$PWD/"

AST dump for one file:

bca dump ./file.rs

List all metrics with one-line descriptions:

bca list-metrics descriptions

Skipping generated code

Generated bindings (protobuf stubs, OpenAPI clients, lex/yacc output, build-system plumbing) inflate metrics for code no human will refactor. By default, bca scans the first ~50 lines / 5 KiB of each file for a generated-code marker and skips matches before parsing.

Recognized markers (case-insensitive):

  • @generated — Facebook / Meta convention; also emitted by buck2, rustfmt, prettier, and many code generators.
  • DO NOT EDIT — Go's // Code generated by … DO NOT EDIT. is the canonical form; the bare phrase is also widely copied (Bazel, protoc, OpenAPI clients).
  • GENERATED CODE — Lizard's marker, recognized for compatibility.

A marker phrase that appears only deep in the file body (past the scan window) does not trigger the skip.

To restore the previous behavior and analyze everything, pass --no-skip-generated. To audit which files were excluded, pass --report-skipped; the CLI logs skipped (generated): <path> to stderr for each file.

Metadata

Release files for big-code-analysis-cli 2.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for big-code-analysis-cli 2.3.1
File Size Uploaded
big_code_analysis_cli-2.3.1.tar.gz 4.8 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for big-code-analysis-cli 2.3.1
File
big_code_analysis_cli-2.3.1-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
big_code_analysis_cli-2.3.1-py3-none-manylinux_2_28_x86_64.whl Python 3 none Linux glibc 2.28+ x86-64 Details
big_code_analysis_cli-2.3.1-py3-none-manylinux_2_28_aarch64.whl Python 3 none Linux glibc 2.28+ ARM64 Details
big_code_analysis_cli-2.3.1-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details
big_code_analysis_cli-2.3.1-py3-none-macosx_10_12_x86_64.whl Python 3 none macOS 10.12+ x86-64 Details

Total release size: 45.1 MB

Release files / big_code_analysis_cli-2.3.1.tar.gz

Download URL big_code_analysis_cli-2.3.1.tar.gz
Size 4.8 MB
Tags Source
SHA-256 checksum
How to use checksums
5a0ed41e1125319168a79fd5136261f52a05180bb3da4c64b05069af18afa13b
BLAKE2b-256 checksum
How to use checksums
1e7af035abe58b8fe8f8c074b2f59065cfb55259074112f3c45c8a814c9e3064
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 10, 2026.

Transparency log

Release files / big_code_analysis_cli-2.3.1-py3-none-win_amd64.whl

Download URL big_code_analysis_cli-2.3.1-py3-none-win_amd64.whl
Size 8.3 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
4c08920be0844ef428a3ac44efc0ba772c2a003399272dca9f5bf5faaf635adc
BLAKE2b-256 checksum
How to use checksums
70373c498953cc62a703fb225f61476d48458507172f355e8c59988372a9084d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 10, 2026.

Transparency log

Release files / big_code_analysis_cli-2.3.1-py3-none-manylinux_2_28_x86_64.whl

Download URL big_code_analysis_cli-2.3.1-py3-none-manylinux_2_28_x86_64.whl
Size 8.1 MB
Tags Linux glibc 2.28+ x86-64 Python 3
SHA-256 checksum
How to use checksums
babdea5a7819802bb594e5b5d72be3e470ec52725518002ffdd45ee9e2b0a9a3
BLAKE2b-256 checksum
How to use checksums
8a06c3d8c4d1c28201b6d27e347149c15d3afdf1203ace746c960670cf499f7c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 10, 2026.

Transparency log

Release files / big_code_analysis_cli-2.3.1-py3-none-manylinux_2_28_aarch64.whl

Download URL big_code_analysis_cli-2.3.1-py3-none-manylinux_2_28_aarch64.whl
Size 7.8 MB
Tags Linux glibc 2.28+ ARM64 Python 3
SHA-256 checksum
How to use checksums
deb4ec2539c03dc0ab22019a6627fd237985f8d5634bfc20c08d0bb0523e4e71
BLAKE2b-256 checksum
How to use checksums
a54df2db7c92d826232d865eb1fddc571768bfe2a8113c5b269cde73c316d0e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 10, 2026.

Transparency log

Release files / big_code_analysis_cli-2.3.1-py3-none-macosx_11_0_arm64.whl

Download URL big_code_analysis_cli-2.3.1-py3-none-macosx_11_0_arm64.whl
Size 8.0 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
73f4bfb922d7bfd6f3c577abebb202f1897eb880284320d5ed4c12354ae4fe38
BLAKE2b-256 checksum
How to use checksums
ca74aa0aa59be3e73ff3bc309074dedbca8c29c163692b79d2833c52bfb1e954
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 10, 2026.

Transparency log

Release files / big_code_analysis_cli-2.3.1-py3-none-macosx_10_12_x86_64.whl

Download URL big_code_analysis_cli-2.3.1-py3-none-macosx_10_12_x86_64.whl
Size 8.0 MB
Tags Python 3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
bf35555f3ebd377f4bc21806c9f2c9b0e51577d7554f387134ca41d61fb236db
BLAKE2b-256 checksum
How to use checksums
e3ad3267308680445b1c8a4d79026d7fef8f1023827a98f7b95dfd694f837931
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 10, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2.3.1 This release

6 release files

2.3.0

6 release files

2.2.0

6 release files

2.1.0

6 release files

2.0.0

6 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page