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.



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

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.



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

def compiler_class
  @compiler_class
end

#other_compiler_classesObject (readonly)

Returns the value of attribute other_compiler_classes.



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

def other_compiler_classes
  @other_compiler_classes
end

Instance Method Details

#activate_other_dsl_compilers(compiler_classes) ⇒ Object



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

def activate_other_dsl_compilers(compiler_classes)
  @other_compiler_classes = compiler_classes
end

#activated_compiler_classesObject



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

def activated_compiler_classes
  [compiler_class, *other_compiler_classes]
end

#errorsObject



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

def errors
  pipeline.errors
end

#gathered_constantsObject



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

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

#rbi_for(constant_name) ⇒ Object



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

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