Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-11-21 18:12:22 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2022-11-21 18:12:22 +0300
commit5dc70663c4ff1feb215428ce50673b5b646f9809 (patch)
tree944bde8a8350ac8ee64335cc5b98d1c60ba9c3c5 /rubocop
parentfbc1f4ffc29ae99f438b07872c3c00fbe7651caa (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'rubocop')
-rw-r--r--rubocop/cop/gitlab/strong_memoize_attr.rb39
1 files changed, 39 insertions, 0 deletions
diff --git a/rubocop/cop/gitlab/strong_memoize_attr.rb b/rubocop/cop/gitlab/strong_memoize_attr.rb
new file mode 100644
index 00000000000..2da7f71b920
--- /dev/null
+++ b/rubocop/cop/gitlab/strong_memoize_attr.rb
@@ -0,0 +1,39 @@
+# frozen_string_literal: true
+
+module RuboCop
+ module Cop
+ module Gitlab
+ # Cop that disallows functions that contain only a call to `strong_memoize()`, in favor
+ # of `strong_memoize_attr()`.
+ class StrongMemoizeAttr < RuboCop::Cop::Base
+ extend RuboCop::Cop::AutoCorrector
+
+ MSG = 'Use `strong_memoize_attr`, instead of using `strong_memoize` directly'
+
+ def_node_matcher :strong_memoize?, <<~PATTERN
+ (def $_ _
+ (block
+ $(send nil? :strong_memoize
+ (sym $_)
+ )
+ (args)
+ $_
+ )
+ )
+ PATTERN
+
+ def on_def(node)
+ method_name, send_node, attr_name, body = strong_memoize?(node)
+ return unless method_name
+
+ add_offense(send_node) do |corrector|
+ attr_suffix = ", :#{attr_name}" if attr_name != method_name
+
+ corrector.insert_after(node, "\n#{indent(node)}strong_memoize_attr :#{method_name}#{attr_suffix}")
+ corrector.replace(node.body, body.source)
+ end
+ end
+ end
+ end
+ end
+end