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)};"