class RuboCop::Cop::Sorbet::ParametersOrderingInSignature
def foo(a:, b:); end
sig { params(a: Integer, b: String).void }
# good
def foo(b:, a:); end
sig { params(a: Integer, b: String).void }
# bad
@example
when such inconsistency occurs.
signature and the method definition. The sorbet-runtime gem raises
This cop checks for inconsistent ordering of parameters between the
def check_for_inconsistent_param_ordering(sig_params_order, parameters)
def check_for_inconsistent_param_ordering(sig_params_order, parameters) parameters.each_with_index do |param, index| param_name = param.children[0] sig_param_name = sig_params_order[index] next if param_name == sig_param_name add_offense( param, message: "Inconsistent ordering of arguments at index #{index}. " \ "Expected `#{sig_param_name}` from sig above." ) end end
def on_signature(node)
def on_signature(node) sig_params = signature_params(node).first sig_params_order = if sig_params.nil? [] else sig_params.arguments.first.keys.map(&:value) end method_node = node.parent.children[node.sibling_index + 1] return if method_node.nil? || method_node.type != :def method_parameters = method_node.arguments check_for_inconsistent_param_ordering(sig_params_order, method_parameters) end