diff options
Diffstat (limited to 'rubocop/cop/gitlab/mark_used_feature_flags.rb')
-rw-r--r-- | rubocop/cop/gitlab/mark_used_feature_flags.rb | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/rubocop/cop/gitlab/mark_used_feature_flags.rb b/rubocop/cop/gitlab/mark_used_feature_flags.rb index a0de43abe85..03ee4805f4e 100644 --- a/rubocop/cop/gitlab/mark_used_feature_flags.rb +++ b/rubocop/cop/gitlab/mark_used_feature_flags.rb @@ -47,10 +47,21 @@ module RuboCop :usage_data_static_site_editor_merge_requests # https://gitlab.com/gitlab-org/gitlab/-/issues/284083 ].freeze + class << self + # We track feature flags in `on_new_investigation` only once per + # rubocop whole run instead once per file. + attr_accessor :feature_flags_already_tracked + end + # Called before all on_... have been called # When refining this method, always call `super` def on_new_investigation super + + return if self.class.feature_flags_already_tracked + + self.class.feature_flags_already_tracked = true + track_dynamic_feature_flags! track_usage_data_counters_known_events! end @@ -69,7 +80,7 @@ module RuboCop flag_value = flag_value(node) return unless flag_value - if flag_arg_is_str_or_sym?(node) + if flag_arg_is_str_or_sym?(flag_arg) if caller_is_feature_gitaly?(node) save_used_feature_flag("gitaly_#{flag_value}") else @@ -84,9 +95,9 @@ module RuboCop save_used_feature_flag(matching_feature_flag) end end - elsif flag_arg_is_send_type?(node) + elsif flag_arg_is_send_type?(flag_arg) puts_if_ci(node, "Feature flag is dynamic: '#{flag_value}.") - elsif flag_arg_is_dstr_or_dsym?(node) + elsif flag_arg_is_dstr_or_dsym?(flag_arg) str_prefix = flag_arg.children[0] rest_children = flag_arg.children[1..] @@ -159,18 +170,16 @@ module RuboCop end.to_s.tr("\n/", ' _') end - def flag_arg_is_str_or_sym?(node) - flag_arg = flag_arg(node) + def flag_arg_is_str_or_sym?(flag_arg) flag_arg.str_type? || flag_arg.sym_type? end - def flag_arg_is_send_type?(node) - flag_arg(node).send_type? + def flag_arg_is_send_type?(flag_arg) + flag_arg.send_type? end - def flag_arg_is_dstr_or_dsym?(node) - flag = flag_arg(node) - (flag.dstr_type? || flag.dsym_type?) && flag.children[0].str_type? + def flag_arg_is_dstr_or_dsym?(flag_arg) + (flag_arg.dstr_type? || flag_arg.dsym_type?) && flag_arg.children[0].str_type? end def caller_is_feature?(node) |