Class: Tapioca::Helpers::Test::DslCompiler::CompilerContext
- Inherits:
-
Object
- Object
- Tapioca::Helpers::Test::DslCompiler::CompilerContext
- Extended by:
- T::Sig
- 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
-
#compiler_class ⇒ Object
readonly
Returns the value of attribute compiler_class.
-
#other_compiler_classes ⇒ Object
readonly
Returns the value of attribute other_compiler_classes.
Instance Method Summary collapse
- #activate_other_dsl_compilers(compiler_classes) ⇒ Object
- #activated_compiler_classes ⇒ Object
- #errors ⇒ Object
- #gathered_constants ⇒ Object
-
#initialize(compiler_class) ⇒ CompilerContext
constructor
A new instance of CompilerContext.
- #rbi_for(constant_name, compiler_options: {}) ⇒ Object
Methods included from SorbetHelper
#sorbet, #sorbet_path, #sorbet_supports?
Constructor Details
#initialize(compiler_class) ⇒ CompilerContext
Returns a new instance of CompilerContext.
71 72 73 74 75 76 |
# File 'lib/tapioca/helpers/test/dsl_compiler.rb', line 71 def initialize(compiler_class) @compiler_class = compiler_class @other_compiler_classes = T.let([], T::Array[T.class_of(Tapioca::Dsl::Compiler)]) @pipeline = T.let(nil, T.nilable(Tapioca::Dsl::Pipeline)) @errors = T.let([], T::Array[String]) end |
Instance Attribute Details
#compiler_class ⇒ Object (readonly)
Returns the value of attribute compiler_class.
65 66 67 |
# File 'lib/tapioca/helpers/test/dsl_compiler.rb', line 65 def compiler_class @compiler_class end |
#other_compiler_classes ⇒ Object (readonly)
Returns the value of attribute other_compiler_classes.
68 69 70 |
# File 'lib/tapioca/helpers/test/dsl_compiler.rb', line 68 def other_compiler_classes @other_compiler_classes end |
Instance Method Details
#activate_other_dsl_compilers(compiler_classes) ⇒ Object
79 80 81 |
# File 'lib/tapioca/helpers/test/dsl_compiler.rb', line 79 def activate_other_dsl_compilers(compiler_classes) @other_compiler_classes = compiler_classes end |
#activated_compiler_classes ⇒ Object
84 85 86 |
# File 'lib/tapioca/helpers/test/dsl_compiler.rb', line 84 def activated_compiler_classes [compiler_class, *other_compiler_classes] end |
#errors ⇒ Object
134 135 136 |
# File 'lib/tapioca/helpers/test/dsl_compiler.rb', line 134 def errors pipeline.errors end |
#gathered_constants ⇒ Object
89 90 91 |
# File 'lib/tapioca/helpers/test/dsl_compiler.rb', line 89 def gathered_constants compiler_class.processable_constants.filter_map(&:name).sort end |
#rbi_for(constant_name, compiler_options: {}) ⇒ Object
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/tapioca/helpers/test/dsl_compiler.rb', line 99 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, .transform_keys(&:to_s)) compiler.decorate rbi = Tapioca::DEFAULT_RBI_FORMATTER.print_file(file) result = sorbet( "--no-config", "--stop-after", "parser", "-e", "\"#{rbi}\"", ) unless result.status raise(SyntaxError, " Expected generated RBI file for `\#{constant_name}` to not have any parsing errors.\n\n Got these parsing errors:\n\n \#{result.err}\n MSG\n end\n\n rbi\nend\n") |