From 27582836f05f7ffdd9435afe3fee34dd18bad434 Mon Sep 17 00:00:00 2001 From: Earlopain <14981592+Earlopain@users.noreply.github.com> Date: Tue, 17 Dec 2024 16:56:14 +0100 Subject: [PATCH] - Fix `ruby-parse` with a folder ending in `.rb` It's just checking that the path ends with `.rb`, which can happen with folders --- lib/parser/runner.rb | 7 ++++++- test/test_runner_parse.rb | 9 +++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/parser/runner.rb b/lib/parser/runner.rb index 37ecb0871..95f3efa99 100644 --- a/lib/parser/runner.rb +++ b/lib/parser/runner.rb @@ -242,7 +242,12 @@ def process_fragments def process_files @files.each do |filename| - source = File.read(filename).force_encoding(@parser.default_encoding) + source = begin + File.read(filename).force_encoding(@parser.default_encoding) + rescue Errno::EISDIR + # Will happen for a folder called `foo.rb`. Just catch this here, it's cheaper than checking every file. + next + end buffer = Parser::Source::Buffer.new(filename) diff --git a/test/test_runner_parse.rb b/test/test_runner_parse.rb index c753f9a97..687951f04 100644 --- a/test/test_runner_parse.rb +++ b/test/test_runner_parse.rb @@ -58,4 +58,13 @@ def test_stdin_input assert_prints ['--emit-ruby', '-', { stdin_data: '123' }], 's(:int, 123)' end + + def test_folder_with_rb_extension + Dir.mktmpdir do |tmp_dir| + Dir.mkdir("#{tmp_dir}/foo.rb") + File.write("#{tmp_dir}/foo.rb/bar.rb", "123") + + assert_prints [tmp_dir], '(int 123)' + end + end end