Module: Rigor::SignaturePathAudit

Defined in:
lib/rigor/signature_path_audit.rb

Overview

Classifies each configured ‘signature_paths:` entry by what it actually contributes to the RBS environment, so a caller can warn when a configured path resolves to nothing.

The failure this guards against is silent. Environment::RbsLoader ‘add`s a `signature_paths:` entry only when `path.directory?`, and only the `.rbs` files under it carry signatures — so a typo’d or moved path (or a directory holding no ‘.rbs`) loads zero signatures with no trace on stderr or in the run summary. The downstream symptom is the most authoritative diagnostics: every call into the extensions the missing RBS was meant to describe fires `call.undefined-method` at `evidence_tier: high`. A one-character path typo can manufacture hundreds of plausible-looking false positives; surfacing the empty entry makes the real cause visible.

The audit deliberately mirrors the loader’s own acceptance test (‘path.directory?` + a recursive `*/.rbs` glob) so a `:ok` verdict means the loader did load from it and a warning means it did not.

Defined Under Namespace

Classes: Entry

Class Method Summary collapse

Class Method Details

.audit(signature_paths) ⇒ Array<Entry>

Audits each configured entry. ‘signature_paths` is the Configuration#signature_paths array (absolute paths, already resolved against the config file’s directory). Pass ‘nil` — the unset default, where Rigor auto-detects `<root>/sig` — to get an empty result: an absent auto-detected `sig/` is a normal setup, not a misconfiguration, so it is never audited.

Parameters:

  • signature_paths (Array<String, Pathname>, nil)

Returns:



71
72
73
# File 'lib/rigor/signature_path_audit.rb', line 71

def self.audit(signature_paths)
  Array(signature_paths).map { |path| classify(path.to_s) }
end

.classify(path) ⇒ Object



84
85
86
87
88
89
90
# File 'lib/rigor/signature_path_audit.rb', line 84

def self.classify(path)
  return Entry.new(path: path, status: :missing, rbs_file_count: 0) unless File.exist?(path)
  return Entry.new(path: path, status: :not_directory, rbs_file_count: 0) unless File.directory?(path)

  count = Dir.glob(File.join(path, "**", "*.rbs")).size
  Entry.new(path: path, status: count.zero? ? :empty : :ok, rbs_file_count: count)
end

.warnings(signature_paths) ⇒ Array<Entry>

The subset of audit that resolved to nothing — the entries worth warning about.

Parameters:

  • signature_paths (Array<String, Pathname>, nil)

Returns:



80
81
82
# File 'lib/rigor/signature_path_audit.rb', line 80

def self.warnings(signature_paths)
  audit(signature_paths).select(&:warning?)
end