From e424be03c6245f29f443dec647c4d10fbd3c1d4c Mon Sep 17 00:00:00 2001 From: Earlopain <14981592+Earlopain@users.noreply.github.com> Date: Fri, 8 Mar 2024 16:23:32 +0100 Subject: [PATCH] Improve error message when passing wrong `parser_engine` and accept strings --- lib/rubocop/ast/processed_source.rb | 5 +++-- spec/rubocop/ast/processed_source_spec.rb | 23 +++++++++++++++++------ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/lib/rubocop/ast/processed_source.rb b/lib/rubocop/ast/processed_source.rb index fb18c0310..116f40c56 100644 --- a/lib/rubocop/ast/processed_source.rb +++ b/lib/rubocop/ast/processed_source.rb @@ -27,9 +27,10 @@ def self.from_file(path, ruby_version, parser_engine: :parser_whitequark) end def initialize(source, ruby_version, path = nil, parser_engine: :parser_whitequark) + parser_engine = parser_engine.to_sym unless PARSER_ENGINES.include?(parser_engine) - raise ArgumentError, 'The keyword argument `parser_engine` accepts ' \ - "`parser` or `parser_prism`, but `#{parser_engine}` was passed." + raise ArgumentError, 'The keyword argument `parser_engine` accepts `parser_whitequark` ' \ + "or `parser_prism`, but `#{parser_engine}` was passed." end # Defaults source encoding to UTF-8, regardless of the encoding it has diff --git a/spec/rubocop/ast/processed_source_spec.rb b/spec/rubocop/ast/processed_source_spec.rb index 00780b220..cd0e1d4ac 100644 --- a/spec/rubocop/ast/processed_source_spec.rb +++ b/spec/rubocop/ast/processed_source_spec.rb @@ -28,16 +28,27 @@ def some_method end end - context 'when using invalid `parser_engine` argument' do - let(:parser_engine) { :unknown_parser_engine } - - it 'raises a Errno::ENOENT when the file does not exist' do + shared_examples 'invalid parser_engine' do + it 'raises ArgumentError' do expect { processed_source }.to raise_error(ArgumentError) do |e| - expect(e.message).to eq 'The keyword argument `parser_engine` accepts `parser` or ' \ - '`parser_prism`, but `unknown_parser_engine` was passed.' + expected = 'The keyword argument `parser_engine` accepts `parser_whitequark` ' \ + "or `parser_prism`, but `#{parser_engine}` was passed." + expect(e.message).to eq(expected) end end end + + context 'when using an invalid `parser_engine` symbol argument' do + let(:parser_engine) { :unknown_parser_engine } + + it_behaves_like 'invalid parser_engine' + end + + context 'when using an invalid `parser_engine` string argument' do + let(:parser_engine) { 'unknown_parser_engine' } + + it_behaves_like 'invalid parser_engine' + end end describe '.from_file' do