Class: Tapioca::Helpers::Test::DslCompiler::CompilerContext

Inherits:
Object
  • Object
show all
Includes:
SorbetHelper
Defined in:
lib/tapioca/helpers/test/dsl_compiler.rb

Constant Summary

Constants included from SorbetHelper

SorbetHelper::FEATURE_REQUIREMENTS, SorbetHelper::SORBET_BIN, SorbetHelper::SORBET_EXE_PATH_ENV_VAR, SorbetHelper::SORBET_GEM_SPEC, SorbetHelper::SORBET_PAYLOAD_URL, SorbetHelper::SPOOM_CONTEXT

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from SorbetHelper

#sorbet, #sorbet_path, #sorbet_supports?, #sorbet_syntax_check!

Constructor Details

#initialize(compiler_class) ⇒ CompilerContext

: (singleton(Tapioca::Dsl::Compiler) compiler_class) -> void



61
62
63
64
65
66
# File 'lib/tapioca/helpers/test/dsl_compiler.rb', line 61

def initialize(compiler_class)
  @compiler_class = compiler_class
  @other_compiler_classes = [] #: Array[singleton(Tapioca::Dsl::Compiler)]
  @pipeline = nil #: Tapioca::Dsl::Pipeline?
  @errors = [] #: Array[String]
end

Instance Attribute Details

#compiler_classObject (readonly)

: singleton(Tapioca::Dsl::Compiler)



55
56
57
# File 'lib/tapioca/helpers/test/dsl_compiler.rb', line 55

def compiler_class
  @compiler_class
end

#other_compiler_classesObject (readonly)

: Array



58
59
60
# File 'lib/tapioca/helpers/test/dsl_compiler.rb', line 58

def other_compiler_classes
  @other_compiler_classes
end

Instance Method Details

#activate_other_dsl_compilers(compiler_classes) ⇒ Object

: (Array compiler_classes) -> void



69
70
71
# File 'lib/tapioca/helpers/test/dsl_compiler.rb', line 69

def activate_other_dsl_compilers(compiler_classes)
  @other_compiler_classes = compiler_classes
end

#activated_compiler_classesObject

: -> Array



74
75
76
# File 'lib/tapioca/helpers/test/dsl_compiler.rb', line 74

def activated_compiler_classes
  [compiler_class, *other_compiler_classes]
end

#errorsObject

: -> Array



112
113
114
# File 'lib/tapioca/helpers/test/dsl_compiler.rb', line 112

def errors
  pipeline.errors
end

#gathered_constantsObject

: -> Array



79
80
81
# File 'lib/tapioca/helpers/test/dsl_compiler.rb', line 79

def gathered_constants
  compiler_class.processable_constants.filter_map(&:name).sort
end

#rbi_for(constant_name, compiler_options: {}) ⇒ Object

: ((Symbol | String) constant_name, ?compiler_options: Hash[Symbol, untyped]) -> String



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/tapioca/helpers/test/dsl_compiler.rb', line 84

def rbi_for(constant_name, compiler_options: {})
  # Make sure this is a constant that we can handle.
  unless gathered_constants.include?(constant_name.to_s)
    raise "`#{constant_name}` is not processable by the `#{compiler_class}` compiler."
  end

  file = RBI::File.new(strictness: "strong")
  constant = Object.const_get(constant_name)

  compiler = compiler_class.new(pipeline, file.root, constant, compiler_options.transform_keys(&:to_s))
  compiler.decorate

  rbi = Tapioca::DEFAULT_RBI_FORMATTER.print_file(file)

  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:

      #{stderr}
    MSG
  end

  rbi
end