Module: Audition

Defined in:
lib/audition.rb,
lib/audition/cli.rb,
lib/audition/fixer.rb,
lib/audition/config.rb,
lib/audition/report.rb,
lib/audition/target.rb,
lib/audition/finding.rb,
lib/audition/version.rb,
lib/audition/baseline.rb,
lib/audition/rewriters.rb,
lib/audition/directives.rb,
lib/audition/bundle_sweep.rb,
lib/audition/static/checks.rb,
lib/audition/dynamic/prober.rb,
lib/audition/static/analyzer.rb,
lib/audition/static/checks/base.rb,
lib/audition/static/graph_audit.rb,
lib/audition/static/source_file.rb,
lib/audition/static/literal_classifier.rb,
lib/audition/static/checks/unsafe_calls.rb,
lib/audition/static/checks/runtime_require.rb,
lib/audition/static/checks/global_variables.rb,
lib/audition/static/checks/ractor_isolation.rb,
lib/audition/static/checks/mutable_constants.rb

Overview

Probes Ruby code for the ability to run inside Ractors: static analysis (Prism per-file checks plus whole-program rubydex graph checks), dynamic in-Ractor probing in subprocesses, explanations and fixes for every finding, and a four-state verdict.

The command line lives in CLI; library consumers usually start from Target.detect and Static::Analyzer.

Examples:

Audit one file programmatically

analyzer = Audition::Static::Analyzer.new
findings = analyzer.analyze_path("app/models/user.rb")
findings.each { |f| puts "#{f.location}: #{f.message}" }

Defined Under Namespace

Modules: Dynamic, Rewriters, Static Classes: Autofix, Baseline, BundleSweep, CLI, Config, Directives, Error, Finding, Fixer, Report, Target

Constant Summary collapse

SEVERITIES =

Severity ranks, higher is worse. Meanings:

  • :error: will raise Ractor::IsolationError (or equivalent) if this code runs in a non-main Ractor
  • :warning: raises depending on the value or usage (e.g. reading class-level ivars is fine for shareable values, fatal for mutable ones)
  • :info: works on Ruby 4.0+, but with caveats worth knowing

Returns:

  • (Hash{Symbol => Integer})
{error: 3, warning: 2, info: 1}.freeze
VERSION =
"0.1.0"