summaryrefslogtreecommitdiff
path: root/rubocop/cop/graphql/resource_not_available_error.rb
diff options
context:
space:
mode:
Diffstat (limited to 'rubocop/cop/graphql/resource_not_available_error.rb')
-rw-r--r--rubocop/cop/graphql/resource_not_available_error.rb47
1 files changed, 47 insertions, 0 deletions
diff --git a/rubocop/cop/graphql/resource_not_available_error.rb b/rubocop/cop/graphql/resource_not_available_error.rb
new file mode 100644
index 00000000000..d759e145008
--- /dev/null
+++ b/rubocop/cop/graphql/resource_not_available_error.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+require_relative '../../node_pattern_helper'
+
+module RuboCop
+ module Cop
+ module Graphql
+ # Encourages the use of `raise_resource_not_available_error!` method
+ # instead of `raise Gitlab::Graphql::Errors::ResourceNotAvailable`.
+ #
+ # @example
+ #
+ # # bad
+ # raise Gitlab::Graphql::Errors::ResourceNotAvailable, 'message'
+ #
+ # # good
+ # raise_resource_not_available_error! 'message'
+ class ResourceNotAvailableError < Base
+ extend NodePatternHelper
+ extend AutoCorrector
+
+ MSG = 'Prefer using `raise_resource_not_available_error!` instead.'
+
+ EXCEPTION = 'Gitlab::Graphql::Errors::ResourceNotAvailable'
+
+ RESTRICT_ON_SEND = %i[raise].freeze
+
+ def_node_matcher :error, const_pattern(EXCEPTION)
+
+ def_node_matcher :raise_error, <<~PATTERN
+ (send nil? :raise #error $...)
+ PATTERN
+
+ def on_send(node)
+ raise_error(node) do |args|
+ add_offense(node) do |corrector|
+ replacement = +'raise_resource_not_available_error!'
+ replacement << " #{args.map(&:source).join(', ')}" if args.any?
+
+ corrector.replace(node, replacement)
+ end
+ end
+ end
+ end
+ end
+ end
+end