class RuboCop::Cop::Sorbet::CapitalizedTypeParameters

def foo(a: 1); end
sig { type_parameters(:X).params(a: T.type_parameter(:X)).void }
# good
def foo(a); end
sig { type_parameters(:x).params(a: T.type_parameter(:x)).void }
# bad
@example
Ensure type parameters used in generic methods are always capitalized.

def check_type_parameters_case(node)

def check_type_parameters_case(node)
  node.children[2..].each do |arg|
    next unless arg.is_a?(RuboCop::AST::SymbolNode)
    next if arg.value =~ /^[A-Z]/
    add_offense(arg) do |corrector|
      corrector.replace(arg, arg.value.capitalize.to_sym.inspect)
    end
  end
end

def on_csend(node)

def on_csend(node)
  check_type_parameters_case(node) if t_type_parameter?(node)
end

def on_send(node)

def on_send(node)
  check_type_parameters_case(node) if t_type_parameter?(node)
end

def on_signature(node)

def on_signature(node)
  send = node.children[2]
  while send&.send_type?
    if type_parameters?(send)
      check_type_parameters_case(send)
    end
    send = send.children[0]
  end
end