Class: Evilution::MCP::InfoTool::Actions::Subjects

Inherits:
Base
  • Object
show all
Defined in:
lib/evilution/mcp/info_tool/actions/subjects.rb

Class Method Summary collapse

Class Method Details

.call(files: nil, line_ranges: nil, target: nil, integration: nil, skip_config: nil) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/evilution/mcp/info_tool/actions/subjects.rb', line 10

def self.call(files: nil, line_ranges: nil, target: nil, integration: nil, skip_config: nil, **)
  return config_error("files is required") if files.nil? || files.empty?

  config = Evilution::MCP::InfoTool::ConfigFactory.subjects(
    files: files, line_ranges: line_ranges,
    target: target, integration: integration, skip_config: skip_config
  )
  runner = Evilution::Runner.new(config: config)
  subjects = runner.parse_and_filter_subjects

  registry = Evilution::Mutator::Registry.default
  filter = build_subject_filter(config)
  operator_options = { skip_heredoc_literals: config.skip_heredoc_literals? }

  entries = subjects.map do |subj|
    count = registry.mutations_for(subj, filter: filter, operator_options: operator_options).length
    { "name" => subj.name, "file" => subj.file_path, "line" => subj.line_number, "mutations" => count }
  ensure
    subj.release_node!
  end

  success(
    "subjects" => entries,
    "total_subjects" => entries.length,
    "total_mutations" => entries.sum { |e| e["mutations"] }
  )
end