From 65b236107f691b318d10fcaecfb4b2dcbcd500f4 Mon Sep 17 00:00:00 2001 From: Alexander Momchilov Date: Wed, 1 Apr 2026 14:02:02 -0400 Subject: [PATCH] Extract `sorbet_syntax_check!` Using Sorbet's more-specific RBI mode. --- lib/tapioca/helpers/sorbet_helper.rb | 19 +++++++++++++++++++ lib/tapioca/helpers/test/dsl_compiler.rb | 10 ++-------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/lib/tapioca/helpers/sorbet_helper.rb b/lib/tapioca/helpers/sorbet_helper.rb index d9156e1b7..914f34e49 100644 --- a/lib/tapioca/helpers/sorbet_helper.rb +++ b/lib/tapioca/helpers/sorbet_helper.rb @@ -22,6 +22,25 @@ def sorbet(*sorbet_args) SPOOM_CONTEXT.srb(sorbet_args.join(" "), sorbet_bin: sorbet_path) end + #: (String, rbi_mode: bool) { (String stderr) -> void } -> void + def sorbet_syntax_check!(source, rbi_mode:, &on_failure) + quoted_source = "\"#{source}\"" + + result = if rbi_mode + # --e-rbi cannot be used on its own, so we pass a dummy value like `-e ""` + sorbet("--no-config", "--stop-after=parser", "-e", '""', "--e-rbi", quoted_source) + else + sorbet("--no-config", "--stop-after=parser", "-e", quoted_source) + end + + unless result.status + stderr = result.err #: as !nil + on_failure.call(stderr) + end + + nil + end + #: -> String def sorbet_path sorbet_path = ENV.fetch(SORBET_EXE_PATH_ENV_VAR, SORBET_BIN) diff --git a/lib/tapioca/helpers/test/dsl_compiler.rb b/lib/tapioca/helpers/test/dsl_compiler.rb index 11424048a..b45e7e334 100644 --- a/lib/tapioca/helpers/test/dsl_compiler.rb +++ b/lib/tapioca/helpers/test/dsl_compiler.rb @@ -94,20 +94,14 @@ def rbi_for(constant_name, compiler_options: {}) compiler.decorate rbi = Tapioca::DEFAULT_RBI_FORMATTER.print_file(file) - result = sorbet( - "--no-config", - "--stop-after=parser", - "-e", - "\"#{rbi}\"", - ) - unless result.status + sorbet_syntax_check!(rbi, rbi_mode: true) do |stderr| raise(SyntaxError, <<~MSG) Expected generated RBI file for `#{constant_name}` to not have any parsing errors. Got these parsing errors: - #{result.err} + #{stderr} MSG end