mirror of
https://github.com/dense-analysis/ale.git
synced 2025-12-06 12:44:23 +08:00
* Add --editor-mode flag when invoking rubocop Since RuboCop 1.61.0 (released in February 2024), RuboCop accepts an `--editor-mode` flag which improves editor integrations like ale. Some of RuboCop's auto-corrections can be surprising or annoying to run on save. When RuboCop is running via an LSP or when the `--editor-mode` flag is passed, it will understand that it is running in an editor, and it will hold off on making changes that might be surprising or annoying. For example, if I write ```ruby def call results = some_process end ``` This has an unused variable, and RuboCop will remove the unused variable when you run it. However, if you're in the middle of editing, you may not want it to remove that unused variable, because you may be about to add a usage of it. More context: - PR which introduced it: https://github.com/rubocop/rubocop/pull/12682 - Release notes for 1.61: https://github.com/rubocop/rubocop/releases/tag/v1.61.0 - Docs: https://docs.rubocop.org/rubocop/1.80/configuration.html#contextual This will be a breaking change for anyone who is running an old version of RuboCop, because the flag will not exist for them. If they would like to opt out of this change, they can set an option to omit the flag. I think this ought to be enabled by default so that people will get this benefit out of the box. In the meantime, I am opting into this behavior by setting this option: ```vim let g:ale_ruby_rubocop_options = "--editor-mode" ``` So I appreciate that this seam was already introduced. * Make this a non-breaking change This will detect the current rubocop version and auto-enable --editor-mode for newer version of rubocop without affecting users of older versions of rubocop.
97 lines
2.8 KiB
Plaintext
97 lines
2.8 KiB
Plaintext
Before:
|
|
call ale#assert#SetUpFixerTest('ruby', 'rubocop')
|
|
|
|
After:
|
|
call ale#assert#TearDownFixerTest()
|
|
|
|
Execute(The rubocop callback should return the correct default values):
|
|
call ale#test#SetFilename('../test-files/ruby/dummy.rb')
|
|
|
|
GivenCommandOutput ['1.61.0']
|
|
|
|
AssertFixer
|
|
\ {
|
|
\ 'process_with': 'ale#fixers#rubocop#PostProcess',
|
|
\ 'command': ale#Escape(g:ale_ruby_rubocop_executable)
|
|
\ . ' --auto-correct --editor-mode --force-exclusion --stdin %s',
|
|
\ }
|
|
|
|
Execute(The rubocop callback should include custom rubocop options):
|
|
let g:ale_ruby_rubocop_options = '--except Lint/Debugger'
|
|
call ale#test#SetFilename('../test-files/ruby/with_config/dummy.rb')
|
|
|
|
GivenCommandOutput ['1.61.0']
|
|
|
|
AssertFixer
|
|
\ {
|
|
\ 'process_with': 'ale#fixers#rubocop#PostProcess',
|
|
\ 'command': ale#Escape(g:ale_ruby_rubocop_executable)
|
|
\ . ' --except Lint/Debugger'
|
|
\ . ' --auto-correct --editor-mode --force-exclusion --stdin %s',
|
|
\ }
|
|
|
|
Execute(The rubocop callback should use auto-correct-all option when set):
|
|
let g:ale_ruby_rubocop_auto_correct_all = 1
|
|
call ale#test#SetFilename('../test-files/ruby/with_config/dummy.rb')
|
|
|
|
GivenCommandOutput ['1.61.0']
|
|
|
|
AssertFixer
|
|
\ {
|
|
\ 'process_with': 'ale#fixers#rubocop#PostProcess',
|
|
\ 'command': ale#Escape(g:ale_ruby_rubocop_executable)
|
|
\ . ' --auto-correct-all --editor-mode --force-exclusion --stdin %s'
|
|
\ }
|
|
|
|
Execute(The rubocop post-processor should remove diagnostics content):
|
|
AssertEqual
|
|
\ [
|
|
\ 'class MyModel < ApplicationRecord',
|
|
\ ' # rubocop:disable Rails/InverseOf',
|
|
\ ' has_one :something',
|
|
\ ' # rubocop:enable Rails/InverseOf',
|
|
\ 'end',
|
|
\ '',
|
|
\ 'array = [1, 2, 3,',
|
|
\ ' 4, 5, 6]',
|
|
\ 'array = [''run'',',
|
|
\ ' ''forrest'',',
|
|
\ ' ''run'']',
|
|
\ ],
|
|
\ ale#fixers#rubocop#PostProcess(bufnr(''), [
|
|
\ 'Inspecting 1 file',
|
|
\ 'C',
|
|
\ '',
|
|
\ 'Offenses:',
|
|
\ 'app/models/my_model.rb:8:3: C: [Corrected] Layout/ArrayAlignment: ',
|
|
\ '4, 5, 6]',
|
|
\ '^',
|
|
\ '',
|
|
\ '1 file inspected, 3 offenses detected, 3 offenses corrected',
|
|
\ '====================',
|
|
\ 'class MyModel < ApplicationRecord',
|
|
\ ' # rubocop:disable Rails/InverseOf',
|
|
\ ' has_one :something',
|
|
\ ' # rubocop:enable Rails/InverseOf',
|
|
\ 'end',
|
|
\ '',
|
|
\ 'array = [1, 2, 3,',
|
|
\ ' 4, 5, 6]',
|
|
\ 'array = [''run'',',
|
|
\ ' ''forrest'',',
|
|
\ ' ''run'']',
|
|
\ ])
|
|
|
|
Execute(The rubocop callback should not use editor-mode option with older versions):
|
|
call ale#test#SetFilename('../test-files/ruby/with_config/dummy.rb')
|
|
|
|
GivenCommandOutput ['1.59.0']
|
|
|
|
AssertFixer
|
|
\ {
|
|
\ 'process_with': 'ale#fixers#rubocop#PostProcess',
|
|
\ 'command': ale#Escape(g:ale_ruby_rubocop_executable)
|
|
\ . ' --auto-correct --force-exclusion --stdin %s'
|
|
\ }
|
|
|