Skip to content

Enable Style/NumberedParameters disallowing use of _1

Peter Leitzen requested to merge pl-style-numbered-parameters into master

Description of the proposal

Enable Style/NumberedParameters and disallow use of numbered parameters (_1, _2 etc.). (2️⃣)

Previous proposal

Enable Style/NumberedParameters and allow use of numbered parameters (_1, _2 etc.) in single lines. (1️⃣)

1️⃣ Enable rule with EnforcedStyle: allow_single_line

Allow use of _1 but only on a single line.

# bad
collection.each do
  puts _1
end

# good
collection.each { puts _1 }

collection.each do |item|
end

# still good
collection.each { |item| puts item }

Offenses in gitlab-org/gitlab: 29482 files inspected, 4 offenses detected

Expand
Offenses:

app/models/hooks/web_hook.rb:196:5: C: Style/NumberedParameters: Avoid using numbered parameters for multi-line blocks.
    url.gsub(VARIABLE_REFERENCE_RE) do ...
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/integration.rb:310:5: C: Style/NumberedParameters: Avoid using numbered parameters for multi-line blocks.
    available_integration_names(include_project_specific: include_project_specific, include_dev: include_dev).map do ...
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/gitlab/quick_actions/users_extractor.rb:53:19: C: Style/NumberedParameters: Avoid using numbered parameters for multi-line blocks.
        missing = references.filter_map do ...
                  ^^^^^^^^^^^^^^^^^^^^^^^^
spec/models/integration_spec.rb:285:17: C: Style/NumberedParameters: Avoid using numbered parameters for multi-line blocks.
        attrs = Integration.available_integration_types(include_project_specific: false).map do ...
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

29482 files inspected, 4 offenses detected

2️⃣ Enable rule with EnforcedStyle: disallow

Disallow the use of _1 and friends.

# bad
collection.each { puts _1 }

# good
collection.each { |item| puts item }

Offenses in gitlab-org/gitlab: 29482 files inspected, 119 offenses detected

Expand
Offenses:

app/controllers/concerns/web_hooks/hook_actions.rb:60:28: C: Style/NumberedParameters: Avoid using numbered parameters.
      ps[:url_variables] = ps[:url_variables].to_h { [_1[:key], _1[:value].presence] } if ps.key?(:url_variables)
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/graphql_controller.rb:114:20: C: Style/NumberedParameters: Avoid using numbered parameters.
                   params[:_json].sum { _1[:query].size }
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/import/bulk_imports_controller.rb:121:5: C: Style/NumberedParameters: Avoid using numbered parameters.
    create_params.all? { _1[:source_type] == 'group_entity' }
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/graphql/types/base_field.rb:30:7: C: Style/NumberedParameters: Avoid using numbered parameters.
      after_connection_extensions.each { extension _1 } if after_connection_extensions.any?
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/graphql/types/current_user_todos.rb:34:11: C: Style/NumberedParameters: Avoid using numbered parameters.
          todos.each { _1.target = target } # prevent extra loads
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/graphql/types/design_management/design_fields.rb:85:24: C: Style/NumberedParameters: Avoid using numbered parameters.
          by_version = ids.group_by(&:first).transform_values { _1.map(&:second) }
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/helpers/colors_helper.rb:15:9: C: Style/NumberedParameters: Avoid using numbered parameters.
    "##{rgb_array.map{ "%02x" % _1 }.join}"
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/helpers/colors_helper.rb:21:56: C: Style/NumberedParameters: Avoid using numbered parameters.
    rgb_array.is_a?(Array) && rgb_array.length == 3 && rgb_array.all?{ _1 >= 0 && _1 <= 255 }
                                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/helpers/hooks_helper.rb:7:40: C: Style/NumberedParameters: Avoid using numbered parameters.
      url_variables: Gitlab::Json.dump(hook.url_variables.keys.map { { key: _1 } })
                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/active_session.rb:265:5: C: Style/NumberedParameters: Avoid using numbered parameters.
    raw_active_session_entries(redis, session_ids, user_id) ...
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/bulk_imports/entity.rb:104:5: C: Style/NumberedParameters: Avoid using numbered parameters.
    pipelines.any? { _1[:pipeline].to_s == name.to_s }
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/concerns/integrations/reset_secret_fields.rb:17:7: C: Style/NumberedParameters: Avoid using numbered parameters.
      fields.select { _1.try(:exposes_secrets) }.pluck(:name)
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/hooks/web_hook.rb:196:5: C: Style/NumberedParameters: Avoid using numbered parameters.
    url.gsub(VARIABLE_REFERENCE_RE) do ...
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/integration.rb:310:5: C: Style/NumberedParameters: Avoid using numbered parameters.
    available_integration_names(include_project_specific: include_project_specific, include_dev: include_dev).map do ...
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/integration.rb:513:5: C: Style/NumberedParameters: Avoid using numbered parameters.
    fields.reject { _1[:type] == 'password' }.pluck(:name)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/integration.rb:517:5: C: Style/NumberedParameters: Avoid using numbered parameters.
    fields.reject { _1[:api_only] == true }
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/integrations/datadog.rb:202:14: C: Style/NumberedParameters: Avoid using numbered parameters.
      unless datadog_tags.split("\n").select(&:present?).all? { _1 =~ TAG_KEY_VALUE_RE }
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/integrations/youtrack.rb:36:7: C: Style/NumberedParameters: Avoid using numbered parameters.
      super.select { _1.name.in?(%w[project_url issues_url]) }
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/project.rb:1610:5: C: Style/NumberedParameters: Avoid using numbered parameters.
    Integration ...
    ^^^^^^^^^^^
app/models/project.rb:2991:7: C: Style/NumberedParameters: Avoid using numbered parameters.
      links.select { Ability.allowed?(user, :read_group, _1.group) }
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/project.rb:3130:5: C: Style/NumberedParameters: Avoid using numbered parameters.
    integrations.find { _1.to_param == name }
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/services/import/gitlab_projects/create_project_service.rb:45:9: C: Style/NumberedParameters: Avoid using numbered parameters.
        super.tap { _1.merge!(strategy.errors) }
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/services/merge_requests/update_service.rb:326:7: C: Style/NumberedParameters: Avoid using numbered parameters.
      param.reject { _1 == 0 }
      ^^^^^^^^^^^^^^^^^^^^^^^^
app/services/packages/rpm/parse_package_service.rb:70:24: C: Style/NumberedParameters: Avoid using numbered parameters.
          return [] if resource_keys.any? { package_tags[_1].blank? }
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/services/packages/rpm/parse_package_service.rb:73:47: C: Style/NumberedParameters: Avoid using numbered parameters.
          zipped_data = first_attributes.zip(*resource_keys[1..].map { package_tags[_1] })
                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/services/packages/rpm/repository_metadata/update_xml_service.rb:54:13: C: Style/NumberedParameters: Avoid using numbered parameters.
            xml.search("checksum:contains('#{data[:pkgid]}')").each { _1.parent&.remove }
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/services/web_hooks/log_execution_service.rb:38:23: C: Style/NumberedParameters: Avoid using numbered parameters.
      variables_map = hook.url_variables.invert.transform_values { "{#{_1}}" }
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ee/app/models/ee/project.rb:1070:50: C: Style/NumberedParameters: Avoid using numbered parameters.
      saml_providers = SamlProvider.where(group: links.map { _1.group.root_ancestor }).index_by(&:group_id)
                                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ee/app/models/security/finding.rb:203:7: C: Style/NumberedParameters: Avoid using numbered parameters.
      symbolized_finding_data[:remediation_byte_offsets].map { |offset| offset.values_at(:start_byte, :end_byte) } ...
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ee/app/models/slack_integration.rb:58:5: C: Style/NumberedParameters: Avoid using numbered parameters.
    ALL_FEATURES.all? { feature_available?(_1) } # rubocop: disable Gitlab/FeatureAvailableUsage
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ee/app/models/slack_integration.rb:62:13: C: Style/NumberedParameters: Avoid using numbered parameters.
    names = Array.wrap(names).flat_map { _1.split(',') }.map(&:strip)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ee/app/models/vulnerabilities/feedback.rb:66:14: C: Style/NumberedParameters: Avoid using numbered parameters.
      return feedback_by_uuid.tap { _1.assign_attributes(feedback_params) } if feedback_by_uuid
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ee/app/models/vulnerabilities/feedback.rb:68:7: C: Style/NumberedParameters: Avoid using numbered parameters.
      feedback_params.slice(:category, :feedback_type, :project_fingerprint) ...
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ee/app/services/security/ingestion/tasks/hooks_execution.rb:14:11: C: Style/NumberedParameters: Avoid using numbered parameters.
          new_finding_maps.map(&:vulnerability_id) ...
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ee/app/services/security/ingestion/tasks/ingest_remediations.rb:86:11: C: Style/NumberedParameters: Avoid using numbered parameters.
          new_report_remediations.find { _1.checksum == remediation.checksum }.then do |report_remediation|
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ee/app/services/security/store_findings_service.rb:44:7: C: Style/NumberedParameters: Avoid using numbered parameters.
      batch.map { finding_data(_1) } ...
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ee/lib/ee/gitlab/quick_actions/users_extractor.rb:14:11: C: Style/NumberedParameters: Avoid using numbered parameters.
          references.reject { _1.start_with?('@') }
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ee/lib/ee/gitlab/quick_actions/users_extractor.rb:24:47: C: Style/NumberedParameters: Avoid using numbered parameters.
          groups = ::Group.where_full_path_in(references.map { _1.delete_prefix('@') })
                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ee/lib/ee/gitlab/quick_actions/users_extractor.rb:26:26: C: Style/NumberedParameters: Avoid using numbered parameters.
          super(users) + groups.map { _1.full_path.downcase }
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ee/spec/lib/gitlab/quick_actions/users_extractor_spec.rb:23:7: C: Style/NumberedParameters: Avoid using numbered parameters.
      [pancakes, waffles].each { group.add_developer(_1) }
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ee/spec/models/vulnerabilities/statistic_spec.rb:43:7: C: Style/NumberedParameters: Avoid using numbered parameters.
      %w[b c d f].each { create(:vulnerability_statistic, :"grade_#{_1}") }
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ee/spec/services/quick_actions/interpret_service_spec.rb:187:13: C: Style/NumberedParameters: Avoid using numbered parameters.
            group_members.each { group.add_developer(_1) }
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ee/spec/services/security/ingestion/tasks/ingest_remediations_spec.rb:12:135: C: Style/NumberedParameters: Avoid using numbered parameters.
    let(:existing_remediation_1) { create(:vulnerabilities_remediation, project: pipeline.project, checksum: existing_checksum, file: Tempfile.new.tap { _1.write(existing_diff) }, summary: 'Foo Summary') }
                                                                                                                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/api/entities/hook.rb:20:9: C: Style/NumberedParameters: Avoid using numbered parameters.
        object.url_variables.keys.map { { key: _1 } }
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/api/helpers/web_hooks_helpers.rb:32:41: C: Style/NumberedParameters: Avoid using numbered parameters.
          hook_params[:url_variables] = url_variables.to_h { [_1[:key], _1[:value]] }
                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/api/helpers/web_hooks_helpers.rb:50:25: C: Style/NumberedParameters: Avoid using numbered parameters.
        url_variables = url_variables.to_h { [_1[:key], _1[:value]] }
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/api/hooks/url_variables.rb:35:18: C: Style/NumberedParameters: Avoid using numbered parameters.
          vars = hook.url_variables.reject { _1 == key }
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/error_tracking/sentry_client/issue.rb:109:9: C: Style/NumberedParameters: Avoid using numbered parameters.
        issues.map { map_to_error(_1) }
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/error_tracking/sentry_client/projects.rb:21:9: C: Style/NumberedParameters: Avoid using numbered parameters.
        projects.map { map_to_project(_1) }
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/error_tracking/sentry_client/repo.rb:26:9: C: Style/NumberedParameters: Avoid using numbered parameters.
        repos.map { map_to_repo(_1) }
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/feature.rb:120:22: C: Style/NumberedParameters: Avoid using numbered parameters.
      return_value = with_feature(key) { _1.enable(thing) }
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/feature.rb:133:7: C: Style/NumberedParameters: Avoid using numbered parameters.
      with_feature(key) { _1.disable(thing) }
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/feature.rb:142:7: C: Style/NumberedParameters: Avoid using numbered parameters.
      with_feature(key) { _1.actors_value.include?(opt_out.flipper_id) }
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/feature.rb:151:7: C: Style/NumberedParameters: Avoid using numbered parameters.
      with_feature(key) { _1.enable(opt_out) }
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/feature.rb:161:7: C: Style/NumberedParameters: Avoid using numbered parameters.
      with_feature(key) { _1.disable(opt_out) }
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/gitlab/color.rb:15:27: C: Style/NumberedParameters: Avoid using numbered parameters.
      COLOR_NAME_TO_HEX = { ...
                          ^
lib/gitlab/error_tracking/error_repository/open_api_strategy.rb:58:12: C: Style/NumberedParameters: Avoid using numbered parameters.
          [errors.map { to_sentry_error(_1) }, pagination]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/gitlab/error_tracking/error_repository/open_api_strategy.rb:173:29: C: Style/NumberedParameters: Avoid using numbered parameters.
          pagination_hash = links.map { parse_pagination_link(_1) }.compact.to_h
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/gitlab/github_import/representation/issue.rb:35:26: C: Style/NumberedParameters: Avoid using numbered parameters.
            label_names: issue[:labels].map { _1[:name] },
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/gitlab/pagination/keyset/order.rb:152:11: C: Style/NumberedParameters: Avoid using numbered parameters.
          column_definitions ...
          ^^^^^^^^^^^^^^^^^^
lib/gitlab/quick_actions/users_extractor.rb:53:19: C: Style/NumberedParameters: Avoid using numbered parameters.
        missing = references.filter_map do ...
                  ^^^^^^^^^^^^^^^^^^^^^^^^
lib/gitlab/quick_actions/users_extractor.rb:71:9: C: Style/NumberedParameters: Avoid using numbered parameters.
        references.map { _1.delete_prefix('@') }
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/gitlab/quick_actions/users_extractor.rb:78:11: C: Style/NumberedParameters: Avoid using numbered parameters.
          refs.map! { _1.gsub(/\\_/, '_') }
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/gitlab/safe_request_loader.rb:51:16: C: Style/NumberedParameters: Avoid using numbered parameters.
      absent = (missing_resource_ids - resource_data.keys).to_h { [_1, default_value] }
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/gitlab/usage_data_counters/ci_template_unique_counter.rb:53:9: C: Style/NumberedParameters: Avoid using numbered parameters.
        results.uniq.sort_by { _1['name'] }
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/gitlab/zentao/client.rb:106:15: C: Style/NumberedParameters: Avoid using numbered parameters.
        ids = issues.map { _1['id'] }
              ^^^^^^^^^^^^^^^^^^^^^^^
lib/gitlab_edition.rb:18:5: C: Style/NumberedParameters: Avoid using numbered parameters.
    path_prefixes.map! { "#{_1}/" }
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/tasks/gitlab/usage_data.rake:69:7: C: Style/NumberedParameters: Avoid using numbered parameters.
      Gitlab::UsageDataCounters::CiTemplateUniqueCounter ...
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/unnested_in_filters/rewriter.rb:47:9: C: Style/NumberedParameters: Avoid using numbered parameters.
        values.map(&:value) ...
        ^^^^^^^^^^^^^^^^^^^
lib/unnested_in_filters/rewriter.rb:61:9: C: Style/NumberedParameters: Avoid using numbered parameters.
        columns.find { _1.name == attribute }
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/unnested_in_filters/rewriter.rb:183:7: C: Style/NumberedParameters: Avoid using numbered parameters.
      model.from(from).then { add_relation_defaults(_1) }
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/unnested_in_filters/rewriter.rb:187:7: C: Style/NumberedParameters: Avoid using numbered parameters.
      model.where(model.primary_key => filter_query.select(model.primary_key)) ...
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/unnested_in_filters/rewriter.rb:232:7: C: Style/NumberedParameters: Avoid using numbered parameters.
      where_clause_arel_nodes.select(&method(:in_predicate?)).select { model_column_names.include?(_1.left.name) }
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rubocop/check_graceful_task.rb:20:26: C: Style/NumberedParameters: Avoid using numbered parameters.
      cop_names, paths = args.partition { available_cops.key?(_1) }
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rubocop/cop/gitlab/namespaced_class.rb:42:27: C: Style/NumberedParameters: Avoid using numbered parameters.
        PSEUDO_TOPLEVEL = %w[Gitlab] ...
                          ^^^^^^^^^^
rubocop/cop/gitlab/namespaced_class.rb:52:11: C: Style/NumberedParameters: Avoid using numbered parameters.
          add_potential_domain_namespace(node) { _1.pop }
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rubocop/cop/graphql/enum_values.rb:65:21: C: Style/NumberedParameters: Avoid using numbered parameters.
          return if params.any? { deprecated?(_1) }
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rubocop/formatter/graceful_formatter.rb:25:46: C: Style/NumberedParameters: Avoid using numbered parameters.
        silenced_offenses, active_offenses = offenses.partition { silenced?(_1) }
                                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/graphql/resolvers/concerns/resolves_ids_spec.rb:28:17: C: Style/NumberedParameters: Avoid using numbered parameters.
    let(:ids) { [7, 13, 21].map { global_id_of(model_name: 'User', id: _1) } }
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/graphql/types/board_list_type_spec.rb:29:17: C: Style/NumberedParameters: Avoid using numbered parameters.
      a, b, c = create_list(:list, 3).map { _1.class.find(_1.id) }
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/graphql/types/board_list_type_spec.rb:34:9: C: Style/NumberedParameters: Avoid using numbered parameters.
        [resolve_field(field, b), resolve_field(field, c)].each { force _1 }
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/graphql/types/current_user_todos_type_spec.rb:28:7: C: Style/NumberedParameters: Avoid using numbered parameters.
      fresh_object_type('HasTodos').tap { _1.implements(Types::CurrentUserTodos) }
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/lib/bulk_imports/groups/stage_spec.rb:45:33: C: Style/NumberedParameters: Avoid using numbered parameters.
      minimum_source_versions = pipelines.collect { _1[:minimum_source_version] }.flatten.compact
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/lib/bulk_imports/groups/stage_spec.rb:46:33: C: Style/NumberedParameters: Avoid using numbered parameters.
      maximum_source_versions = pipelines.collect { _1[:maximum_source_version] }.flatten.compact
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/lib/bulk_imports/groups/stage_spec.rb:49:14: C: Style/NumberedParameters: Avoid using numbered parameters.
      expect(minimum_source_versions.all? { version_regex =~ _1 }).to eq(true)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/lib/bulk_imports/groups/stage_spec.rb:50:14: C: Style/NumberedParameters: Avoid using numbered parameters.
      expect(maximum_source_versions.all? { version_regex =~ _1 }).to eq(true)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/lib/bulk_imports/groups/stage_spec.rb:66:27: C: Style/NumberedParameters: Avoid using numbered parameters.
        expected_stages = described_class.new(entity).pipelines.collect { _1[:stage] }
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/lib/bulk_imports/projects/stage_spec.rb:32:33: C: Style/NumberedParameters: Avoid using numbered parameters.
      minimum_source_versions = pipelines.collect { _1[:minimum_source_version] }.flatten.compact
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/lib/bulk_imports/projects/stage_spec.rb:33:33: C: Style/NumberedParameters: Avoid using numbered parameters.
      maximum_source_versions = pipelines.collect { _1[:maximum_source_version] }.flatten.compact
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/lib/bulk_imports/projects/stage_spec.rb:36:14: C: Style/NumberedParameters: Avoid using numbered parameters.
      expect(minimum_source_versions.all? { version_regex =~ _1 }).to eq(true)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/lib/bulk_imports/projects/stage_spec.rb:37:14: C: Style/NumberedParameters: Avoid using numbered parameters.
      expect(maximum_source_versions.all? { version_regex =~ _1 }).to eq(true)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/lib/bulk_imports/projects/stage_spec.rb:53:27: C: Style/NumberedParameters: Avoid using numbered parameters.
        expected_stages = subject.pipelines.collect { _1[:stage] }
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/lib/gitlab/import_export/json/streaming_serializer_spec.rb:279:13: C: Style/NumberedParameters: Avoid using numbered parameters.
            enumerator.each { _1 }
            ^^^^^^^^^^^^^^^^^^^^^^
spec/lib/gitlab/quick_actions/users_extractor_spec.rb:87:9: C: Style/NumberedParameters: Avoid using numbered parameters.
        [pancakes, waffles].each { group.add_developer(_1) }
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/lib/gitlab/web_hooks/recursion_detection_spec.rb:216:7: C: Style/NumberedParameters: Avoid using numbered parameters.
      registered_web_hooks.each { described_class.register!(_1) }
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/lib/gitlab/zentao/client_spec.rb:191:35: C: Style/NumberedParameters: Avoid using numbered parameters.
          issues_body = { issues: valid_ids.map { { id: _1 } } }.to_json
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/models/bulk_imports/entity_spec.rb:202:16: C: Style/NumberedParameters: Avoid using numbered parameters.
        expect(entity.pipelines.collect { _1[:pipeline] }).to include(BulkImports::Groups::Pipelines::GroupPipeline)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/models/bulk_imports/entity_spec.rb:210:16: C: Style/NumberedParameters: Avoid using numbered parameters.
        expect(entity.pipelines.collect { _1[:pipeline] }).to include(BulkImports::Projects::Pipelines::ProjectPipeline)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/models/hooks/web_hook_spec.rb:36:39: C: Style/NumberedParameters: Avoid using numbered parameters.
      it { is_expected.to allow_value((1..20).to_h { ["k#{_1}", 'value'] }).for(:url_variables) }
                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/models/hooks/web_hook_spec.rb:52:43: C: Style/NumberedParameters: Avoid using numbered parameters.
      it { is_expected.not_to allow_value((1..21).to_h { ["k#{_1}", 'value'] }).for(:url_variables) }
                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/models/integration_spec.rb:285:17: C: Style/NumberedParameters: Avoid using numbered parameters.
        attrs = Integration.available_integration_types(include_project_specific: false).map do ...
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/models/integration_spec.rb:643:15: C: Style/NumberedParameters: Avoid using numbered parameters.
      types = described_class.available_integration_names.map { described_class.integration_name_to_type(_1) }
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/requests/api/graphql/mutations/issues/set_crm_contacts_spec.rb:18:23: C: Style/NumberedParameters: Avoid using numbered parameters.
  let(:contact_ids) { mutation_contacts.map { global_id_of(_1) } }
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/requests/api/graphql/project/merge_request_spec.rb:411:11: C: Style/NumberedParameters: Avoid using numbered parameters.
          ([user] + other_users).each { project.add_guest(_1) }
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/requests/api/groups_spec.rb:843:38: C: Style/NumberedParameters: Avoid using numbered parameters.
      subject(:shared_with_groups) { json_response['shared_with_groups'].map { _1['group_id']} }
                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/requests/recursive_webhook_detection_spec.rb:92:9: C: Style/NumberedParameters: Avoid using numbered parameters.
        previous_hooks.each { Gitlab::WebHooks::RecursionDetection.register!(_1) }
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/rubocop/cop/file_decompression_spec.rb:11:3: C: Style/NumberedParameters: Avoid using numbered parameters.
  described_class::FORBIDDEN_COMMANDS.map { [_1, '^' * _1.length] }.each do |cmd, len|
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/services/packages/rpm/repository_metadata/build_filelist_xml_service_spec.rb:31:26: C: Style/NumberedParameters: Avoid using numbered parameters.
            directories: dirs.map { "#{_1}/" }, # Add trailing slash as in original package
                         ^^^^^^^^^^^^^^^^^^^^^
spec/services/web_hook_service_spec.rb:277:7: C: Style/NumberedParameters: Avoid using numbered parameters.
      previous_hooks.each { Gitlab::WebHooks::RecursionDetection.register!(_1) }
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/services/web_hook_service_spec.rb:690:9: C: Style/NumberedParameters: Avoid using numbered parameters.
        previous_hooks.each { Gitlab::WebHooks::RecursionDetection.register!(_1) }
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/support/helpers/graphql_helpers.rb:362:12: C: Style/NumberedParameters: Avoid using numbered parameters.
    return input.map { prepare_variables(_1) } if input.is_a?(Array)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/support/helpers/graphql_helpers.rb:849:5: C: Style/NumberedParameters: Avoid using numbered parameters.
    attrs.transform_keys! { GraphqlHelpers.fieldnamerize(_1) }
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/support/matchers/exceed_query_limit.rb:14:7: C: Style/NumberedParameters: Avoid using numbered parameters.
      combined_counts ...
      ^^^^^^^^^^^^^^^
spec/support/shared_contexts/features/integrations/integrations_shared_context.rb:19:7: C: Style/NumberedParameters: Avoid using numbered parameters.
      integration_instance.fields.map { _1[:name].to_sym }
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/support/shared_contexts/features/integrations/integrations_shared_context.rb:24:7: C: Style/NumberedParameters: Avoid using numbered parameters.
      integration_instance.configurable_events.map { IntegrationsHelper.integration_event_field_name(_1).to_sym }
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/support/shared_contexts/lib/sbom/package_url_shared_contexts.rb:10:3: C: Style/NumberedParameters: Avoid using numbered parameters.
  test_cases.filter { _1.delete('is_invalid') == invalid }.each_with_object({}) do |test_case, memo|
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/support/shared_examples/integrations/integration_settings_form.rb:23:29: C: Style/NumberedParameters: Avoid using numbered parameters.
          api_only_fields = integration.fields.select { _1[:api_only] }
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/support/shared_examples/requests/api/hooks_shared_examples.rb:42:5: C: Style/NumberedParameters: Avoid using numbered parameters.
    event_names.to_h { [_1, true] }.merge(hook_param_overrides).merge(
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/support_specs/helpers/active_record/query_recorder_spec.rb:77:12: C: Style/NumberedParameters: Avoid using numbered parameters.
    expect(control.data.values.flat_map { _1[:durations] }).to match([be > 0, be > 0])
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

3️⃣ Disable rule

We don't care.

# bad
# none

# good
collection.each do
  puts _1
end

collection.each { puts _1 }

collection.each do |item|
end

Prior discussion

See gitlab-org/gitlab!108572 (comment 1236244629)

Check-list

  • Mention this proposal in the relevant Slack channels (e.g. #development, #backend, #frontend)
  • If there is a choice to make between potential styles, set up an emoji vote in the MR.
    • Vote yourself for all choices so that people know these are the choices
  • The MR doesn't have significant objections, and is getting a majority of 👍 vs 👎 (remember that we don't need to reach a consensus)
  • (If applicable) One style is getting a majority of vote (compared to the other choice)
  • (If applicable) Update the MR with the chosen style
  • Follow the review process as usual

/cc @gitlab-org/maintainers/rails-backend

Edited by Peter Leitzen

Merge request reports