Sha256: f6c60daa112291542af719e1c6caf7c30d9e1c6d1284325eaaca10180ccaf6e5

Contents?: true

Size: 1.49 KB

Versions: 11

Compression:

Stored size: 1.49 KB

Contents

# frozen_string_literal: true

require 'rubocop'
require_relative 'signature_cop'

module RuboCop
  module Cop
    module Sorbet
      # This cop checks for the ordering of keyword arguments required by
      # sorbet-runtime. The ordering requires that all keyword arguments
      # are at the end of the parameters list, and all keyword arguments
      # with a default value must be after those without default values.
      #
      # @example
      #
      #   # bad
      #   sig { params(a: Integer, b: String).void }
      #   def foo(a: 1, b:); end
      #
      #   # good
      #   sig { params(b: String, a: Integer).void }
      #   def foo(b:, a: 1); end
      class KeywordArgumentOrdering < SignatureCop
        def on_signature(node)
          method_node = node.parent.children[node.sibling_index + 1]
          return if method_node.nil?
          method_parameters = method_node.arguments

          check_order_for_kwoptargs(method_parameters)
        end

        private

        def check_order_for_kwoptargs(parameters)
          out_of_kwoptarg = false

          parameters.reverse.each do |param|
            out_of_kwoptarg = true unless param.type == :kwoptarg || param.type == :blockarg || param.type == :kwrestarg

            next unless param.type == :kwoptarg && out_of_kwoptarg

            add_offense(
              param,
              message: 'Optional keyword arguments must be at the end of the parameter list.'
            )
          end
        end
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
rubocop-sorbet-0.6.2 lib/rubocop/cop/sorbet/signatures/keyword_argument_ordering.rb
rubocop-sorbet-0.6.1 lib/rubocop/cop/sorbet/signatures/keyword_argument_ordering.rb
rubocop-sorbet-0.6.0 lib/rubocop/cop/sorbet/signatures/keyword_argument_ordering.rb
rubocop-sorbet-0.5.1 lib/rubocop/cop/sorbet/signatures/keyword_argument_ordering.rb
rubocop-sorbet-0.5.0 lib/rubocop/cop/sorbet/signatures/keyword_argument_ordering.rb
rubocop-sorbet-0.4.1 lib/rubocop/cop/sorbet/signatures/keyword_argument_ordering.rb
rubocop-sorbet-0.4.0 lib/rubocop/cop/sorbet/signatures/keyword_argument_ordering.rb
rubocop-sorbet-0.3.7 lib/rubocop/cop/sorbet/signatures/keyword_argument_ordering.rb
rubocop-sorbet-0.3.6 lib/rubocop/cop/sorbet/signatures/keyword_argument_ordering.rb
rubocop-sorbet-0.3.5 lib/rubocop/cop/sorbet/signatures/keyword_argument_ordering.rb
rubocop-sorbet-0.3.4 lib/rubocop/cop/sorbet/signatures/keyword_argument_ordering.rb