diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-04-28 06:09:53 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-04-28 06:09:53 +0300 |
commit | 2e4d8b3449e8c2c750a816b9566c61a0a96b934b (patch) | |
tree | 831b4d55a3b283e519a4c911e444564d4c7c3344 /rubocop | |
parent | 56df7f06f1e57d66efcff5d8ad0026252cc91192 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'rubocop')
-rw-r--r-- | rubocop/cop/api/grape_api_instance.rb | 42 | ||||
-rw-r--r-- | rubocop/cop/api/grape_array_missing_coerce.rb | 83 |
2 files changed, 0 insertions, 125 deletions
diff --git a/rubocop/cop/api/grape_api_instance.rb b/rubocop/cop/api/grape_api_instance.rb deleted file mode 100644 index de11b9ef3f6..00000000000 --- a/rubocop/cop/api/grape_api_instance.rb +++ /dev/null @@ -1,42 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module API - class GrapeAPIInstance < RuboCop::Cop::Cop - # This cop checks that APIs subclass Grape::API::Instance with Grape v1.3+. - # - # @example - # - # # bad - # module API - # class Projects < Grape::API - # end - # end - # - # # good - # module API - # class Projects < Grape::API::Instance - # end - # end - MSG = 'Inherit from Grape::API::Instance instead of Grape::API. ' \ - 'For more details check the https://gitlab.com/gitlab-org/gitlab/-/issues/215230.' - - def_node_matcher :grape_api_definition, <<~PATTERN - (class - (const _ _) - (const - (const nil? :Grape) :API) - ... - ) - PATTERN - - def on_class(node) - grape_api_definition(node) do - add_offense(node.children[1]) - end - end - end - end - end -end diff --git a/rubocop/cop/api/grape_array_missing_coerce.rb b/rubocop/cop/api/grape_array_missing_coerce.rb deleted file mode 100644 index 3d7a6a72d81..00000000000 --- a/rubocop/cop/api/grape_array_missing_coerce.rb +++ /dev/null @@ -1,83 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module API - class GrapeArrayMissingCoerce < RuboCop::Cop::Cop - # This cop checks that Grape API parameters using an Array type - # implement a coerce_with method: - # - # https://github.com/ruby-grape/grape/blob/master/UPGRADING.md#ensure-that-array-types-have-explicit-coercions - # - # @example - # - # # bad - # requires :values, type: Array[String] - # - # # good - # requires :values, type: Array[String], coerce_with: Validations::Types::CommaSeparatedToArray.coerce - # - # end - MSG = 'This Grape parameter defines an Array but is missing a coerce_with definition. ' \ - 'For more details, see https://github.com/ruby-grape/grape/blob/master/UPGRADING.md#ensure-that-array-types-have-explicit-coercions' - - def_node_matcher :grape_api_instance?, <<~PATTERN - (class - (const _ _) - (const - (const - (const nil? :Grape) :API) :Instance) - ... - ) - PATTERN - - def_node_matcher :grape_api_param_block?, <<~PATTERN - (send _ {:requires :optional} - (sym _) - $_) - PATTERN - - def_node_matcher :grape_type_def?, <<~PATTERN - (sym :type) - PATTERN - - def_node_matcher :grape_array_type?, <<~PATTERN - (send - (const nil? :Array) :[] - (const nil? _)) - PATTERN - - def_node_matcher :grape_coerce_with?, <<~PATTERN - (sym :coerce_with) - PATTERN - - def on_class(node) - @grape_api ||= grape_api_instance?(node) - end - - def on_send(node) - return unless @grape_api - - match = grape_api_param_block?(node) - - return unless match.is_a?(RuboCop::AST::HashNode) - - is_array_type = false - has_coerce_method = false - - match.each_pair do |first, second| - has_coerce_method ||= grape_coerce_with?(first) - - if grape_type_def?(first) && grape_array_type?(second) - is_array_type = true - end - end - - if is_array_type && !has_coerce_method - add_offense(node) - end - end - end - end - end -end |