From 16a4012c1add42673dfedf57058397adb325d60c Mon Sep 17 00:00:00 2001 From: Earlopain <14981592+Earlopain@users.noreply.github.com> Date: Mon, 29 Apr 2024 14:48:23 +0200 Subject: [PATCH] Handle encoding error from the parser gem This specific exception has been added only in the most recent release. Previously it threw an `ArgumentError`. --- changelog/.gitkeep | 0 changelog/fix_error_for_magic_encoding_comment.md | 1 + lib/rubocop/ast/processed_source.rb | 2 +- rubocop-ast.gemspec | 2 +- spec/rubocop/ast/processed_source_spec.rb | 10 ++++++++++ 5 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 changelog/.gitkeep create mode 100644 changelog/fix_error_for_magic_encoding_comment.md diff --git a/changelog/.gitkeep b/changelog/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/changelog/fix_error_for_magic_encoding_comment.md b/changelog/fix_error_for_magic_encoding_comment.md new file mode 100644 index 000000000..30b77de39 --- /dev/null +++ b/changelog/fix_error_for_magic_encoding_comment.md @@ -0,0 +1 @@ +* [#289](https://github.com/rubocop/rubocop-ast/pull/289): Fix an error during parsing when encountering unknown encodings in the encoding magic comment. ([@Earlopain][]) diff --git a/lib/rubocop/ast/processed_source.rb b/lib/rubocop/ast/processed_source.rb index 116f40c56..2100ae800 100644 --- a/lib/rubocop/ast/processed_source.rb +++ b/lib/rubocop/ast/processed_source.rb @@ -209,7 +209,7 @@ def parse(source, ruby_version, parser_engine) begin @buffer.source = source - rescue EncodingError => e + rescue EncodingError, Parser::UnknownEncodingInMagicComment => e @parser_error = e @ast = nil @comments = [] diff --git a/rubocop-ast.gemspec b/rubocop-ast.gemspec index 7d79bfd7e..24fb8cded 100644 --- a/rubocop-ast.gemspec +++ b/rubocop-ast.gemspec @@ -33,7 +33,7 @@ Gem::Specification.new do |s| 'rubygems_mfa_required' => 'true' } - s.add_runtime_dependency('parser', '>= 3.3.0.4') + s.add_runtime_dependency('parser', '>= 3.3.1.0') ##### Do NOT add `rubocop` (or anything depending on `rubocop`) here. See Gemfile end diff --git a/spec/rubocop/ast/processed_source_spec.rb b/spec/rubocop/ast/processed_source_spec.rb index cd0e1d4ac..c00fd1d8a 100644 --- a/spec/rubocop/ast/processed_source_spec.rb +++ b/spec/rubocop/ast/processed_source_spec.rb @@ -28,6 +28,16 @@ def some_method end end + context 'when parsing code with an invalid encoding comment' do + let(:source) { '# encoding: foobar' } + + it 'returns a parser error' do + expect(processed_source.parser_error).to be_a(Parser::UnknownEncodingInMagicComment) + expect(processed_source.parser_error.message) + .to include('unknown encoding name - foobar') + end + end + shared_examples 'invalid parser_engine' do it 'raises ArgumentError' do expect { processed_source }.to raise_error(ArgumentError) do |e|