lib/rbs2ts/converter/declarations.rb in rbs2ts-1.0.0.pre.alpha.3 vs lib/rbs2ts/converter/declarations.rb in rbs2ts-1.0.0.pre.alpha.4
- old
+ new
@@ -7,10 +7,12 @@
end
def to_ts
decls_ts = @decls.map do |d|
case d
+ when ::RBS::AST::Declarations::Class then
+ Converter::Declarations::Class.new(d).to_ts
when ::RBS::AST::Declarations::Alias then
Converter::Declarations::Alias.new(d).to_ts
end
end
@@ -36,20 +38,54 @@
attr_reader :declaration
end
class Class < Base
+ INDENT = ' '
+ @@nest = 0
+
+ def to_ts
+ @@nest = @@nest + 1
+
+ members_ts = declaration.members.map {|member|
+ ts = member_to_ts(member)
+ ts
+ .split("\n")
+ .map {|t| "#{INDENT * @@nest}#{t}" }
+ .join("\n")
+ }.reject(&:empty?).join("\n")
+
+ @@nest = @@nest - 1
+
+ <<~TS
+ export namespace #{name} {
+ #{members_ts}
+ };
+ TS
+ .chomp
+ end
+
+ def member_to_ts(member)
+ case member
+ when ::RBS::AST::Members::AttrReader, ::RBS::AST::Members::AttrAccessor then
+ "export type #{CaseTransform.camel_lower(member.name)} = #{Converter::Types::Resolver.to_ts(member.type)};"
+ when ::RBS::AST::Members::MethodDefinition
+ "export type #{CaseTransform.camel_lower(member.name)}ReturnType = #{Converter::Types::Resolver.to_ts(member.types.first.type.return_type)};"
+ else
+ ''
+ end
+ end
end
class Module < Base
end
class Interface < Base
end
class Alias < Base
def to_ts
- "type #{name} = #{Converter::Types::Resolver.to_ts(declaration.type)};"
+ "export type #{name} = #{Converter::Types::Resolver.to_ts(declaration.type)};"
end
end
class Constant < Base
end