Skip to content

RSpec/SortMetadata autocorrect broke code for it_behaves_like #1435

@ShockwaveNN

Description

@ShockwaveNN
  1. Create sample rspec file like this:
# frozen_string_literal: true

RSpec.shared_examples 'some example' do |parameter1, parameter2|
  it 'uses the given parameter' do
    p "par1: #{parameter1}"
    p "par2: #{parameter2}"
    expect('a').to eq('a')
  end
end

describe 'enterprise' do
  it_behaves_like 'some example', 'b', 'a' do
    let(:obj) { 'b' }
  end
end
  1. run it and get output:
"par1: b"
"par2: a"
.

Finished in 0.00213 seconds (files took 0.08339 seconds to load)
1 example, 0 failures

  1. Run autocorrect for this: rubocop -A spec/test_spec.rb
    Result will be:
# frozen_string_literal: true

RSpec.shared_examples 'some example' do |parameter1, parameter2|
  it 'uses the given parameter' do
    p "par1: #{parameter1}"
    p "par2: #{parameter2}"
    expect('a').to eq('a')
  end
end

describe 'enterprise' do
  it_behaves_like 'some example', 'a', 'b' do
    let(:obj) { 'b' }
  end
end
  1. Run it again:
"par1: a"
"par2: b"
.

Finished in 0.00207 seconds (files took 0.08415 seconds to load)
1 example, 0 failures

So order of arguments is change and this may broke codebase

Env:

1.37.0 (using Parser 3.1.2.1, rubocop-ast 1.23.0, running on ruby 3.1.2) [x86_64-linux]
  - rubocop-performance 1.15.0
  - rubocop-rake 0.6.0
  - rubocop-rspec 2.14.1


Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions