Resolve auto-correctable RuboCop offenses (Exclude-only) in .rubocop_todo/**/*.yml
Everyone can contribute. Help move this issue forward while earning points, leveling up and collecting rewards.
❗ COMMUNITY CONTRIBUTORS, PLEASE ONLY PICKUP ONE COP VIOLATION TO ALLOW OTHER NEW CONTRIBUTORS TO LEARN FROM THESE TOO ❗
Problem
.rubocop_todo/**/*.yml
contains auto-correctable grep -hr auto-correct .rubocop_todo -A 1 | grep "^[A-Z]"
) which can be fixed automatically.
Implementation guide
Resolve auto-correctable rules which are enabled by letting RuboCop auto-correct them automatically
- Verify that the
you are working on is already enabled. See also #369268 (closed) - Pick a
offense from The List below e.g. Layout/ClosingHeredocIndentation
- Create a branch (e.g.
239356-abc/fix-Layout/ClosingHeredocIndentation
)- Info: Using this issue ID (
239356
) in a branch name will add required labels and reference to this issue in the new merge request. - Info: Using your username or initials (e.g.
abc/
above) in the branch name will help to prevent branch naming clashes with other contributors also working on this issue.
- Info: Using this issue ID (
- Delete the rule from the corresponding
.rubocop_todo/
YAML file (for example https://gitlab.com/gitlab-org/gitlab/-/blob/fdeea9247566ca45fece68605a838ebc659b62db/.rubocop_todo/gitlab/rails/safe_format.yml) - Auto-correct RuboCop offenses via e.g.
bundle exec rubocop --autocorrect --only Layout/ClosingHeredocIndentation
- Check changed files and adjust if needed
- Suggestion: In order to keep MRs short one can fix 10-15 files in one go. Depending on the amount of changes in the file.
- Commit and create a merge request
- Hint: You can use
Fix <Cop/Name> offenses
as git commit message - Info: Community contributions can use git trailer
Changelog: other
so they are attributed inCHANGELOG.md
- Hint: You can use
- Mention this merge request in this issue
🎉
The List
-
FactoryBot/CreateList
(0 entries) Chart -
Gemspec/DeprecatedAttributeAssignment
(0 entries) Chart -
Gitlab/DocumentationLinks/Link
(0 entries) Chart -
Gitlab/FeatureFlagKeyDynamic
(31 entries) Chart -
Gitlab/Rails/AttrEncrypted
(54 entries) Chart -
Gitlab/Rails/SafeFormat
(6 entries) Chart -
Gitlab/StrongMemoizeAttr
(554 entries) Chart -
GraphQL/FieldDefinitions
(0 entries) Chart -
GraphQL/FieldHashKey
(0 entries) Chart -
GraphQL/FieldMethod
(0 entries) Chart -
GraphQL/OrderedFields
(0 entries) Chart -
GraphQL/UnnecessaryFieldAlias
(0 entries) Chart -
GraphQL/UnusedArgument
(0 entries) Chart -
Graphql/Descriptions
(0 entries) Chart -
Graphql/ResourceNotAvailableError
(9 entries) Chart -
InternalAffairs/CopDescriptionWithExample
(155 entries) Chart -
InternalAffairs/ExampleHeredocDelimiter
(57 entries) Chart -
InternalAffairs/LocationExpression
(21 entries) Chart -
InternalAffairs/NodeMatcherDirective
(89 entries) Chart -
InternalAffairs/NodeTypeMultiplePredicates
(5 entries) Chart -
InternalAffairs/NodeTypePredicate
(16 entries) Chart -
InternalAffairs/RedundantExpectOffenseArguments
(2 entries) Chart -
InternalAffairs/RedundantMessageArgument
(14 entries) Chart -
InternalAffairs/RedundantSourceRange
(10 entries) Chart -
Layout/ArgumentAlignment
(0 entries) Chart -
Layout/ArrayAlignment
(195 entries) Chart -
Layout/ClassStructure
(429 entries) Chart -
Layout/ClosingParenthesisIndentation
(0 entries) Chart -
Layout/EmptyLineAfterMagicComment
(593 entries) Chart -
Layout/EmptyLinesAroundMethodBody
(23 entries) Chart -
Layout/ExtraSpacing
(0 entries) Chart -
Layout/FirstArgumentIndentation
(0 entries) Chart -
Layout/FirstArrayElementIndentation
(0 entries) Chart -
Layout/FirstHashElementIndentation
(0 entries) Chart -
Layout/HashAlignment
(0 entries) Chart -
Layout/LeadingCommentSpace
(0 entries) Chart -
Layout/LeadingEmptyLines
(0 entries) Chart -
Layout/LineBreakAfterFinalMixin
(32 entries) Chart -
Layout/LineContinuationLeadingSpace
(0 entries) Chart -
Layout/LineContinuationSpacing
(149 entries) Chart -
Layout/LineEndStringConcatenationIndentation
(603 entries) Chart -
Layout/LineLength
(4176 entries) Chart -
Layout/MultilineOperationIndentation
(0 entries) Chart -
Layout/ParameterAlignment
(0 entries) Chart -
Layout/SpaceBeforeBlockBraces
(0 entries) Chart -
Layout/SpaceInLambdaLiteral
(0 entries) Chart -
Layout/SpaceInsideBlockBraces
(0 entries) Chart -
Layout/SpaceInsideParens
(0 entries) Chart -
Layout/SpaceInsidePercentLiteralDelimiters
(0 entries) Chart -
Layout/TrailingEmptyLines
(0 entries) Chart -
Layout/TrailingWhitespace
(1 entries) Chart -
Lint/AmbiguousOperatorPrecedence
(0 entries) Chart -
Lint/AmbiguousRange
(0 entries) Chart -
Lint/AmbiguousRegexpLiteral
(0 entries) Chart -
Lint/AssignmentInCondition
(209 entries) Chart -
Lint/DeprecatedConstants
(0 entries) Chart -
Lint/DuplicateRegexpCharacterClassElement
(0 entries) Chart -
Lint/ImplicitStringConcatenation
(0 entries) Chart -
Lint/IncompatibleIoSelectWithFiberScheduler
(0 entries) Chart -
Lint/NonAtomicFileOperation
(0 entries) Chart -
Lint/OrAssignmentToConstant
(0 entries) Chart -
Lint/RedundantCopDisableDirective
(0 entries) Chart -
Lint/RedundantDirGlobSort
(0 entries) Chart -
Lint/RedundantSafeNavigation
(0 entries) Chart -
Lint/RedundantStringCoercion
(0 entries) Chart -
Lint/SafeNavigationConsistency
(0 entries) Chart -
Lint/SymbolConversion
(84 entries) Chart -
Lint/UnusedBlockArgument
(354 entries) Chart -
Lint/UnusedMethodArgument
(515 entries) Chart -
Lint/UselessAssignment
(0 entries) Chart -
Lint/UselessNumericOperation
(0 entries) Chart -
Lint/Void
(1 entries) Chart -
Naming/HeredocDelimiterCase
(0 entries) Chart -
Naming/InclusiveLanguage
(51 entries) Chart -
Performance/FlatMap
(0 entries) Chart -
Performance/MapCompact
(100 entries) Chart -
Performance/RegexpMatch
(0 entries) Chart -
Performance/StringIdentifierArgument
(212 entries) Chart -
Performance/StringInclude
(0 entries) Chart -
Performance/StringReplacement
(0 entries) Chart -
RSpec/AnyInstanceOf
(317 entries) Chart -
RSpec/BeEmpty
(0 entries) Chart -
RSpec/BeEq
(1474 entries) Chart -
RSpec/BeNil
(0 entries) Chart -
RSpec/BeforeAll
(0 entries) Chart -
RSpec/ChangeByZero
(39 entries) Chart -
RSpec/ContainExactly
(195 entries) Chart -
RSpec/DescribedClass
(0 entries) Chart -
RSpec/Dialect
(33 entries) Chart -
RSpec/EmptyLineAfterHook
(0 entries) Chart -
RSpec/EnvMocking
(0 entries) Chart -
RSpec/Eq
(0 entries) Chart -
RSpec/ExampleWording
(67 entries) Chart -
RSpec/ExcessiveDocstringSpacing
(78 entries) Chart -
RSpec/ExpectChange
(322 entries) Chart -
RSpec/HooksBeforeExamples
(0 entries) Chart -
RSpec/IsExpectedSpecify
(0 entries) Chart -
RSpec/MetadataStyle
(0 entries) Chart -
RSpec/ReceiveMessages
(556 entries) Chart -
RSpec/RedundantAround
(0 entries) Chart -
RSpec/RedundantPredicateMatcher
(13 entries) Chart -
RSpec/ReturnFromStub
(184 entries) Chart -
RSpec/ScatteredLet
(213 entries) Chart -
RSpec/SpecifyExpected
(10 entries) Chart -
RSpec/VerifiedDoubleReference
(242 entries) Chart -
Rails/Date
(212 entries) Chart -
Rails/EnumHash
(0 entries) Chart -
Rails/EnumSyntax
(0 entries) Chart -
Rails/FilePath
(106 entries) Chart -
Rails/FindEach
(17 entries) Chart -
Rails/NegateInclude
(0 entries) Chart -
Rails/Pluck
(236 entries) Chart -
Rails/PluralizationGrammar
(0 entries) Chart -
Rails/RedundantForeignKey
(49 entries) Chart -
Rails/StrongParams
(290 entries) Chart -
Rails/TimeZone
(72 entries) Chart -
Rails/WhereRange
(78 entries) Chart -
Style/AccessorGrouping
(59 entries) Chart -
Style/ArgumentsForwarding
(4 entries) Chart -
Style/BlockDelimiters
(42 entries) Chart -
Style/ClassAndModuleChildren
(490 entries) Chart -
Style/CombinableLoops
(0 entries) Chart -
Style/EmptyElse
(18 entries) Chart -
Style/EmptyLiteral
(0 entries) Chart -
Style/EmptyMethod
(0 entries) Chart -
Style/EndlessMethod
(26 entries) Chart -
Style/ExplicitBlockArgument
(0 entries) Chart -
Style/FloatDivision
(0 entries) Chart -
Style/FormatString
(201 entries) Chart -
Style/FrozenStringLiteralComment
(0 entries) Chart -
Style/GuardClause
(492 entries) Chart -
Style/HashAsLastArrayItem
(0 entries) Chart -
Style/HashEachMethods
(120 entries) Chart -
Style/IfUnlessModifier
(728 entries) Chart -
Style/Iso8601Date
(0 entries) Chart -
Style/KeywordParametersOrder
(0 entries) - !148567 (merged) Chart -
Style/Lambda
(0 entries) Chart -
Style/MapIntoArray
(16 entries) Chart -
Style/MutableConstant
(29 entries) Chart -
Style/NumericLiteralPrefix
(48 entries) Chart -
Style/RedundantInterpolation
(0 entries) Chart -
Style/RedundantInterpolationUnfreeze
(0 entries) Chart -
Style/RedundantParentheses
(31 entries) Chart -
Style/RedundantRegexpEscape
(39 entries) Chart -
Style/RedundantReturn
(43 entries) Chart -
Style/RedundantSelf
(321 entries) Chart -
Style/SelfAssignment
(0 entries) Chart -
Style/SendWithLiteralMethodName
(0 entries) Chart -
Style/SingleArgumentDig
(0 entries) Chart -
Style/SoleNestedConditional
(37 entries) Chart -
Style/StringConcatenation
(232 entries) Chart -
Style/StringLiteralsInInterpolation
(0 entries) Chart -
Style/SuperArguments
(170 entries) Chart -
Style/SymbolProc
(170 entries) Chart
How to regenerate the list?
- Copy+paste the Script from below
👇 as save asregenerate.rb
- Copy the The List from above
☝️ in Markdown format - Run
regenerate.rb
- Paste the copied list from above
☝️ and terminate input withCtrl-D
- Copy+paste the newly generated list in the The List section
Script
script
#!/usr/bin/env ruby
# frozen_string_literal: true
# From https://gitlab.com/gitlab-org/gitlab/-/issues/239356#the-list
require "yaml"
BURNDOWN_CHART_URL = "https://ck3g.gitlab.io/rubocop-burndown/"
sha = `git rev-parse HEAD`.chomp
template = <<~MD
- [ ] [`%{rule_name}`](https://gitlab.com/gitlab-org/gitlab/-/blob/#{sha}/%{path}) (%{entries} entries) [Chart](#{BURNDOWN_CHART_URL}#%{rule_name})
MD
warn "Paste the markdown bullet point list from https://gitlab.com/gitlab-org/gitlab/-/issues/239356: (Terminate with Ctrl-D)"
current = $stdin.readlines.to_h { |line| [line[/`(\S+)`/, 1], line] } # rubocop:disable Rails/IndexBy
puts "Received #{current.keys.count} lines\n\n"
todos = Dir.glob(".rubocop_todo/**/*.yml").to_h do |path|
next [nil, []] unless /^# Cop supports --auto-?correct/.match?(File.read(path))
yaml = YAML.safe_load_file(path)
name, config = yaml.first
entries = config.fetch('Exclude', []) || []
[name, [path, entries.size]]
end
todos.delete(nil)
(current.keys | todos.keys).uniq.sort.each do |name|
path, entries = todos[name]
current_line = current[name]
if current_line && !path
current_line.sub!('- [ ]', '- [x]')
current_line.sub!(/\d+ entries/, '0 entries')
current_line.chomp!
current_line += " [Chart](#{BURNDOWN_CHART_URL}##{name})"
puts current_line
elsif path
puts format(template, rule_name: name, path: path, entries: entries)
end
end
Edited by Vitali Tatarintev