Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions lib/tapioca/helpers/sorbet_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
10 changes: 2 additions & 8 deletions lib/tapioca/helpers/test/dsl_compiler.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
Loading