Automatic Ruby code style checking tool. Aims to enforce the community-driven Ruby Style Guide.

Critical or Security advisories for 0.50.0

This version doesn't have any advisory. Want to report one?

Changelog for 0.50.0

New features

  • #4464: Add EnforcedStyleForEmptyBraces parameter to Layout/SpaceBeforeBlockBraces cop. ([@palkan][])
  • #4453: New cop Style/RedundantConditional checks for conditionals that return true/false. ([@petehamilton][])
  • #4448: Add new TapFormatter. ([@cyberdelia][])
  • Add new Style/HeredocDelimiters cop. ([@drenmi][])
  • #4153: New cop Lint/ReturnInVoidContext checks for the use of a return with a value in a context where it will be ignored. ([@harold-s][])
  • Add auto-correct support to Lint/ScriptPermission. ([@rrosenblum][])
  • #4514: Add configuration options to Style/YodaCondition to support checking all comparison operators or equality operators only. ([@smakagon][])
  • Add new Lint/BooleanSymbol cop. ([@droptheplot][])
  • Make Rails/PluralizationGrammar use singular methods for -1 / -1.0. ([@promisedlandt][])
  • #4541: Add new Rails/HasManyOrHasOneDependent cop. ([@oboxodo][])
  • Add new Style/Dir cop. ([@drenmi][])
  • Add new Style/HeredocDelimiterCase cop. ([@drenmi][])
  • #2943: Add new Lint/RescueWithoutErrorClass cop. ([@drenmi][])
  • #4568: Fix autocorrection for Style/TrailingUnderscoreVariable. ([@smakagon][])
  • #4586: Add new Performance/UnfreezeString cop. ([@pocke][])
  • #2976: Add Whitelist configuration option to Style/NestedParenthesizedCalls cop. ([@drenmi][])
  • #3965: Add new Style/DoublePipeEquals cop. ([@donjar][])
  • Make rake new_cop create parent directories if they do not already exist. ([@highb][])
  • #4368: Make Performance/HashEachMethod inspect send nodes with any receiver. ([@gohdaniel15][])
  • #4508: Add new Style/ReturnNil cop. ([@donjar][])
  • #4629: Add Metrics/MethodLength cop for define_method. ([@jekuta][])
  • #4702: Add new Lint/UriEscapeUnescape cop. ([@koic][])
  • #4696: Add new Performance/UriDefaultParser cop. ([@koic][])
  • #4694: Add new Lint/UriRegexp cop. ([@koic][])
  • Add new Style/MinMax cop. ([@drenmi][])
  • #4720: Add new Bundler/InsecureProtocolSource cop. ([@koic][])
  • #4708: Add new Lint/RedundantWithIndex cop`. ([@koic][])

Bug fixes

  • #4709: Use cached remote config on network failure. ([@kristjan][])
  • #4688: Accept yoda condition which isn't commutative. ([@fujimura][])
  • #4676: Make Style/RedundantConditional cop work with elsif. ([@akhramov][])
  • #4656: Modify Style/ConditionalAssignment autocorrection to work with unbracketed arrays. ([@akhramov][])
  • #4615: Don't consider <=> a comparison method. ([@iGEL][])
  • #4664: Fix typos in Rails/HttpPositionalArguments. ([@JoeCohen][])
  • #4618: Fix Lint/FormatParameterMismatch false positive if format string includes %%5B (CGI encoded left bracket). ([@barthez][])
  • #4604: Fix Style/LambdaCall to autocorrect to obj.. ([@iGEL][])
  • #4443: Prevent Style/YodaCondition from breaking not LITERAL. ([@pocke][])
  • #4434: Prevent bad auto-correct in Style/Alias for non-literal arguments. ([@drenmi][])
  • #4451: Make Style/AndOr cop aware of comparison methods. ([@drenmi][])
  • #4457: Fix false negative in Lint/Void with initialize and setter methods. ([@pocke][])
  • #4418: Register an offense in Style/ConditionalAssignment when the assignment line is the longest line, and it does not exceed the max line length. ([@rrosenblum][])
  • #4491: Prevent bad auto-correct in Style/EmptyElse for nested if. ([@pocke][])
  • #4485: Handle 304 status for remote config files. ([@daniloisr][])
  • #4529: Make Lint/UnreachableCode aware of if and case. ([@pocke][])
  • #4469: Include permissions in file cache. ([@pocke][])
  • #4270: Fix false positive in Performance/RegexpMatch for named captures. ([@pocke][])
  • #4525: Fix regexp for checking comment config of rubocop:disable all in Lint/UnneededDisable. ([@meganemura][])
  • #4555: Make Style/VariableName aware of optarg, kwarg and other arguments. ([@pocke][])
  • #4481: Prevent Style/WordArray and Style/SymbolArray from registering offenses where percent arrays don't work. ([@drenmi][])
  • #4447: Prevent Layout/EmptyLineBetweenDefs from removing too many lines. ([@drenmi][])
  • #3892: Make Style/NumericPredicate ignore numeric comparison of global variables. ([@drenmi][])
  • #4101: Skip auto-correct for literals with trailing comment and chained method call in Layout/Multiline*BraceLayout. ([@jonas054][])
  • #4518: Fix bug where Style/SafeNavigation does not register an offense when there are chained method calls. ([@rrosenblum][])
  • #3040: Ignore safe navigation in Rails/Delegate. ([@cgriego][])
  • #4587: Fix false negative for void unary operators in Lint/Void cop. ([@pocke][])
  • #4589: Fix false positive in Performance/RegexpMatch cop for =~ is in a class method. ([@pocke][])
  • #4578: Fix false positive in Lint/FormatParameterMismatch for format with "asterisk" (*) width and precision. ([@smakagon][])
  • #4285: Make Lint/DefEndAlignment aware of multiple modifiers. ([@drenmi][])
  • #4634: Handle heredoc that contains empty lines only in Layout/IndentHeredoc cop. ([@pocke][])
  • #4646: Make Lint/Debugger aware of Kernel and cbase. ([@pocke][])
  • #4643: Modify Style/InverseMethods to not register a separate offense for an inverse method nested inside of the block of an inverse method offense. ([@rrosenblum][])
  • #4593: Fix false positive in Rails/SaveBang when save/update_attribute is used with a case statement. ([@theRealNG][])
  • #4322: Fix Style/MultilineMemoization from autocorrecting to invalid ruby. ([@dpostorivo][])
  • #4722: Fix rake new_cop problem that doesn't add require line. ([@koic][])
  • #4723: Fix RaiseArgs auto-correction issue for raise with 3 arguments. ([@smakagon][])


  • #4470: Improve the error message for Lint/AssignmentInCondition. ([@brandonweiss][])
  • #4553: Add node_modules to default excludes. ([@iainbeeston][])
  • #4445: Make Style/Encoding cop enabled by default. ([@deivid-rodriguez][])
  • #4452: Add option to Rails/Delegate for enforcing the prefixed method name case. ([@klesse413][])
  • #4493: Make Lint/Void cop aware of Enumerable#each and for. ([@pocke][])
  • #4492: Make Lint/DuplicateMethods aware of alias and alias_method. ([@pocke][])
  • #4478: Fix confusing message of Performance/Caller cop. ([@pocke][])
  • #4543: Make Lint/DuplicateMethods aware of attr_* methods. ([@pocke][])
  • #4550: Mark RuboCop::CLI#run as a public API. ([@yujinakayama][])
  • #4551: Make Performance/Caller aware of caller_locations. ([@pocke][])
  • Rename Style/HeredocDelimiters to Style/HeredocDelimiterNaming. ([@drenmi][])
  • #4157: Enhance offense message for Style/RedudantReturn cop. ([@gohdaniel15][])
  • #4521: Move naming related cops into their own Naming department. ([@drenmi][])
  • #4600: Make Style/RedundantSelf aware of arguments of a block. ([@Envek][])
  • #4658: Disable auto-correction for Performance/TimesMap by default. ([@Envek][])

Dependencies for 0.50.0

Name Requirement Status
~> 1.10

< 3.0, >=

~> 0.1

< 3.0, >= 2.2.2

~> 1.7

>= 1.0.1, ~> 1.0

My projects using rubocop

Name Locked version Requirement
You should be logged in to see which of your projects use rubocop.