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
|