diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-03-09 15:07:45 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-03-09 15:07:45 +0000 |
commit | f1a40d0db939dfe8ff95d385e652ff72566be765 (patch) | |
tree | cdca36cb171cdffff2739c37c23e74914e57a836 /rubocop | |
parent | ac1dca43baa7b3b1ac7d60d89ad60fdeefed0b80 (diff) | |
download | gitlab-ce-f1a40d0db939dfe8ff95d385e652ff72566be765.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'rubocop')
-rw-r--r-- | rubocop/cop/ban_catch_throw.rb | 34 | ||||
-rw-r--r-- | rubocop/cop/gitlab/keys-first-and-values-first.rb | 2 |
2 files changed, 35 insertions, 1 deletions
diff --git a/rubocop/cop/ban_catch_throw.rb b/rubocop/cop/ban_catch_throw.rb new file mode 100644 index 00000000000..42301d5512f --- /dev/null +++ b/rubocop/cop/ban_catch_throw.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +module RuboCop + module Cop + # Bans the use of 'catch/throw', as exceptions are better for errors and + # they are equivalent to 'goto' for flow control, with all the problems + # that implies. + # + # @example + # # bad + # catch(:error) do + # throw(:error) + # end + # + # # good + # begin + # raise StandardError + # rescue StandardError => err + # # ... + # end + # + class BanCatchThrow < RuboCop::Cop::Cop + MSG = "Do not use catch or throw unless a gem's API demands it." + + def on_send(node) + receiver, method_name, _ = *node + + return unless receiver.nil? && %i[catch throw].include?(method_name) + + add_offense(node, location: :expression) + end + end + end +end diff --git a/rubocop/cop/gitlab/keys-first-and-values-first.rb b/rubocop/cop/gitlab/keys-first-and-values-first.rb index 9b68957cba2..544f9800304 100644 --- a/rubocop/cop/gitlab/keys-first-and-values-first.rb +++ b/rubocop/cop/gitlab/keys-first-and-values-first.rb @@ -26,7 +26,7 @@ module RuboCop elsif node.descendants.first.method_name == :keys '.each_key' else - throw("Expect '.values.first' or '.keys.first', but get #{node.descendants.first.method_name}.first") + throw("Expect '.values.first' or '.keys.first', but get #{node.descendants.first.method_name}.first") # rubocop:disable Cop/BanCatchThrow end upto_including_keys_or_values = node.descendants.first.source_range |