Code Analysis

.deepsource.toml

This section covers .deepsource.toml configuration specific to the rust analyzer. Please make sure to read the general configuration guide first.

name

  • Type: String
  • Presence: mandatory
  • Description: Shortcode of the analyzer.
  • Example:
name = "rust"

enabled

  • Type: Boolean
  • Presence: optional
  • Description: Toggle whether this analyzer should be run.
  • Example:
enabled = true

meta

  • Type: Table
  • Presence: optional
  • Description: Any supported metadata to pass to the analyzer.
  • Example:
[analyzers.meta]
  msrv = "1.25.0"
  skip_doc_coverage = ["module", "trait"]
msrv
  • Type: String
  • Presence: optional
  • Description: Minimum supported Rust version that your project builds against. Note: we don’t support nightly Rust releases.
  • Default Value: "stable"
  • Example:
msrv = "1.58.1"
# or, for match against just 1.58 versions in general
msrv = "1.58"
# or, just stable to support the latest
# available release of rust on stable channel.
msrv = "stable"
skip_doc_coverage
  • Type: Array
  • Presence: optional
  • Description: Specify which artifacts to skip when calculating documentation coverage.
  • Available Values: const, struct, union, enum, function, module, static, trait, and type-alias
    • const - Ignore documentation coverage for const items
    • struct - Ignore documentation coverage for structs
    • union - Ignore documentation coverage for unions
    • enum - Ignore documentation coverage for enums
    • function - Ignore documentation coverage for functions
    • module - Ignore documentation coverage for modules
    • static - Ignore documentation coverage for static items
    • trait - Ignore documentation coverage for traits
    • type-alias - Ignore documentation coverage for type aliases
  • Default Value: []
  • Example:
skip_doc_coverage = ["module", "trait"]
track_test_doc_coverage
  • Type: Boolean
  • Presence: optional
  • Description: Toggle whether documentation coverage should be reported for test files.
  • Default Value: false
  • Example:
# The default configuration
track_test_doc_coverage = false
# Enable docs coverage for test files
track_test_doc_coverage = true
cyclomatic_complexity_threshold
  • Type: String
  • Presence: optional
  • Description: Specify the acceptable risk category for your project as the threshold. All functions with complexity beyond this threshold will raise an issue. For example, setting the threshold to low will flag all functions that have a cyclomatic complexity of more than 5, while setting the threshold to critical will not flag any function.
  • Available Values: low, medium, high, very-high and critical
Risk categoryCyclomatic complexity rangeRecommended action
low1-5No action is needed.
medium6-15Review and monitor.
high16-25Review and refactor. Recommended to add detailed comments if the function absolutely needs to be kept as it is.
very-high26-50Refactor to reduce the complexity.
critical>50Must refactor this. This can make the code untestable and very difficult to understand.
  • Default Value: high
  • Example:
[analyzers.meta]
cyclomatic_complexity_threshold = "very-high"

Sample Config

version = 1

test_patterns = [
  "tests/**"
]

exclude_patterns = [
  "**/examples/**"
]

[[analyzers]]
name = "rust"
enabled = true

  [analyzers.meta]
  msrv = "stable"

We currently support Rust 1.25.0 and above in the stable channel but not nightly or beta channels.

Code Coverage

To report code coverage for Rust projects, you can use the cargo-llvm-cov tool. This tool generates code coverage reports in various formats, including LCOV, which DeepSource supports.

# Install cargo-llvm-cov from crates.io
cargo +stable install cargo-llvm-cov

# Run coverage against `cargo test`
cargo llvm-cov --lcov --output-path coverage.info

# or, to merge issues of multiple tests or runs
# cargo llvm-cov clean --workspace # remove artifacts that may affect the coverage results
# cargo llvm-cov run --no-report # run coverage
# cargo llvm-cov --no-report --features a # test coverage of feature `a`
# cargo llvm-cov --no-report --features b # test coverage of feature `b`
# cargo llvm-cov report --lcov # generate report without rerunning anything

# Install 'deepsource CLI'
curl https://deepsource.io/cli | sh

# Set DEEPSOURCE_DSN env variable from repository settings page
export DEEPSOURCE_DSN=https://sampledsn@deepsource.io

# From the root directory, run the report coverage command
./bin/deepsource report --analyzer test-coverage --key rust --value-file ./coverage.info

Code Formatter (Transformer)

rustfmt

Transform all incoming Rust code with rustfmt, the official Rust code formatter.

This section covers .deepsource.toml configuration specific to the rustfmt transformer. Please make sure to read the general configuration guide first.

name
  • Type: String
  • Presence: mandatory
  • Description: Shortcode of this transformer.
  • Example:
name = "rustfmt"
enabled
  • Type: Boolean
  • Presence: optional
  • Description: Toggle whether this transformer should be run.
  • Example:
enabled = true

Vulnerability Scanning

Supported target files:

  • Cargo.toml
  • Cargo.lock