Add Cop that detects arg forwarding not compatible with Ruby 3
The following discussion from !110050 (merged) should be addressed:
-
@splattael started a discussion: (+5 comments) This
👮 👇 is probably too picky and not accurate but it found:29686 files inspected, 88 offenses detected
Click to expand
# frozen_string_literal: true module RuboCop module Cop class SuperArgs < RuboCop::Cop::Base MSG = 'Use ... instead of *args.' def on_zsuper(node) parent = node.each_ancestor(:def, :defs).first return unless parent.splat_argument? add_offense(parent) end end end end
showed:
app/controllers/application_controller.rb:142:3: C: Cop/SuperArgs: Use ... instead of *args. def render(*args) ... ^^^^^^^^^^^^^^^^^ app/controllers/groups/application_controller.rb:104:3: C: Cop/SuperArgs: Use ... instead of *args. def respond_to_missing?(method, *args) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ app/controllers/groups/application_controller.rb:113:3: C: Cop/SuperArgs: Use ... instead of *args. def method_missing(method_sym, *arguments, &block) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ app/controllers/projects/application_controller.rb:61:3: C: Cop/SuperArgs: Use ... instead of *args. def method_missing(method_sym, *arguments, &block) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ app/finders/concerns/finder_with_cross_project_access.rb:20:5: C: Cop/SuperArgs: Use ... instead of *args. def self.requires_cross_project_access(*args) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ app/finders/concerns/finder_with_cross_project_access.rb:35:3: C: Cop/SuperArgs: Use ... instead of *args. def execute(*args, **kwargs) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ app/finders/concerns/finder_with_cross_project_access.rb:53:3: C: Cop/SuperArgs: Use ... instead of *args. def find_by!(*args) ... ^^^^^^^^^^^^^^^^^^^ app/finders/concerns/finder_with_cross_project_access.rb:58:3: C: Cop/SuperArgs: Use ... instead of *args. def find_by(*args) ... ^^^^^^^^^^^^^^^^^^ app/finders/concerns/finder_with_cross_project_access.rb:63:3: C: Cop/SuperArgs: Use ... instead of *args. def find(*args) ... ^^^^^^^^^^^^^^^ app/finders/issuable_finder/params.rb:226:5: C: Cop/SuperArgs: Use ... instead of *args. def method_missing(method_name, *args, &block) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ app/models/concerns/admin_changed_password_notifier.rb:36:3: C: Cop/SuperArgs: Use ... instead of *args. def initialize(*args, &block) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ app/models/concerns/bulk_insert_safe.rb:60:5: C: Cop/SuperArgs: Use ... instead of *args. def set_callback(name, *args) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ app/models/concerns/throttled_touch.rb:9:3: C: Cop/SuperArgs: Use ... instead of *args. def touch(*args, **kwargs) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^ app/models/note.rb:533:3: C: Cop/SuperArgs: Use ... instead of *args. def touch(*args, **kwargs) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^ app/services/commits/change_service.rb:5:5: C: Cop/SuperArgs: Use ... instead of *args. def initialize(*args) ... ^^^^^^^^^^^^^^^^^^^^^ app/services/commits/commit_patch_service.rb:12:5: C: Cop/SuperArgs: Use ... instead of *args. def initialize(*args) ... ^^^^^^^^^^^^^^^^^^^^^ app/services/commits/create_service.rb:16:5: C: Cop/SuperArgs: Use ... instead of *args. def initialize(*args) ... ^^^^^^^^^^^^^^^^^^^^^ app/services/concerns/rate_limited_service.rb:77:3: C: Cop/SuperArgs: Use ... instead of *args. def execute(*args, **kwargs) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ app/services/design_management/on_success_callbacks.rb:9:5: C: Cop/SuperArgs: Use ... instead of *args. def success(*_) ... ^^^^^^^^^^^^^^^ app/services/files/base_service.rb:7:5: C: Cop/SuperArgs: Use ... instead of *args. def initialize(*args) ... ^^^^^^^^^^^^^^^^^^^^^ app/services/members/create_service.rb:13:5: C: Cop/SuperArgs: Use ... instead of *args. def initialize(*args) ... ^^^^^^^^^^^^^^^^^^^^^ app/services/members/invite_service.rb:7:5: C: Cop/SuperArgs: Use ... instead of *args. def initialize(*args) ... ^^^^^^^^^^^^^^^^^^^^^ app/services/notification_service.rb:38:5: C: Cop/SuperArgs: Use ... instead of *args. def method_missing(meth, *args) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ app/services/projects/import_export/export_service.rb:6:7: C: Cop/SuperArgs: Use ... instead of *args. def initialize(*args) ... ^^^^^^^^^^^^^^^^^^^^^ app/services/submodules/update_service.rb:7:5: C: Cop/SuperArgs: Use ... instead of *args. def initialize(*args) ... ^^^^^^^^^^^^^^^^^^^^^ app/uploaders/object_storage.rb:306:5: C: Cop/SuperArgs: Use ... instead of *args. def store_path(*args) ... ^^^^^^^^^^^^^^^^^^^^^ app/validators/any_field_validator.rb:15:3: C: Cop/SuperArgs: Use ... instead of *args. def initialize(*args) ... ^^^^^^^^^^^^^^^^^^^^^ app/validators/x509_certificate_credentials_validator.rb:23:3: C: Cop/SuperArgs: Use ... instead of *args. def initialize(*args) ... ^^^^^^^^^^^^^^^^^^^^^ app/workers/concerns/reenqueuer.rb:43:3: C: Cop/SuperArgs: Use ... instead of *args. def perform(*args) ... ^^^^^^^^^^^^^^^^^^ config/initializers/console_message.rb:6:5: C: Cop/SuperArgs: Use ... instead of *args. def init_config(*) ... ^^^^^^^^^^^^^^^^^^ config/initializers/forbid_sidekiq_in_transactions.rb:105:7: C: Cop/SuperArgs: Use ... instead of *args. def committed!(*args, **kwargs) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ config/initializers/gitlab_experiment.rb:83:5: C: Cop/SuperArgs: Use ... instead of *args. def deprecated(*args, version:, stack: 0) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ config/initializers/hashie_mash_permitted_patch.rb:28:7: C: Cop/SuperArgs: Use ... instead of *args. def respond_to_missing?(method_name, *args) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ config/initializers/hashie_mash_permitted_patch.rb:39:7: C: Cop/SuperArgs: Use ... instead of *args. def method_missing(method_name, *args) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ config/initializers/zz_metrics.rb:52:5: C: Cop/SuperArgs: Use ... instead of *args. def connect(*args) ... ^^^^^^^^^^^^^^^^^^ ee/app/controllers/ee/groups/application_controller.rb:13:7: C: Cop/SuperArgs: Use ... instead of *args. def method_missing(method_sym, *arguments, &block) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ee/app/controllers/ee/ldap/omniauth_callbacks_controller.rb:9:7: C: Cop/SuperArgs: Use ... instead of *args. def sign_in_and_redirect(user, *args) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ee/app/controllers/groups/omniauth_callbacks_controller.rb:62:3: C: Cop/SuperArgs: Use ... instead of *args. def sign_in_and_redirect(user, *args) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ee/app/controllers/groups/omniauth_callbacks_controller.rb:67:3: C: Cop/SuperArgs: Use ... instead of *args. def sign_in(resource_or_scope, *args) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ee/app/finders/ee/license_template_finder.rb:10:5: C: Cop/SuperArgs: Use ... instead of *args. def initialize(project, *args, &blk) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ee/app/finders/ee/template_finder.rb:19:5: C: Cop/SuperArgs: Use ... instead of *args. def initialize(type, project, *args, &blk) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ee/app/graphql/ee/types/notes/noteable_interface.rb:8:11: C: Cop/SuperArgs: Use ... instead of *args. def resolve_type(object, *) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ee/app/graphql/ee/types/todoable_interface.rb:12:9: C: Cop/SuperArgs: Use ... instead of *args. def resolve_type(object, *) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ee/app/models/concerns/epic_tree_sorting.rb:46:5: C: Cop/SuperArgs: Use ... instead of *args. def move_between(*) ... ^^^^^^^^^^^^^^^^^^^ ee/app/models/concerns/epic_tree_sorting.rb:51:5: C: Cop/SuperArgs: Use ... instead of *args. def move_after(*) ... ^^^^^^^^^^^^^^^^^ ee/app/models/concerns/epic_tree_sorting.rb:56:5: C: Cop/SuperArgs: Use ... instead of *args. def move_before(*) ... ^^^^^^^^^^^^^^^^^^ ee/app/models/ee/identity.rb:42:7: C: Cop/SuperArgs: Use ... instead of *args. def human_attribute_name(name, *args) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ee/app/models/ee/merge_request.rb:102:7: C: Cop/SuperArgs: Use ... instead of *args. def sort_by_attribute(method, *args, **kwargs) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ee/app/models/ee/repository.rb:60:5: C: Cop/SuperArgs: Use ... instead of *args. def keep_around(*shas) ... ^^^^^^^^^^^^^^^^^^^^^^ ee/app/models/ee/user.rb:369:5: C: Cop/SuperArgs: Use ... instead of *args. def allow_password_authentication_for_web?(*) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ee/app/models/ee/user.rb:377:5: C: Cop/SuperArgs: Use ... instead of *args. def allow_password_authentication_for_git?(*) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ee/app/models/ee/user.rb:522:5: C: Cop/SuperArgs: Use ... instead of *args. def password_required?(*) ... ^^^^^^^^^^^^^^^^^^^^^^^^^ ee/app/models/elastic/migration_record.rb:82:5: C: Cop/SuperArgs: Use ... instead of *args. def method_missing(method, *args, &block) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ee/app/models/license.rb:193:3: C: Cop/SuperArgs: Use ... instead of *args. def method_missing(method_name, *arguments, &block) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ee/app/services/approval_rules/base_service.rb:27:5: C: Cop/SuperArgs: Use ... instead of *args. def success(*args, &blk) ... ^^^^^^^^^^^^^^^^^^^^^^^^ ee/app/services/ee/null_notification_service.rb:10:5: C: Cop/SuperArgs: Use ... instead of *args. def method_missing(name, *) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ee/app/workers/concerns/elastic/indexing_control.rb:8:5: C: Cop/SuperArgs: Use ... instead of *args. def perform(*args) ... ^^^^^^^^^^^^^^^^^^ ee/app/workers/ee/project_cache_worker.rb:9:5: C: Cop/SuperArgs: Use ... instead of *args. def perform(*args) ... ^^^^^^^^^^^^^^^^^^ ee/app/workers/search/index_curation_worker.rb:21:5: C: Cop/SuperArgs: Use ... instead of *args. def initialize(*) ... ^^^^^^^^^^^^^^^^^ ee/lib/ee/feature.rb:23:7: C: Cop/SuperArgs: Use ... instead of *args. def enable(key, *_) ... ^^^^^^^^^^^^^^^^^^^ ee/lib/ee/feature.rb:30:7: C: Cop/SuperArgs: Use ... instead of *args. def disable(key, *_) ... ^^^^^^^^^^^^^^^^^^^^ ee/lib/ee/gitlab/ci/pipeline/chain/limit/activity.rb:17:15: C: Cop/SuperArgs: Use ... instead of *args. def initialize(*) ... ^^^^^^^^^^^^^^^^^ ee/lib/ee/gitlab/ci/pipeline/chain/limit/size.rb:16:15: C: Cop/SuperArgs: Use ... instead of *args. def initialize(*) ... ^^^^^^^^^^^^^^^^^ ee/spec/support/helpers/ee/license_helpers.rb:88:7: C: Cop/SuperArgs: Use ... instead of *args. def licensed_feature_available?(*) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ lib/banzai/filter/references/commit_range_reference_filter.rb:19:9: C: Cop/SuperArgs: Use ... instead of *args. def initialize(*args) ... ^^^^^^^^^^^^^^^^^^^^^ lib/gitlab/ci/charts.rb:59:9: C: Cop/SuperArgs: Use ... instead of *args. def initialize(*) ... ^^^^^^^^^^^^^^^^^ lib/gitlab/ci/charts.rb:70:9: C: Cop/SuperArgs: Use ... instead of *args. def initialize(*) ... ^^^^^^^^^^^^^^^^^ lib/gitlab/ci/charts.rb:81:9: C: Cop/SuperArgs: Use ... instead of *args. def initialize(*) ... ^^^^^^^^^^^^^^^^^ lib/gitlab/ci/config/entry/caches.rb:27:11: C: Cop/SuperArgs: Use ... instead of *args. def initialize(*args) ... ^^^^^^^^^^^^^^^^^^^^^ lib/gitlab/ci/parsers/instrumentation.rb:9:9: C: Cop/SuperArgs: Use ... instead of *args. def parse!(*args) ... ^^^^^^^^^^^^^^^^^ lib/gitlab/ci/pipeline/chain/limit/deployments.rb:15:13: C: Cop/SuperArgs: Use ... instead of *args. def initialize(*) ... ^^^^^^^^^^^^^^^^^ lib/gitlab/database/migration_helpers/v2.rb:43:9: C: Cop/SuperArgs: Use ... instead of *args. def create_table(table_name, *args, **kwargs, &block) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ lib/gitlab/graphql/batch_key.rb:32:7: C: Cop/SuperArgs: Use ... instead of *args. def method_missing(method_name, *args, **kwargs) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ lib/gitlab/import_export/project/export_task.rb:7:9: C: Cop/SuperArgs: Use ... instead of *args. def initialize(*) ... ^^^^^^^^^^^^^^^^^ lib/gitlab/import_export/project/sample/relation_tree_restorer.rb:16:11: C: Cop/SuperArgs: Use ... instead of *args. def relation_factory_params(*args) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ lib/gitlab/profiler.rb:101:11: C: Cop/SuperArgs: Use ... instead of *args. def debug(message, *) ... ^^^^^^^^^^^^^^^^^^^^^ lib/gitlab/tracking/event_definition.rb:75:7: C: Cop/SuperArgs: Use ... instead of *args. def method_missing(method, *args) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ lib/gitlab/usage/metric_definition.rb:138:7: C: Cop/SuperArgs: Use ... instead of *args. def method_missing(method, *args) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ lib/gitlab/usage/metric_definition.rb:142:7: C: Cop/SuperArgs: Use ... instead of *args. def respond_to_missing?(method, *args) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ lib/unnested_in_filters/dsl.rb:61:7: C: Cop/SuperArgs: Use ... instead of *args. def load(*) ... ^^^^^^^^^^^ lib/unnested_in_filters/dsl.rb:70:7: C: Cop/SuperArgs: Use ... instead of *args. def exists?(*) ... ^^^^^^^^^^^^^^ qa/qa/git/repository.rb:30:7: C: Cop/SuperArgs: Use ... instead of *args. def self.perform(*args) ... ^^^^^^^^^^^^^^^^^^^^^^^ qa/qa/scenario/test/instance/airgapped.rb:10:11: C: Cop/SuperArgs: Use ... instead of *args. def perform(address, *rspec_options) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ spec/lib/gitlab/http_spec.rb:34:9: C: Cop/SuperArgs: Use ... instead of *args. def request(*) ... ^^^^^^^^^^^^^^ spec/lib/gitlab/utils/override_spec.rb:40:9: C: Cop/SuperArgs: Use ... instead of *args. def good(*args) ... ^^^^^^^^^^^^^^^ spec/support/helpers/database/multiple_databases_helpers.rb:96:5: C: Cop/SuperArgs: Use ... instead of *args. def establish_connection(*args) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ spec/support/helpers/stubbed_feature.rb:32:5: C: Cop/SuperArgs: Use ... instead of *args. def enabled?(*args, **kwargs) ... ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ spec/support/shared_examples/requests/lfs_http_shared_examples.rb:195:9: C: Cop/SuperArgs: Use ... instead of *args. def objects_url(*args) ... ^^^^^^^^^^^^^^^^^^^^^^ 29686 files inspected, 88 offenses detected