Change log
master (unreleased)
1.27.0 (2026-08-16)
Bug fixes
*#532: Fix false negatives for Performance/ChainArrayAllocation when using flat_map, filter_map, and collect_concat. (@koic)
Changes
*#530: Speed up loading rubocop-performance by lazily loading only the cops needed for a run. This requires RuboCop 1.89.0+. (@koic)
1.26.1 (2025-10-18)
Bug fixes
*#517: Fix false positives for Performance/RedundantStringChars when using str.chars[0, 2]. (@koic)
Changes
*#520: Disable Performance/BigDecimalWithNumericArgument by default. (@earlopain)
1.26.0 (2025-09-06)
Bug fixes
*#444: Fix an incorrect autocorrect for Performance/BlockGivenWithExplicitBlock when using Naming/BlockForwarding's autocorrection together. (@a-lavis)
*#500: Mark Performance/MapCompact cop as unsafe. (@jbpextra)
*#498: Fix Performance/Count cop error on empty selector block. (@viralpraxis)
*#504: Fix autocorrection syntax error for Performance/Count with multiline calls. (@lovro-bikic)
Changes
*#512: Detect negated conditions like !foo.start_with('bar') && !foo.start_with('baz') with Performance/DoubleStartEndWith. (@earlopain)
1.25.0 (2025-04-01)
New features
*#496: Support it block parameter in Performance cops. (@koic)
Bug fixes
*#494: Fix Performance/FixedSize false positive when count is called with a numblock. (@dvandersluis)
*#492: Fix false positives for Performance/StringIdentifierArgument when using interpolated string argument. (@koic)
Changes
*#482: Change Performance/CollectionLiteralInLoop to not register offenses for Array#include? that are optimized directly in Ruby. (@earlopain)
1.24.0 (2025-02-16)
New features
*#490: Pluginfy RuboCop Performance. (@koic)
*#462: Add new Performance/ZipWithoutBlock cop that checks patterns like .map { |id| [id] } or .map { [_1] } and can replace them with .zip. (@corsonknowles)
Bug fixes
*#484: Fix Performance/CaseWhenSplat cop error on when node without body. (@viralpraxis)
1.23.1 (2025-01-04)
Bug fixes
*#478: Fix Performance/RedundantStringChars cop error in case of implicit receiver. (@viralpraxis)
*#480: Fix Performance/Squeeze cop error on frozen AST string node value. (@viralpraxis)
1.23.0 (2024-11-14)
New features
*#474: Add new Performance/StringBytesize cop. (@viralpraxis)
1.22.1 (2024-09-17)
Bug fixes
*#468: Fix false positives for Performance/BigDecimalWithNumericArgument when using float argument for BigDecimal. (@koic)
1.22.0 (2024-09-16)
Bug fixes
*#454: Fix false positives for Performance/BigDecimalWithNumericArgument when using BigDecimal 3.1+. (@koic)
Changes
*#385: Disable Performance/BlockGivenWithExplicitBlock by default. (@earlopain)
*#407: Make Performance/DoubleStartEndWith aware of safe navigation. (@earlopain)
1.21.1 (2024-06-16)
Bug fixes
*#452: Fix an error for Performance/RedundantEqualityComparisonBlock when the block is empty. (@earlopain)
1.21.0 (2024-03-30)
New features
*#446: Support Prism as a Ruby parser (experimental). (@koic)
Bug fixes
*#437: Fix a false positive for Performance/ChainArrayAllocation when using select with block argument after select. (@koic)
*#448: Fix a false positive for Performance/RedundantBlockCall when using block.call with block argument. (@koic)
Changes
*#240: Disable Performance/Casecmp cop by default. (@parkerfinch)
1.20.2 (2024-01-08)
Bug fixes
*#425: Fix a false positive for Performance/StringIdentifierArgument when using string interpolation with methods that don't support symbols with :: inside them. (@earlopain)
1.20.1 (2023-12-25)
Bug fixes
*#428: Fix false negatives for Performance/StringIdentifierArgument when using multiple string arguments. (@koic)
1.20.0 (2023-12-16)
New features
*#384: Support optimized String#dup for Performance/UnfreezeString when Ruby 3.3+. (@koic)
Bug fixes
*#374: Fix an error for Performance/MapMethodChain when using map method chain without receiver. (@koic)
*#386: Fix a false negative for Performance/StringIdentifierArgument when using string interpolation. (@earlopain)
*#419: Make Performance/Count, Performance/FixedSize, Performance/FlatMap, Performance/InefficientHashSearch, Performance/RangeInclude, Performance/RedundantSortBlock, Performance/ReverseFirst, Performance/SelectMap, Performance/Size, Performance/SortReverse, and Performance/TimesMap cops aware of safe navigation operator. (@koic)
*#390: Fix a false negative for Performance/ReverseEach when safe navigation is between reverse and each. (@fatkodima)
*#401: Make Performance/Sum aware of safe navigation operator. (@koic)
Changes
*#389: Improve Performance/MapCompact to handle more safe navigation calls. (@fatkodima)
*#395: Enhance Performance/StringInclude to handle === method. (@fatkodima)
*#388: Require RuboCop 1.30+ as runtime dependency. (@koic)
*#380: Require RuboCop AST 1.30.0+. (@koic)
1.19.1 (2023-09-17)
Bug fixes
*#367: Fix an incorrect autocorrect for Performance/BlockGivenWithExplicitBlock when using Lint/UnusedMethodArgument's autocorrection together. (@ymap)
*#370: Fix an incorrect autocorrect for Performance/RedundantMatch when expressions with lower precedence than =~ are used as an argument. (@ymap)
*#365: Fix false positives for Performance/ArraySemiInfiniteRangeSlice when using [] with string literals. (@koic)
*#373: Set target version for Performance/UnfreezeString. (@tagliala)
1.19.0 (2023-08-13)
New features
*#364: Add new Performance/MapMethodChain cop. (@koic)
*#363: Support safe navigation operator for Performance/ArraySemiInfiniteRangeSlice, Performance/DeletePrefix, Performance/DeleteSuffix, Performance/Detect, Performance/EndWith, Performance/InefficientHashSearch, Performance/MapCompact, Performance/RedundantSplitRegexpArgument, Performance/ReverseEach, Performance/ReverseFirst, Performance/SelectMap, Performance/Squeeze, Performance/StartWith, Performance/StringInclude, and Performance/StringReplacement cops. (@koic)
1.18.0 (2023-05-21)
Bug fixes
*#359: Fix a false positive for Performance/RedundantEqualityComparisonBlock when the block variable is used on both sides of ==. (@koic)
*#351: Fix an incorrect autocorrect for Performance/ConstantRegexp and Performance/RegexpMatch when autocorrecting both at the same time. (@fatkodima)
Changes
*#357: Add sort! and minmax to Performance/CompareWithBlock. (@vlad-pisanov)
*#353: (Breaking) Drop Ruby 2.6 support. (@koic)
1.17.1 (2023-04-09)
Bug fixes
*#352: Fix the default config for AllowRegexpMatch option of Performance/RedundantEqualityComparisonBlock. (@koic)
1.17.0 (2023-04-09)
New features
*#347: Add AllowRegexpMatch option to Performance/RedundantEqualityComparisonBlock. (@koic)
Bug fixes
*#346: Fix a false positive for Performance/StringIdentifierArgument when using a command method with receiver. (@koic)
*#344: Fix Performance/FlatMap autocorrection for chained methods on separate lines. (@fatkodima)
1.16.0 (2023-02-06)
Changes
*#332: Register offenses for variables against regexes in Performance/StringInclude. (@fatkodima)
1.15.2 (2022-12-25)
Bug fixes
*#313: Fix a false negative for Performance/RedundantStringChars when using str.chars.last without argument. (@koic)
*#321: Fix a false positive for Performance/Sum when using TargetRubyVersion is 2.3 or lower. (@koic)
*#314: Fix Performance/RegexpMatch to handle ::Regexp. (@fatkodima)
Changes
*#318: Extend Performance/StringInclude to handle !~. (@fatkodima)
1.15.1 (2022-11-16)
Bug fixes
*#309: Fix an error for Performance/MapCompact when using map(&:do_something).compact and there is a line break after map.compact and assigning with ||=. (@koic)
Changes
*#307: Support autocorrection even if reject is used on Performance/Count. (@r7kamura)
1.15.0 (2022-09-10)
New features
*#305: Support numbered parameter for Performance/RedundantSortBlock, Performance/SortReverse, and Performance/TimesMap cops. (@koic)
Bug fixes
*#299: Fix incorrect documentation URLs when using rubocop --show-docs-url. (@r7kamura)
Changes
*#297: Support autocorrection on Performance/RedundantMatch when receiver is a Regexp literal. (@r7kamura)
1.14.3 (2022-07-17)
Bug fixes
*#296: Fix a false negative for Performance/StringIdentifierArgument when using instance_variable_defined?. (@koic)
*#294: Fix a false negative for Performance/ChainArrayAllocation when using array.first(do_something).uniq. (@koic)
1.14.2 (2022-06-08)
Bug fixes
*#292: Fix a false positive for Performance/RegexpMatch when TargetRubyVersion: 2.3. (@koic)
1.14.1 (2022-06-05)
Bug fixes
*#291: Fix Performance/MapCompact autocorrect causing invalid syntax when using multiline map { ... }.compact as an argument for an assignment method. (@QQism)
1.14.0 (2022-05-24)
Bug fixes
*#289: Fix a false positive for Performance/StringIdentifierArgument when using namespaced class string argument. (@koic)
*#288: Recover Ruby 2.4 code analysis using TargetRubyVersion: 2.4. (@koic)
Changes
*#287: (Compatibility) Drop Ruby 2.5 support. (@koic)
1.13.3 (2022-03-05)
Bug fixes
*#285: Fix an error for Performance/MapCompact when using map(&:do_something).compact.first and there is a line break after map.compact and receiver. (@ydah)
1.13.2 (2022-01-16)
Bug fixes
*#281: Fix an error for Performance/BlockGivenWithExplicitBlock when using Ruby 3.1's anonymous block forwarding. (@koic)
1.13.1 (2022-01-01)
Bug fixes
*#278: Fix a false positive for Performance/StringIdentifierArgument when using attr. (@koic)
1.13.0 (2021-12-25)
New features
*#276: Add new Performance/StringIdentifierArgument cop. (@koic)
*#204: Add Performance/Sum option to ignore potential false positives. (@leoarnold)
*#269: Add #to_d support to BigDecimalWithNumericArgument. (@leoarnold)
Bug fixes
*#277: Fix an incorrect autocorrect for Performance/MapCompact when using map.compact.first and there is a line break after map.compact and receiver. (@koic)
*#273: Fix an incorrect autocorrect for Performance/RedundantStringChars when using str.chars. (@koic)
Changes
*#270: Mark Performance/Sum auto-correction as unsafe and extend documentation. (@leoarnold)
*#274: Unmark AutoCorrect: false from Performance/CaseWhenSplat. (@koic)
*#275: Unmark AutoCorrect: false from Performance/TimesMap. (@koic)
1.12.0 (2021-10-31)
New features
*#267: Add new Performance/ConcurrentMonotonicTime cop. (@koic)
Bug fixes
*#261: Fix a false negative for Performance/RedundantBlockCall when using block.call in a class method'. (@koic)
*#264: Fix error in Performance/Sum when method has no brackets. (@mvz)
Changes
*#263: Unmark AutoCorrect: false from Performance/StringInclude. (@koic)
1.11.5 (2021-08-18)
Bug fixes
*#255: Fix a false positive for Performance/RedundantEqualityComparisonBlock when using block argument is used for an argument of operand. (@koic)
*#257: Fix an incorrect auto-correct for Performance/MapCompact when using multi-line collection.map { ... }.compact as a method argument. (@koic)
1.11.4 (2021-07-07)
Bug fixes
*#247: Fix an incorrect auto-correct for Performance/MapCompact when using multi-line trailing dot method calls. (@koic)
*#249: Fix a false positive for Performance/RedundantStringChars when using str.chars.last and str.chars.drop. (@koic)
*#252: Fix an incorrect auto-correct for Performance/UnfreezeString when invoking a method after String.new with a string. (@koic)
Changes
*#245: Mark Performance/DeletePrefix and Performance/DeleteSuffix as unsafe. (@koic)
1.11.3 (2021-05-06)
Bug fixes
*#242: Fix an error for Performance/MapCompact when using multiline map { ... }.compact and assigning to return value. (@koic)
1.11.2 (2021-05-05)
Bug fixes
*#238: Fix an incorrect auto-correct for Performance/MapCompact when invoking a method after map { ... }.compact on the same line. (@koic)
1.11.1 (2021-05-02)
Bug fixes
*#236: Fix an incorrect auto-correct for Performance/MapCompact when using multi-line leading dot method calls. (@koic)
1.11.0 (2021-04-22)
New features
*#229: Add new Performance/MapCompact cop. (@koic)
*#178: Add new Performance/SelectMap cop. (@koic)
Bug fixes
*#230: Fix a false positive for Performance/ChainArrayAllocation when using Enumerable#lazy. (@koic)
Changes
*#228: Mark Performance/RedundantMerge as unsafe. (@dvandersluis)
*#232: (Compatibility) Drop Ruby 2.4 support. (@koic)
*#235: Require RuboCop 1.7 or higher. (@koic)
1.10.2 (2021-03-23)
Bug fixes
*#162: Fix a false positive for Performance/RedundantBlockCall when an optional block that is overridden by block variable. (@koic)
*#36: Fix a false positive for Performance/ReverseEach when each is called on reverse and using the result value. (@koic)
*#224: Fix a false positive for Style/RedundantEqualityComparisonBlock when using one argument with comma separator in block argument. (@koic)
*#225: Fix a false positive for Style/RedundantEqualityComparisonBlock when using any? with === comparison block and block argument is not used as a receiver for ===. (@koic)
*#222: Fix a false positive for Performance/RedundantSplitRegexpArgument when split method argument is exactly one space regexp / /. (@koic)
1.10.1 (2021-03-02)
Bug fixes
*#214: Fix a false positive for Performance/RedundantEqualityComparisonBlock when using multiple block arguments. (@koic)
*#216: Fix a false positive for Performance/RedundantSplitRegexpArgument when using split method with ignore case regexp option. (@koic)
*#217: Fix a false positive for Performance/RedundantEqualityComparisonBlock when using block argument is used for an argument of is_a. (@koic)
1.10.0 (2021-03-01)
New features
*#190: Add new Performance/RedundantSplitRegexpArgument cop. (@mfbmina)
*#213: Add new Performance/RedundantEqualityComparisonBlock cop. (@koic)
Bug fixes
*#207: Fix an error for Performance/Sum when using map(&do_something).sum without receiver. (@koic)
*#210: Fix a false negative for Performance/BindCall when receiver is not a method call. (@koic)
Changes
*#205: Update Performance/ConstantRegexp to allow memoized regexps. (@dvandersluis)
*#212: Enable unsafe auto-correct for Performance/StartWith and Performance/EndWith cops by default. (@koic)
1.9.2 (2021-01-01)
Bug fixes
*#201: Fix an incorrect auto-correct for Performance/ReverseEach when using multi-line reverse.each with leading dot. (@koic)
1.9.1 (2020-11-28)
Bug fixes
*#185: Fix incorrect replacement recommendation for Performance/ChainArrayAllocation. (@fatkodima)
Changes
*#197: Disable Performance/ArraySemiInfiniteRangeSlice cop. (@tejasbubane)
1.9.0 (2020-11-17)
New features
*#173: Add new Performance/BlockGivenWithExplicitBlock cop. (@fatkodima)
*#136: Add new Performance/MethodObjectAsBlock cop. (@fatkodima)
*#151: Add new Performance/ConstantRegexp cop. (@fatkodima)
*#175: Add new Performance/ArraySemiInfiniteRangeSlice cop. (@fatkodima)
*#189: Support auto-correction for Performance/Caller. (@koic)
*#171: Extend auto-correction support for Performance/Sum. (@koic)
*#194: Support auto-correction for Performance/UnfreezeString. (@koic)
Changes
*#181: Change default configuration for Performance/CollectionLiteralInLoop to Enabled: 'pending'. (@ghiculescu)
*#170: Extend Performance/Sum to register an offense for map { ... }.sum. (@eugeneius)
*#179: Change Performance/Sum to warn about empty arrays, and not register an offense on empty array literals. (@ghiculescu)
*#180: Require RuboCop 0.90 or higher. (@koic)
1.8.1 (2020-09-19)
Bug fixes
*#164: Fix an error for Performance/CollectionLiteralInLoop when a method from Enumerable is called with no receiver. (@eugeneius)
*#165: Fix a false positive for Performance/Sum when using initial value argument is a variable. (@koic)
Changes
*#163: Change Performance/Detect to also detect offenses when index 0 or -1 is used instead (ie. detect<a href='0'> ... </a>). (@dvandersluis)
*#168: Extend Performance/Sum to register an offense for inject(&:+). (@eugeneius)
1.8.0 (2020-09-04)
New features
*#140: Add new Performance/CollectionLiteralInLoop cop. (@fatkodima)
*#137: Add new Performance/Sum cop. (@fatkodima)
Bug fixes
*#159: Fix a false positive for Performance/AncestorsInclude when receiver is a variable. (@koic)
Changes
*#157: Extend Performance/Detect cop with check for filter method and Performance/Count cop with checks for find_all and filter methods. (@fatkodima)
*#154: Require RuboCop 0.87 or higher. (@koic)
1.7.1 (2020-07-18)
Bug fixes
*#147: Fix an error for Performance/AncestorsInclude when using ancestors.include? without receiver. (@koic)
*#150: Fix an incorrect autocorrect for Performance/BigDecimalWithNumericArgument when a precision is specified. (@eugeneius)
Changes
*#149: Mark Performance/AncestorsInclude as unsafe. (@eugeneius)
*#145: Mark Performance/StringInclude as SafeAutocorrect: false and disable autocorrect by default. (@koic)
1.7.0 (2020-07-07)
New features
*#141: Add new Performance/RedundantStringChars cop. (@fatkodima)
*#127: Add new Performance/IoReadlines cop. (@fatkodima)
*#128: Add new Performance/ReverseFirst cop. (@fatkodima)
*#132: Add new Performance/RedundantSortBlock cop. (@fatkodima)
*#125: Support Array() and Hash() methods for Performance/Size cop. (@fatkodima)
*#124: Add new Performance/Squeeze cop. (@fatkodima)
*#129: Add new Performance/BigDecimalWithNumericArgument cop. (@fatkodima)
*#130: Add new Performance/SortReverse cop. (@fatkodima)
*#81: Add new Performance/StringInclude cop. (@fatkodima)
*#123: Add new Performance/AncestorsInclude cop. (@fatkodima)
*#125: Support Range#member? method for Performance/RangeInclude cop. (@fatkodima)
Changes
*#138: Drop support for RuboCop 0.81 or lower. (@koic)
1.6.1 (2020-06-05)
New features
*#115: Support String#sub and String#sub! methods for Performance/DeletePrefix and Performance/DeleteSuffix cops. (@fatkodima)
Bug fixes
*#111: Fix an error for Performance/DeletePrefix and Performance/DeleteSuffix cops when using autocorrection with RuboCop 0.81 or lower. (@koic)
*#118: Fix a false positive for Performance/DeletePrefix, Performance/DeleteSuffix, Performance/StartWith, and Performance/EndWith cops when receiver is multiline string. (@koic)
1.6.0 (2020-05-22)
New features
*#77: Add new Performance/BindCall cop. (@koic)
*#105: Add new Performance/DeletePrefix and Performance/DeleteSuffix cops. (@koic)
*#107: Support regexp metacharacter ^ for Performance/StartWith cop and regexp metacharacter $ for Performance/EndWith cop. (@koic)
Bug fixes
*#55: Fix an incorrect autocorrect for Performance/RegexpMatch when using str.=~(/regexp/). (@koic)
*#108: Fix an incorrect autocorrect for Performance/ReverseEach when there is a newline between reverse and each. (@joe-sharp, @dischorde, @siegfault)
Changes
*#103: (Compatibility) Drop support for Ruby 2.3. (@koic)
*#101: Mark unsafe for Performance/Casecmp cop. (@koic)
1.5.2 (2019-12-25)
Bug fixes
*#86: Fix an incorrect autocorrect for Performance/RedundantMerge when using an empty hash argument. (@koic)
1.5.1 (2019-11-14)
Bug fixes
*#82: Let Performance/StartWith and Performance/EndWith correct Regexp#match? and Regexp#=~. (@eugeneius)
1.5.0 (2019-10-01)
Bug fixes
*#74: Fix an error for Performance/RedundantMerge when MaxKeyValuePairs option is set to null. (@koic)
*#70: This PR fixes a false negative for Performance/FlatMap when using symbol to proc operator argument of map method. (@koic, @splattael)
Changes
*#69: Remove SafeMode from Performance/Count and Performance/Detect. Set SafeAutoCorrect to false for these cops by default. (@rrosenblum)
1.4.1 (2019-07-29)
Bug fixes
*#67: Fix an error for Performance/RedundantMerge when MaxKeyValuePairs option is set to null. (@koic)
*#73: Fix a false negative for Performance/RegexpMatch when MatchData is not detected in if branch of guard condition. (@koic)
1.4.0 (2019-06-20)
Bug fixes
*#54: Fix Performance/FixedSize to accept const assign with some operation. (@tejasbubane)
*#61: Fix a false negative for Performance/RegexpMatch when using RuboCop 0.71 or higher. (@koic)
1.3.0 (2019-05-13)
Bug fixes
*#48: Reduce Performance/RegexpMatch false positive by only flagging match used with Regexp/String/Symbol literals. (@dduugg)
Changes
*#52: (Compatibility) Drop support for Ruby 2.2. (@bquorning)
1.2.0 (2019-05-04)
Bug fixes
*#47: Fix a false negative for Performance/RegexpMatch when using RuboCop 0.68 or higher. (@koic)
1.1.0 (2019-04-08)
Changes
*#39: Remove Performance/LstripRstrip cop. (@koic)
*#39: Remove Performance/RedundantSortBy, Performance/UnneededSort and Performance/Sample cops. (@koic)
1.0.0 (2019-03-14)
New features
- Extract performance cops from rubocop/rubocop repository. (@composerinteralia, @koic)