Class: RbsActivesupport::Generator
- Inherits:
-
Object
- Object
- RbsActivesupport::Generator
- Includes:
- AST
- Defined in:
- lib/rbs_activesupport/generator.rb
Instance Attribute Summary collapse
-
#declaration_builder ⇒ Object
readonly
: DeclarationBuilder.
-
#pathname ⇒ Object
readonly
: Pathname.
Class Method Summary collapse
Instance Method Summary collapse
-
#generate ⇒ Object
: String?.
-
#initialize(pathname, rbs_builder) ⇒ Generator
constructor
A new instance of Generator.
Methods included from AST
#eval_args_with_options, #eval_include_args, #eval_node
Constructor Details
#initialize(pathname, rbs_builder) ⇒ Generator
Returns a new instance of Generator.
20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/rbs_activesupport/generator.rb', line 20 def initialize(pathname, rbs_builder) #: void @pathname = pathname method_searcher = MethodSearcher.new(rbs_builder) resolver = if Gem::Version.new("3.10.0") <= Gem::Version.new(RBS::VERSION) RBS::Resolver::TypeNameResolver.build(rbs_builder.env) else # TypeNameResolver.new was deprecated in RBS 3.10.0 RBS::Resolver::TypeNameResolver.new(rbs_builder.env) # steep:ignore end @declaration_builder = DeclarationBuilder.new(resolver, method_searcher) end |
Instance Attribute Details
#declaration_builder ⇒ Object (readonly)
: DeclarationBuilder
16 17 18 |
# File 'lib/rbs_activesupport/generator.rb', line 16 def declaration_builder @declaration_builder end |
#pathname ⇒ Object (readonly)
: Pathname
15 16 17 |
# File 'lib/rbs_activesupport/generator.rb', line 15 def pathname @pathname end |
Class Method Details
.generate(pathname, rbs_builder) ⇒ Object
7 8 9 10 11 |
# File 'lib/rbs_activesupport/generator.rb', line 7 def self.generate(pathname, rbs_builder) #: String? new(pathname, rbs_builder).generate rescue StandardError warn "Failed to generate RBS for #{pathname}" end |
Instance Method Details
#generate ⇒ Object
: String?
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/rbs_activesupport/generator.rb', line 33 def generate #: String? declarations = parse_source_code return if declarations.empty? definition = declarations.map do |namespace, method_calls| public_decls, private_decls = declaration_builder.build(namespace, method_calls) next if public_decls.empty? && private_decls.empty? <<~RBS # resolve-type-names: false #{header(namespace)} #{public_decls.join("\n")} #{"private" if private_decls.any?} #{private_decls.join("\n")} #{(namespace)} RBS end.compact.join("\n") return if definition.empty? format(definition) end |