lib/rbs2ts/converter/declarations.rb in rbs2ts-1.1.0 vs lib/rbs2ts/converter/declarations.rb in rbs2ts-1.2.0

- old
+ new

@@ -9,10 +9,14 @@ 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::Module then + Converter::Declarations::Module.new(d).to_ts + when ::RBS::AST::Declarations::Interface then + Converter::Declarations::Interface.new(d).to_ts when ::RBS::AST::Declarations::Alias then Converter::Declarations::Alias.new(d).to_ts end end @@ -36,31 +40,20 @@ private attr_reader :declaration end - - class Class < Base - INDENT = ' ' - @@nest = 0 + class Class < Base 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") + member_to_ts(member) }.reject(&:empty?).join("\n") - @@nest = @@nest - 1 - <<~TS export declare class #{name} { - #{members_ts} + #{Helper.indent(members_ts)} }; TS .chomp end @@ -79,12 +72,55 @@ end end end class Module < Base + def to_ts + members_ts = declaration.members.map {|member| + member_to_ts(member) + }.reject(&:empty?).join("\n") + + <<~TS + export namespace #{name} { + #{Helper.indent(members_ts)} + }; + TS + .chomp + end + + def member_to_ts(member) + case member + when ::RBS::AST::Members::MethodDefinition + ts = Converter::Members::MethodDefinition.new(member).to_ts + "export declare function #{ts}" + else + '' + end + end end class Interface < Base + def to_ts + members_ts = declaration.members.map {|member| + member_to_ts(member) + }.reject(&:empty?).join("\n") + + <<~TS + export interface #{name.gsub(/_/, '')} { + #{Helper.indent(members_ts)} + }; + TS + .chomp + end + + def member_to_ts(member) + case member + when ::RBS::AST::Members::MethodDefinition + Converter::Members::MethodDefinition.new(member).to_ts + else + '' + end + end end class Alias < Base def to_ts "export type #{name} = #{Converter::Types::Resolver.to_ts(declaration.type)};"