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