class RuboCop::Cop::Sorbet::ParametersOrderingInSignature
This cop checks for inconsistent ordering of parameters between the signature and the method definition. The sorbet-runtime gem raises when such inconsistency occurs.
@example
# bad sig { params(a: Integer, b: String).void } def foo(b:, a:); end # good sig { params(a: Integer, b: String).void } def foo(a:, b:); end
Public Instance Methods
on_signature(node)
click to toggle source
# File lib/rubocop/cop/sorbet/signatures/parameters_ordering_in_signature.rb, line 27 def on_signature(node) sig_params = signature_params(node).first sig_params_order = extract_parameters(sig_params) return if sig_params_order.nil? 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
Private Instance Methods
check_for_inconsistent_param_ordering(sig_params_order, parameters)
click to toggle source
# File lib/rubocop/cop/sorbet/signatures/parameters_ordering_in_signature.rb, line 53 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
extract_parameters(sig_params)
click to toggle source
# File lib/rubocop/cop/sorbet/signatures/parameters_ordering_in_signature.rb, line 41 def extract_parameters(sig_params) return [] if sig_params.nil? arguments = sig_params.arguments.first return arguments.keys.map(&:value) if RuboCop::AST::HashNode === arguments add_offense( sig_params, message: "Invalid signature." ) end