Skip to content

Commit

Permalink
Fix a false positive for Style/RegexpLiteral
Browse files Browse the repository at this point in the history
This PR fixes the following false positive for `Style/RegexpLiteral`
when using a regexp starts with a blank as a method argument.

```console
% cat example.rb
do_something %r| regexp|

% bundle exec rubocop --only Style/RegexpLiteral -a
(snip)

Offenses:

example.rb:1:14: C: [Corrected] Style/RegexpLiteral: Use // around regular expression.
do_something %r| regexp|
             ^^^^^^^^^^^

1 file inspected, 1 offense detected, 1 offense corrected

% cat example.rb
do_something / regexp/

% ruby -c example.rb
example.rb:1: syntax error, unexpected end-of-input
```
  • Loading branch information
koic committed Jun 16, 2021
1 parent eba9ab8 commit 0400bba
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 2 deletions.
1 change: 1 addition & 0 deletions changelog/fix_a_false_positive_for_style_regexp_literal.md
@@ -0,0 +1 @@
* [#9880](https://github.com/rubocop/rubocop/pull/9880): Fix a false positive for `Style/RegexpLiteral` when using a regexp starts with a blank as a method argument. ([@koic][])
5 changes: 3 additions & 2 deletions lib/rubocop/cop/style/regexp_literal.rb
Expand Up @@ -117,7 +117,7 @@ def allowed_mixed_slash?(node)
def allowed_percent_r_literal?(node)
style == :slashes && contains_disallowed_slash?(node) ||
style == :percent_r ||
allowed_mixed_percent_r?(node) || omit_parentheses_style?(node)
allowed_mixed_percent_r?(node) || allowed_omit_parentheses_with_percent_r_literal?(node)
end

def allowed_mixed_percent_r?(node)
Expand Down Expand Up @@ -149,8 +149,9 @@ def preferred_delimiters
config.for_cop('Style/PercentLiteralDelimiters') ['PreferredDelimiters']['%r'].chars
end

def omit_parentheses_style?(node)
def allowed_omit_parentheses_with_percent_r_literal?(node)
return false unless node.parent&.call_type?
return true if node.content.start_with?(' ')

enforced_style = config.for_cop('Style/MethodCallWithArgsParentheses')['EnforcedStyle']

Expand Down
38 changes: 38 additions & 0 deletions spec/rubocop/cop/style/regexp_literal_spec.rb
Expand Up @@ -518,6 +518,25 @@
^^^^^^^^^^ Use `//` around regular expression.
RUBY
end

it 'does not register an offense when using a regexp starts with a blank as a method argument' do
expect_no_offenses(<<~RUBY)
do_something %r/ regexp/
RUBY
end

it 'does not register an offense when using a regexp starts with a blank as a safe navigation method argument' do
expect_no_offenses(<<~RUBY)
foo&.do_something %r/ regexp/
RUBY
end

it 'registers an offense when using a regexp starts with a blank' do
expect_offense(<<~RUBY)
%r/ regexp/
^^^^^^^^^^^ Use `//` around regular expression.
RUBY
end
end

context 'when using `%r` regexp with `EnforcedStyle: mixed`' do
Expand All @@ -543,6 +562,25 @@
^^^^^^^^^^ Use `//` around regular expression.
RUBY
end

it 'does not register an offense when using a regexp starts with a blank as a method argument' do
expect_no_offenses(<<~RUBY)
do_something %r/ regexp/
RUBY
end

it 'does not register an offense when using a regexp starts with a blank as a safe navigation method argument' do
expect_no_offenses(<<~RUBY)
foo&.do_something %r/ regexp/
RUBY
end

it 'registers an offense when using a regexp starts with a blank' do
expect_offense(<<~RUBY)
%r/ regexp/
^^^^^^^^^^^ Use `//` around regular expression.
RUBY
end
end
end

Expand Down

0 comments on commit 0400bba

Please sign in to comment.