1# frozen_string_literal: true 2 3module RuboCop 4 module Cop 5 module Graphql 6 class IDType < RuboCop::Cop::Cop 7 MSG = 'Do not use GraphQL::Types::ID, use a specific GlobalIDType instead' 8 9 WHITELISTED_ARGUMENTS = %i[iid full_path project_path group_path target_project_path namespace_path].freeze 10 11 def_node_search :graphql_id_type?, <<~PATTERN 12 (send nil? :argument (_ #does_not_match?) (const (const (const nil? :GraphQL) :Types) :ID) ...) 13 PATTERN 14 15 def on_send(node) 16 return unless graphql_id_type?(node) 17 18 add_offense(node) 19 end 20 21 private 22 23 def does_not_match?(arg) 24 !WHITELISTED_ARGUMENTS.include?(arg) 25 end 26 end 27 end 28 end 29end 30