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

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/tapioca/helpers/test/dsl_compiler.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(compiler_class) ⇒ CompilerContext

Returns a new instance of CompilerContext.



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

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_classObject (readonly)

Returns the value of attribute compiler_class.



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

def compiler_class
  @compiler_class
end

#other_compiler_classesObject (readonly)

Returns the value of attribute other_compiler_classes.



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

def other_compiler_classes
  @other_compiler_classes
end

Instance Method Details

#activate_other_dsl_compilers(compiler_classes) ⇒ Object



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

def activate_other_dsl_compilers(compiler_classes)
  @other_compiler_classes = compiler_classes
end

#activated_compiler_classesObject



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

def activated_compiler_classes
  [compiler_class, *other_compiler_classes]
end

#errorsObject



101
102
103
# File 'lib/tapioca/helpers/test/dsl_compiler.rb', line 101

def errors
  pipeline.errors
end

#gathered_constantsObject



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

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

#rbi_for(constant_name) ⇒ Object



85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/tapioca/helpers/test/dsl_compiler.rb', line 85

def rbi_for(constant_name)
  # 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.decorate

  Tapioca::DEFAULT_RBI_FORMATTER.print_file(file)
end