Module: Evilution::MCP::MutateTool::OptionParser

Defined in:
lib/evilution/mcp/mutate_tool/option_parser.rb

Constant Summary collapse

VALID_VERBOSITIES =
%w[full summary minimal].freeze
PASSTHROUGH_KEYS =
%i[target timeout jobs fail_fast suggest_tests incremental integration
isolation baseline save_session].freeze
ALLOWED_OPT_KEYS =
(PASSTHROUGH_KEYS + %i[spec skip_config]).freeze

Class Method Summary collapse

Class Method Details

.normalize_verbosity(value) ⇒ Object



40
41
42
43
44
45
46
# File 'lib/evilution/mcp/mutate_tool/option_parser.rb', line 40

def self.normalize_verbosity(value)
  normalized = value.to_s.strip.downcase
  normalized = "summary" if normalized.empty?
  return normalized if VALID_VERBOSITIES.include?(normalized)

  raise Evilution::ParseError, "invalid verbosity: #{value.inspect} (must be full, summary, or minimal)"
end

.parse_files(raw_files) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/evilution/mcp/mutate_tool/option_parser.rb', line 11

def self.parse_files(raw_files)
  files = []
  ranges = {}

  raw_files.each do |arg|
    file, range_str = arg.split(":", 2)
    files << file
    next unless range_str

    ranges[file] = parse_line_range(range_str)
  end

  [files, ranges]
end

.parse_line_range(str) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/evilution/mcp/mutate_tool/option_parser.rb', line 26

def self.parse_line_range(str)
  if str.include?("-")
    start_str, end_str = str.split("-", 2)
    start_line = Integer(start_str)
    end_line = end_str.empty? ? Float::INFINITY : Integer(end_str)
    start_line..end_line
  else
    line = Integer(str)
    line..line
  end
rescue ArgumentError, TypeError
  raise Evilution::ParseError, "invalid line range: #{str.inspect}"
end

.validate!(opts) ⇒ Object



48
49
50
51
52
53
# File 'lib/evilution/mcp/mutate_tool/option_parser.rb', line 48

def self.validate!(opts)
  unknown = opts.keys - ALLOWED_OPT_KEYS
  return if unknown.empty?

  raise Evilution::ParseError, "unknown parameters: #{unknown.join(", ")}"
end