diff --git a/.rubocop_todo/gitlab/strong_memoize_attr.yml b/.rubocop_todo/gitlab/strong_memoize_attr.yml index 95382f51961193b601d1dcfe510028050974c99a..b30a18be6baaf1946bb54f3445ed5d1867350b59 100644 --- a/.rubocop_todo/gitlab/strong_memoize_attr.yml +++ b/.rubocop_todo/gitlab/strong_memoize_attr.yml @@ -1,6 +1,7 @@ --- # Cop supports --autocorrect. Gitlab/StrongMemoizeAttr: + Details: grace period Exclude: - 'app/components/pajamas/avatar_component.rb' - 'app/controllers/application_controller.rb' @@ -27,7 +28,6 @@ Gitlab/StrongMemoizeAttr: - 'app/controllers/projects/incidents_controller.rb' - 'app/controllers/projects/merge_requests/drafts_controller.rb' - 'app/controllers/projects/merge_requests_controller.rb' - - 'app/controllers/projects/metrics_dashboard_controller.rb' - 'app/controllers/projects/milestones_controller.rb' - 'app/controllers/projects/pipelines/application_controller.rb' - 'app/controllers/projects/pipelines_controller.rb' @@ -52,7 +52,6 @@ Gitlab/StrongMemoizeAttr: - 'app/finders/merge_requests_finder/params.rb' - 'app/finders/projects/members/effective_access_level_finder.rb' - 'app/finders/releases/evidence_pipeline_finder.rb' - - 'app/finders/releases_finder.rb' - 'app/finders/snippets_finder.rb' - 'app/finders/todos_finder.rb' - 'app/graphql/resolvers/issue_status_counts_resolver.rb' @@ -125,7 +124,6 @@ Gitlab/StrongMemoizeAttr: - 'app/models/namespaces/traversal/linear.rb' - 'app/models/namespaces/traversal/recursive.rb' - 'app/models/note.rb' - - 'app/models/pages/lookup_path.rb' - 'app/models/project.rb' - 'app/models/release.rb' - 'app/models/resource_event.rb' @@ -134,7 +132,6 @@ Gitlab/StrongMemoizeAttr: - 'app/models/snippet_input_action_collection.rb' - 'app/models/state_note.rb' - 'app/models/tree.rb' - - 'app/models/uploads/fog.rb' - 'app/models/user.rb' - 'app/models/wiki_page.rb' - 'app/models/work_item.rb' @@ -249,7 +246,6 @@ Gitlab/StrongMemoizeAttr: - 'app/workers/merge_request_cleanup_refs_worker.rb' - 'app/workers/packages/cleanup/execute_policy_worker.rb' - 'app/workers/packages/debian/generate_distribution_worker.rb' - - 'app/workers/packages/debian/process_changes_worker.rb' - 'app/workers/packages/maven/metadata/sync_worker.rb' - 'app/workers/projects/inactive_projects_deletion_cron_worker.rb' - 'ee/app/controllers/admin/audit_logs_controller.rb' @@ -283,10 +279,10 @@ Gitlab/StrongMemoizeAttr: - 'ee/app/helpers/ee/preferences_helper.rb' - 'ee/app/helpers/ee/registrations_helper.rb' - 'ee/app/helpers/ee/timeboxes_helper.rb' - - 'ee/app/helpers/trials_helper.rb' - - 'ee/app/helpers/welcome_helper.rb' - 'ee/app/helpers/license_monitoring_helper.rb' - 'ee/app/helpers/subscriptions_helper.rb' + - 'ee/app/helpers/trials_helper.rb' + - 'ee/app/helpers/welcome_helper.rb' - 'ee/app/models/approval_merge_request_rule.rb' - 'ee/app/models/approval_state.rb' - 'ee/app/models/approval_wrapped_any_approver_rule.rb' @@ -316,7 +312,6 @@ Gitlab/StrongMemoizeAttr: - 'ee/app/models/ee/namespace.rb' - 'ee/app/models/ee/project.rb' - 'ee/app/models/ee/snippet.rb' - - 'ee/app/models/ee/user.rb' - 'ee/app/models/ee/work_item.rb' - 'ee/app/models/gitlab/seat_link_data.rb' - 'ee/app/models/gitlab_subscription.rb' @@ -328,6 +323,7 @@ Gitlab/StrongMemoizeAttr: - 'ee/app/models/vulnerabilities/finding.rb' - 'ee/app/presenters/approval_rule_presenter.rb' - 'ee/app/presenters/ci/minutes/usage_presenter.rb' + - 'ee/app/presenters/merge_request_approver_presenter.rb' - 'ee/app/serializers/dashboard_operations_project_entity.rb' - 'ee/app/serializers/ee/member_user_entity.rb' - 'ee/app/services/app_sec/dast/pipelines/find_latest_service.rb' @@ -337,7 +333,6 @@ Gitlab/StrongMemoizeAttr: - 'ee/app/services/ci/compare_license_scanning_reports_collapsed_service.rb' - 'ee/app/services/ci/minutes/update_project_and_namespace_usage_service.rb' - 'ee/app/services/ci/subscribe_bridge_service.rb' - - 'ee/app/services/ci/sync_reports_to_approval_rules_service.rb' - 'ee/app/services/deployments/approval_service.rb' - 'ee/app/services/ee/allowed_email_domains/update_service.rb' - 'ee/app/services/ee/auto_merge_service.rb' @@ -388,13 +383,11 @@ Gitlab/StrongMemoizeAttr: - 'ee/app/services/status_page/publish_service.rb' - 'ee/app/services/status_page/trigger_publish_service.rb' - 'ee/app/services/timebox_report_service.rb' - - 'ee/app/services/vulnerabilities/create_service.rb' - 'ee/app/services/vulnerability_feedback/create_service.rb' - 'ee/app/services/vulnerability_feedback/destroy_service.rb' - 'ee/app/workers/auth/saml_group_sync_worker.rb' - 'ee/app/workers/geo/repository_cleanup_worker.rb' - 'ee/app/workers/geo/scheduler/scheduler_worker.rb' - - 'ee/app/workers/group_saml_group_sync_worker.rb' - 'ee/app/workers/status_page/publish_worker.rb' - 'ee/lib/api/analytics/project_deployment_frequency.rb' - 'ee/lib/api/epic_links.rb' @@ -416,7 +409,6 @@ Gitlab/StrongMemoizeAttr: - 'ee/lib/ee/gitlab/checks/diff_check.rb' - 'ee/lib/ee/gitlab/ci/matching/runner_matcher.rb' - 'ee/lib/ee/gitlab/ci/pipeline/chain/validate/external.rb' - - 'ee/lib/ee/gitlab/ci/pipeline/quota/activity.rb' - 'ee/lib/ee/gitlab/ci/pipeline/quota/size.rb' - 'ee/lib/ee/gitlab/etag_caching/router/rails.rb' - 'ee/lib/ee/gitlab/git_access.rb' @@ -426,7 +418,6 @@ Gitlab/StrongMemoizeAttr: - 'ee/lib/ee/gitlab/security/scan_configuration.rb' - 'ee/lib/ee/gitlab/web_hooks/rate_limiter.rb' - 'ee/lib/ee/sidebars/groups/menus/issues_menu.rb' - - 'ee/lib/ee/sidebars/groups/menus/settings_menu.rb' - 'ee/lib/elastic/multi_version_util.rb' - 'ee/lib/gitlab/auth/group_saml/auth_hash.rb' - 'ee/lib/gitlab/auth/group_saml/membership_updater.rb' @@ -480,7 +471,6 @@ Gitlab/StrongMemoizeAttr: - 'lib/atlassian/jira_connect/jwt/symmetric.rb' - 'lib/banzai/filter/base_sanitization_filter.rb' - 'lib/banzai/filter/custom_emoji_filter.rb' - - 'lib/banzai/filter/inline_metrics_redactor_filter.rb' - 'lib/banzai/filter/issuable_reference_expansion_filter.rb' - 'lib/banzai/filter/references/reference_cache.rb' - 'lib/banzai/filter/repository_link_filter.rb' @@ -570,7 +560,6 @@ Gitlab/StrongMemoizeAttr: - 'lib/gitlab/config/entry/composable_array.rb' - 'lib/gitlab/config/loader/yaml.rb' - 'lib/gitlab/conflict/file.rb' - - 'lib/gitlab/database/background_migration/health_status/indicators/write_ahead_log.rb' - 'lib/gitlab/database/bulk_update.rb' - 'lib/gitlab/database/load_balancing/srv_resolver.rb' - 'lib/gitlab/database/metrics.rb' @@ -613,7 +602,6 @@ Gitlab/StrongMemoizeAttr: - 'lib/gitlab/import_export/importer.rb' - 'lib/gitlab/import_export/lfs_restorer.rb' - 'lib/gitlab/import_export/project/sample/date_calculator.rb' - - 'lib/gitlab/import_export/project/tree_restorer.rb' - 'lib/gitlab/inactive_projects_deletion_warning_tracker.rb' - 'lib/gitlab/instrumentation/redis_base.rb' - 'lib/gitlab/instrumentation/redis_payload.rb' diff --git a/rubocop/cop/gitlab/strong_memoize_attr.rb b/rubocop/cop/gitlab/strong_memoize_attr.rb index 0b3de9d78639fd8fc80bc922f68525a639539768..0de581f8ccdf869c4d08bff23750ba9a806cf8aa 100644 --- a/rubocop/cop/gitlab/strong_memoize_attr.rb +++ b/rubocop/cop/gitlab/strong_memoize_attr.rb @@ -34,11 +34,13 @@ module Gitlab class StrongMemoizeAttr < RuboCop::Cop::Base extend RuboCop::Cop::AutoCorrector - MSG = 'Use `strong_memoize_attr`, instead of using `strong_memoize` directly.' + STRONG_MEMOIZE_MSG = 'Use `strong_memoize_attr`, instead of using `strong_memoize` directly.' + STRONG_MEMOIZE_WITH_MSG = + 'Use `strong_memoize_attr`, instead of using `strong_memoize_with` without parameters.' def_node_matcher :strong_memoize?, <<~PATTERN (block - $(send nil? :strong_memoize + $(send nil? {:strong_memoize | :strong_memoize_with} (sym _) ) (args) @@ -58,7 +60,14 @@ def on_block(node) corrector = autocorrect_pure_definitions(node.parent, body) if node.parent.def_type? - add_offense(send_node, &corrector) + message = case send_node.method_name + when :strong_memoize + STRONG_MEMOIZE_MSG + when :strong_memoize_with + STRONG_MEMOIZE_WITH_MSG + end + + add_offense(send_node, message: message, &corrector) end private diff --git a/spec/rubocop/cop/gitlab/strong_memoize_attr_spec.rb b/spec/rubocop/cop/gitlab/strong_memoize_attr_spec.rb index fde53f8f98c4bfadf945d9d18a73cb6250c287b0..75455a390f48f3ffcbb2225442b2cce4f6fa28c8 100644 --- a/spec/rubocop/cop/gitlab/strong_memoize_attr_spec.rb +++ b/spec/rubocop/cop/gitlab/strong_memoize_attr_spec.rb @@ -100,4 +100,42 @@ def self.memoized_method RUBY end end + + context 'when strong_memoize_with() is called without parameters' do + it 'registers an offense and autocorrects' do + expect_offense(<<~RUBY) + class Foo + def memoized_method + strong_memoize_with(:memoized_method) do + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use `strong_memoize_attr`, instead of using `strong_memoize_with` without parameters. + 'This is a memoized method' + end + end + end + RUBY + + expect_correction(<<~RUBY) + class Foo + def memoized_method + 'This is a memoized method' + end + strong_memoize_attr :memoized_method + end + RUBY + end + end + + context 'when strong_memoize_with() is called with parameters' do + it 'does not register an offense' do + expect_no_offenses(<<~RUBY) + class Foo + def memoized_method(param) + strong_memoize_with(:memoized_method, param) do + param.to_s + end + end + end + RUBY + end + end end