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