Class: Evilution::Config
- Inherits:
-
Object
- Object
- Evilution::Config
- Defined in:
- lib/evilution/config.rb
Defined Under Namespace
Modules: Builders, EnvLoader, FileLoader, Sources, Validators
Constant Summary collapse
- CONFIG_FILES =
%w[.evilution.yml config/evilution.yml].freeze
- CURRENT_SCHEMA_VERSION =
1- DEFAULTS =
{ schema_version: CURRENT_SCHEMA_VERSION, timeout: 30, format: :text, target: nil, min_score: 0.0, integration: :rspec, verbose: false, quiet: false, jobs: 1, fail_fast: nil, baseline: true, isolation: :auto, incremental: false, suggest_tests: false, progress: true, save_session: false, line_ranges: {}, spec_files: [], ignore_patterns: [], show_disabled: false, baseline_session: nil, skip_heredoc_literals: false, related_specs_heuristic: false, fallback_to_full_suite: false, preload: nil, spec_mappings: {}, spec_pattern: nil, example_targeting: true, example_targeting_fallback: :full_file, example_targeting_strategy: :lexical, example_targeting_cache: { max_files: 50, max_blocks: 10_000 }, quiet_children: false, quiet_children_dir: "tmp/evilution_children", profile: :default, canary: true }.freeze
Instance Attribute Summary collapse
-
#baseline ⇒ Object
readonly
Returns the value of attribute baseline.
-
#baseline_session ⇒ Object
readonly
Returns the value of attribute baseline_session.
-
#canary ⇒ Object
readonly
Returns the value of attribute canary.
-
#example_targeting ⇒ Object
readonly
Returns the value of attribute example_targeting.
-
#example_targeting_cache ⇒ Object
readonly
Returns the value of attribute example_targeting_cache.
-
#example_targeting_fallback ⇒ Object
readonly
Returns the value of attribute example_targeting_fallback.
-
#example_targeting_strategy ⇒ Object
readonly
Returns the value of attribute example_targeting_strategy.
-
#fail_fast ⇒ Object
readonly
Returns the value of attribute fail_fast.
-
#fallback_to_full_suite ⇒ Object
readonly
Returns the value of attribute fallback_to_full_suite.
-
#format ⇒ Object
readonly
Returns the value of attribute format.
-
#hooks ⇒ Object
readonly
Returns the value of attribute hooks.
-
#ignore_patterns ⇒ Object
readonly
Returns the value of attribute ignore_patterns.
-
#incremental ⇒ Object
readonly
Returns the value of attribute incremental.
-
#integration ⇒ Object
readonly
Returns the value of attribute integration.
-
#isolation ⇒ Object
readonly
Returns the value of attribute isolation.
-
#jobs ⇒ Object
readonly
Returns the value of attribute jobs.
-
#line_ranges ⇒ Object
readonly
Returns the value of attribute line_ranges.
-
#min_score ⇒ Object
readonly
Returns the value of attribute min_score.
-
#preload ⇒ Object
readonly
Returns the value of attribute preload.
-
#profile ⇒ Object
readonly
Returns the value of attribute profile.
-
#progress ⇒ Object
readonly
Returns the value of attribute progress.
-
#quiet ⇒ Object
readonly
Returns the value of attribute quiet.
-
#quiet_children ⇒ Object
readonly
Returns the value of attribute quiet_children.
-
#quiet_children_dir ⇒ Object
readonly
Returns the value of attribute quiet_children_dir.
-
#related_specs_heuristic ⇒ Object
readonly
Returns the value of attribute related_specs_heuristic.
-
#save_session ⇒ Object
readonly
Returns the value of attribute save_session.
-
#schema_version ⇒ Object
readonly
Returns the value of attribute schema_version.
-
#show_disabled ⇒ Object
readonly
Returns the value of attribute show_disabled.
-
#skip_heredoc_literals ⇒ Object
readonly
Returns the value of attribute skip_heredoc_literals.
-
#spec_files ⇒ Object
readonly
Returns the value of attribute spec_files.
-
#spec_mappings ⇒ Object
readonly
Returns the value of attribute spec_mappings.
-
#spec_pattern ⇒ Object
readonly
Returns the value of attribute spec_pattern.
-
#spec_selector ⇒ Object
readonly
Returns the value of attribute spec_selector.
-
#suggest_tests ⇒ Object
readonly
Returns the value of attribute suggest_tests.
-
#target ⇒ Object
readonly
Returns the value of attribute target.
-
#target_files ⇒ Object
readonly
Returns the value of attribute target_files.
-
#timeout ⇒ Object
readonly
Returns the value of attribute timeout.
-
#verbose ⇒ Object
readonly
Returns the value of attribute verbose.
Class Method Summary collapse
-
.default_template ⇒ Object
Generates a default config file template.
- .file_options ⇒ Object
Instance Method Summary collapse
- #baseline? ⇒ Boolean
- #canary? ⇒ Boolean
- #coverage_targeting? ⇒ Boolean
- #example_targeting? ⇒ Boolean
- #fail_fast? ⇒ Boolean
- #fallback_to_full_suite? ⇒ Boolean
- #html? ⇒ Boolean
- #incremental? ⇒ Boolean
-
#initialize(**options) ⇒ Config
constructor
A new instance of Config.
- #json? ⇒ Boolean
- #line_ranges? ⇒ Boolean
- #progress? ⇒ Boolean
- #related_specs_heuristic? ⇒ Boolean
- #save_session? ⇒ Boolean
- #show_disabled? ⇒ Boolean
- #skip_heredoc_literals? ⇒ Boolean
- #suggest_tests? ⇒ Boolean
- #target? ⇒ Boolean
- #text? ⇒ Boolean
Constructor Details
Instance Attribute Details
#baseline ⇒ Object (readonly)
Returns the value of attribute baseline.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def baseline @baseline end |
#baseline_session ⇒ Object (readonly)
Returns the value of attribute baseline_session.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def baseline_session @baseline_session end |
#canary ⇒ Object (readonly)
Returns the value of attribute canary.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def canary @canary end |
#example_targeting ⇒ Object (readonly)
Returns the value of attribute example_targeting.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def example_targeting @example_targeting end |
#example_targeting_cache ⇒ Object (readonly)
Returns the value of attribute example_targeting_cache.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def example_targeting_cache @example_targeting_cache end |
#example_targeting_fallback ⇒ Object (readonly)
Returns the value of attribute example_targeting_fallback.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def example_targeting_fallback @example_targeting_fallback end |
#example_targeting_strategy ⇒ Object (readonly)
Returns the value of attribute example_targeting_strategy.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def example_targeting_strategy @example_targeting_strategy end |
#fail_fast ⇒ Object (readonly)
Returns the value of attribute fail_fast.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def fail_fast @fail_fast end |
#fallback_to_full_suite ⇒ Object (readonly)
Returns the value of attribute fallback_to_full_suite.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def fallback_to_full_suite @fallback_to_full_suite end |
#format ⇒ Object (readonly)
Returns the value of attribute format.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def format @format end |
#hooks ⇒ Object (readonly)
Returns the value of attribute hooks.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def hooks @hooks end |
#ignore_patterns ⇒ Object (readonly)
Returns the value of attribute ignore_patterns.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def ignore_patterns @ignore_patterns end |
#incremental ⇒ Object (readonly)
Returns the value of attribute incremental.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def incremental @incremental end |
#integration ⇒ Object (readonly)
Returns the value of attribute integration.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def integration @integration end |
#isolation ⇒ Object (readonly)
Returns the value of attribute isolation.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def isolation @isolation end |
#jobs ⇒ Object (readonly)
Returns the value of attribute jobs.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def jobs @jobs end |
#line_ranges ⇒ Object (readonly)
Returns the value of attribute line_ranges.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def line_ranges @line_ranges end |
#min_score ⇒ Object (readonly)
Returns the value of attribute min_score.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def min_score @min_score end |
#preload ⇒ Object (readonly)
Returns the value of attribute preload.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def preload @preload end |
#profile ⇒ Object (readonly)
Returns the value of attribute profile.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def profile @profile end |
#progress ⇒ Object (readonly)
Returns the value of attribute progress.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def progress @progress end |
#quiet ⇒ Object (readonly)
Returns the value of attribute quiet.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def quiet @quiet end |
#quiet_children ⇒ Object (readonly)
Returns the value of attribute quiet_children.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def quiet_children @quiet_children end |
#quiet_children_dir ⇒ Object (readonly)
Returns the value of attribute quiet_children_dir.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def quiet_children_dir @quiet_children_dir end |
#related_specs_heuristic ⇒ Object (readonly)
Returns the value of attribute related_specs_heuristic.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def @related_specs_heuristic end |
#save_session ⇒ Object (readonly)
Returns the value of attribute save_session.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def save_session @save_session end |
#schema_version ⇒ Object (readonly)
Returns the value of attribute schema_version.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def schema_version @schema_version end |
#show_disabled ⇒ Object (readonly)
Returns the value of attribute show_disabled.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def show_disabled @show_disabled end |
#skip_heredoc_literals ⇒ Object (readonly)
Returns the value of attribute skip_heredoc_literals.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def skip_heredoc_literals @skip_heredoc_literals end |
#spec_files ⇒ Object (readonly)
Returns the value of attribute spec_files.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def spec_files @spec_files end |
#spec_mappings ⇒ Object (readonly)
Returns the value of attribute spec_mappings.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def spec_mappings @spec_mappings end |
#spec_pattern ⇒ Object (readonly)
Returns the value of attribute spec_pattern.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def spec_pattern @spec_pattern end |
#spec_selector ⇒ Object (readonly)
Returns the value of attribute spec_selector.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def spec_selector @spec_selector end |
#suggest_tests ⇒ Object (readonly)
Returns the value of attribute suggest_tests.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def suggest_tests @suggest_tests end |
#target ⇒ Object (readonly)
Returns the value of attribute target.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def target @target end |
#target_files ⇒ Object (readonly)
Returns the value of attribute target_files.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def target_files @target_files end |
#timeout ⇒ Object (readonly)
Returns the value of attribute timeout.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def timeout @timeout end |
#verbose ⇒ Object (readonly)
Returns the value of attribute verbose.
26 27 28 |
# File 'lib/evilution/config.rb', line 26 def verbose @verbose end |
Class Method Details
.default_template ⇒ Object
Generates a default config file template.
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 |
# File 'lib/evilution/config.rb', line 121 def self.default_template <<~YAML # Evilution configuration # See: https://github.com/marinazzio/evilution # Schema version for this config file (current: #{CURRENT_SCHEMA_VERSION}). # Declaring schema_version opts the file into strict validation: # unknown keys raise ConfigError, and a future schema_version is # rejected so an old gem cannot silently misread a newer config. # Omit to keep the legacy lenient behavior (unknown keys ignored). schema_version: #{CURRENT_SCHEMA_VERSION} # Per-mutation timeout in seconds (default: 30) # timeout: 30 # Output format: text or json (default: text) # format: text # Minimum mutation score to pass (0.0 to 1.0, default: 0.0) # min_score: 0.0 # Proof-of-life canary: run a synthetic, guaranteed-unobservable # mutation at session start and abort if the pipeline misreports it # (default: true). Set false to skip (e.g. for CI speed). # canary: true # Test integration: rspec, minitest, test_unit (default: rspec) # integration: rspec # Number of parallel workers (default: 1) # jobs: 1 # Stop after N surviving mutants (default: disabled) # fail_fast: 1 # Generate concrete test code in suggestions, matching integration (default: false) # suggest_tests: false # Skip all string literal mutations inside heredocs (default: false). # Useful for Rails apps where heredoc content (SQL, templates, fixtures) # rarely has meaningful test coverage and produces noisy survivors. # skip_heredoc_literals: true # Opt into the RelatedSpecHeuristic, which appends request/integration/ # feature/system specs for mutations that touch `.includes(...)` calls # (default: false). Off by default because the fan-out can be heavy and # push runs over the per-mutation timeout. Enable if you need coverage # of N+1 regressions that only surface in higher-level specs. # related_specs_heuristic: true # When no matching spec resolves for a mutation's source file, the # default is to skip that mutation and mark it :unresolved in the # report (a coverage gap signal). Set to true to fall back to running # the entire test suite for such mutations instead (slow, high memory). # fallback_to_full_suite: false # Preload file required in the parent process before forking workers. # For Rails projects, the autodetect chain tries (in order): # spec/rails_helper.rb -> spec/spec_helper.rb -> test/test_helper.rb # when isolation resolves to :fork. Set to false to disable. # preload: spec/rails_helper.rb # or spec/spec_helper.rb, test/test_helper.rb # Hooks: Ruby files returning a Proc, keyed by lifecycle event # hooks: # worker_process_start: config/evilution_hooks/worker_start.rb # mutation_insert_pre: config/evilution_hooks/mutation_pre.rb # Per-mutation example targeting (default: true). When enabled, Evilution # parses resolved spec files and restricts each mutation run to examples # whose bodies reference the mutated method/class token. Set to false # to run every example in the resolved spec files. You can also disable # without editing the file by exporting EV_DISABLE_EXAMPLE_TARGETING=1. # example_targeting: true # How targeting picks examples (default: lexical). # lexical - text-grep resolved spec files for the mutated method/class name # coverage - run exactly the examples that EXECUTE the mutated line, from a # cached full-suite line-coverage map (falls back to lexical for # any file the map has not fully built) # example_targeting_strategy: lexical # Behavior when targeting finds no matching example (default: full_file). # full_file - run every example in the resolved spec files # unresolved - mark the mutation :unresolved and skip # example_targeting_fallback: full_file # LRU cache bounds for the spec AST parser that powers example targeting. # example_targeting_cache: # max_files: 50 # max_blocks: 10000 # AST patterns to skip during mutation generation (default: []) # See docs/ast_pattern_syntax.md for pattern syntax # ignore_patterns: # - "call{name=info, receiver=call{name=logger}}" # - "call{name=debug|warn}" # Operator profile: default or strict (default: default). # strict adds aggressive truthiness mutators (e.g. replaces # `x.predicate?` with `nil`) intended for pre-merge audits. # profile: default YAML end |
.file_options ⇒ Object
116 117 118 |
# File 'lib/evilution/config.rb', line 116 def self. FileLoader.load end |
Instance Method Details
#baseline? ⇒ Boolean
68 69 70 |
# File 'lib/evilution/config.rb', line 68 def baseline? baseline end |
#canary? ⇒ Boolean
72 73 74 |
# File 'lib/evilution/config.rb', line 72 def canary? canary end |
#coverage_targeting? ⇒ Boolean
108 109 110 |
# File 'lib/evilution/config.rb', line 108 def coverage_targeting? example_targeting && example_targeting_strategy == :coverage end |
#example_targeting? ⇒ Boolean
104 105 106 |
# File 'lib/evilution/config.rb', line 104 def example_targeting? example_targeting end |
#fail_fast? ⇒ Boolean
64 65 66 |
# File 'lib/evilution/config.rb', line 64 def fail_fast? !fail_fast.nil? end |
#fallback_to_full_suite? ⇒ Boolean
112 113 114 |
# File 'lib/evilution/config.rb', line 112 def fallback_to_full_suite? fallback_to_full_suite end |
#html? ⇒ Boolean
52 53 54 |
# File 'lib/evilution/config.rb', line 52 def html? format == :html end |
#incremental? ⇒ Boolean
76 77 78 |
# File 'lib/evilution/config.rb', line 76 def incremental? incremental end |
#json? ⇒ Boolean
44 45 46 |
# File 'lib/evilution/config.rb', line 44 def json? format == :json end |
#line_ranges? ⇒ Boolean
56 57 58 |
# File 'lib/evilution/config.rb', line 56 def line_ranges? !line_ranges.empty? end |
#progress? ⇒ Boolean
84 85 86 |
# File 'lib/evilution/config.rb', line 84 def progress? progress end |
#related_specs_heuristic? ⇒ Boolean
100 101 102 |
# File 'lib/evilution/config.rb', line 100 def end |
#save_session? ⇒ Boolean
88 89 90 |
# File 'lib/evilution/config.rb', line 88 def save_session? save_session end |
#show_disabled? ⇒ Boolean
92 93 94 |
# File 'lib/evilution/config.rb', line 92 def show_disabled? show_disabled end |
#skip_heredoc_literals? ⇒ Boolean
96 97 98 |
# File 'lib/evilution/config.rb', line 96 def skip_heredoc_literals? skip_heredoc_literals end |
#suggest_tests? ⇒ Boolean
80 81 82 |
# File 'lib/evilution/config.rb', line 80 def suggest_tests? suggest_tests end |
#target? ⇒ Boolean
60 61 62 |
# File 'lib/evilution/config.rb', line 60 def target? !target.nil? end |
#text? ⇒ Boolean
48 49 50 |
# File 'lib/evilution/config.rb', line 48 def text? format == :text end |