class Cucumber::Glue::Snippet::BaseSnippet

def self.cli_option_string(type, cucumber_expression_generator)

def self.cli_option_string(type, cucumber_expression_generator)
  format('%<type>-7s: %<description>-28s e.g. %<example>s', type: type, description: description, example: example(cucumber_expression_generator))
end

def do_block

def do_block
  do_block = String.new # rubocop:disable Style/EmptyLiteral
  do_block << "do#{parameters}\n"
  multiline_argument.append_comment_to(do_block)
  do_block << "  pending # Write code here that turns the phrase above into concrete actions\n"
  do_block << 'end'
  do_block
end

def example(cucumber_expression_generator)

def example(cucumber_expression_generator)
  new(cucumber_expression_generator, 'Given', 'I have 2 cukes', MultilineArgument::None.new).step
end

def initialize(cucumber_expression_generator, code_keyword, step_name, multiline_argument)

def initialize(cucumber_expression_generator, code_keyword, step_name, multiline_argument)
  @number_of_arguments = 0
  @code_keyword = code_keyword
  @pattern = replace_and_count_capturing_groups(step_name)
  @generated_expressions = cucumber_expression_generator.generate_expressions(step_name)
  @multiline_argument = MultilineArgumentSnippet.new(multiline_argument)
end

def parameters

def parameters
  block_args = (0...number_of_arguments).map { |n| "arg#{n + 1}" }
  multiline_argument.append_block_parameter_to(block_args)
  block_args.empty? ? '' : " |#{block_args.join(', ')}|"
end

def replace_and_count_capturing_groups(pattern)

def replace_and_count_capturing_groups(pattern)
  modified_pattern = ::Regexp.escape(pattern).gsub('\ ', ' ').gsub('/', '\/')
  ARGUMENT_PATTERNS.each do |argument_pattern|
    modified_pattern.gsub!(::Regexp.new(argument_pattern), argument_pattern)
    @number_of_arguments += modified_pattern.scan(argument_pattern).length
  end
  modified_pattern
end

def step

def step
  "#{code_keyword}#{typed_pattern}"
end

def to_s

def to_s
  "#{step} #{do_block}"
end