module Sorbet::Eraser::Patterns

Public Instance Methods

on_command(ident, args_add_block) click to toggle source
Calls superclass method
# File lib/sorbet/eraser/patterns.rb, line 122
def on_command(ident, args_add_block)
  # extend T::Sig
  if ident.match?("<@ident extend>") &&
    args_add_block.match?("<args_add_block <args <const_path_ref <var_ref <@const T>> <@const Sig>>> false>")
    patterns << ExtendTSigPattern.new(ident.range.begin..args_add_block.range.end)
  end

  super
end
on_command_call(var_ref, period, ident, args_add_block) click to toggle source
Calls superclass method
# File lib/sorbet/eraser/patterns.rb, line 141
def on_command_call(var_ref, period, ident, args_add_block)
  if var_ref.match?("<var_ref <@const T>>") && period.match?("<@period .>")
    # T.must foo
    if ident.match?("<@ident must>") &&
      args_add_block.match?(/<args_add_block <args <.+>> false>/) &&
      args_add_block.body[0].body.length == 1
      patterns << TMustNoParensPattern.new(var_ref.range.begin..args_add_block.range.end)
    end
  end

  super
end
on_method_add_arg(call, arg_paren) click to toggle source
Calls superclass method
# File lib/sorbet/eraser/patterns.rb, line 62
def on_method_add_arg(call, arg_paren)
  # T.absurd(foo)
  if call.match?(/<call <var_ref <@const T>> <@period \.> <@ident absurd>>/) &&
    arg_paren.match?(/<arg_paren <args_add_block <args .+> false>>/)
    patterns << TAbsurdParensPattern.new(call.range.begin..arg_paren.range.end)
  end

  # T.must(foo)
  # T.reveal_type(foo)
  if call.match?(/<call <var_ref <@const T>> <@period \.> <@ident (?:must|reveal_type)>>/) &&
    arg_paren.match?(/<arg_paren <args_add_block <args .+> false>>/)
    patterns << TOneArgMethodCallParensPattern.new(call.range.begin..arg_paren.range.end)
  end

  # T.assert_type!(foo, bar)
  # T.cast(foo, bar)
  # T.let(foo, bar)
  if call.match?(/<call <var_ref <@const T>> <@period \.> <@ident (?:assert_type!|cast|let)>>/) &&
    arg_paren.match?(/<arg_paren <args_add_block <args .+> false>>/)
    patterns << TTwoArgMethodCallParensPattern.new(call.range.begin..arg_paren.range.end)
  end

  # T.bind(self, foo)
  if call.match?(/<call <var_ref <@const T>> <@period \.> <@ident bind>>/) &&
    arg_paren.match?(/<arg_paren <args_add_block <args <var_ref <@kw self>> .+> false>>/)
    patterns << TTwoArgMethodCallParensPattern.new(call.range.begin..arg_paren.range.end)
  end

  super
end
on_method_add_block(method_add_arg, block) click to toggle source
Calls superclass method
# File lib/sorbet/eraser/patterns.rb, line 103
def on_method_add_block(method_add_arg, block)
  # T.type_alias { foo }
  if method_add_arg.match?("<call <var_ref <@const T>> <@period .> <@ident type_alias>>") &&
    block.match?(/<brace_block  <stmts .+>>/)
    patterns << TTypeAliasBraceBlockPattern.new(method_add_arg.range.begin..block.range.end)
  end

  super
end
on_stmts_add(node, value) click to toggle source
Calls superclass method
# File lib/sorbet/eraser/patterns.rb, line 163
def on_stmts_add(node, value)
  # sig { foo }
  if value.match?(/<method_add_block <method_add_arg <fcall <@ident sig>> <args >> <brace_block  <stmts .+>>>/)
    patterns << SigBracesPattern.new(value.range)
  end

  super
end