rbs2ts 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 81fe2e0338e3f48a7b4670627ce0a8062f4b2af6dfe019363b81d92e45b2cfe2
4
- data.tar.gz: d9af2d2209b401943576f78dd81d6c79f396b9d2f2f8169b55da39c7814d4878
3
+ metadata.gz: 63451fb8675f6e0e4420d64d7655385f8b32260c0e17b0ec9f796312372140b3
4
+ data.tar.gz: cfa90fb4ec6d06efc412ec1f1f28a000d23c3f16cba28ad0aa5f4cea4d2bda43
5
5
  SHA512:
6
- metadata.gz: 5290fff9e17e557d1b4cbc2d9609c74c530f8a4f7b746d57bb57104968dc13e2a99580a40c67a40f9a72cb1fe0f5113f0748d1699fcbd5003fc440a5ea301331
7
- data.tar.gz: 7f3cf63285e8b6749816a34062030a2d982371a1bf40443e3c323785c75c4ee208620e513d1443ecc26b2b441c464d2c7fba107f183867a99b32679fb031ee8c
6
+ metadata.gz: e8e8b4381ee67f4ad40a5a5cafa2590efe7f698b3f98bbc9625a0f74c975c4924cfd713a4450c67ba45bb346b3f620f2445707c27e09153eefe12ce60b21873a
7
+ data.tar.gz: 60832356723c81313fc06afa80a88d16555b815e3c94090db05392bee17f2de7bb30d8a5682cfdd04eaacbd4deeffdb4c1f6df5932b4bb21e5bee357aefdad9e
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Rbs2ts
2
2
 
3
- Convert RBS to TypeScript type definition.
3
+ A RubyGem that converts Ruby RBS to TypeScript definitions.
4
4
 
5
5
  ## Installation
6
6
 
@@ -88,6 +88,14 @@ class Klass
88
88
  **String rest_keywords
89
89
  ) -> [{ s: String, f: Float }?]
90
90
  end
91
+
92
+ module Module
93
+ def func: (String, Integer) -> { str: String, int: Integer }
94
+ end
95
+
96
+ interface _Interface
97
+ def func: (String, Integer) -> { str: String, int: Integer }
98
+ end
91
99
  ```
92
100
 
93
101
  to TypeScript
@@ -169,18 +177,18 @@ export declare class Klass {
169
177
  f: number;
170
178
  } | null | undefined)];
171
179
  };
172
- ```
173
-
174
- ---
175
180
 
176
- ## ToDo
181
+ export namespace Module {
182
+ export declare function func(arg1: string, arg2: number): {
183
+ str: string;
184
+ int: number;
185
+ };
186
+ };
177
187
 
178
- - [x] Literal type
179
- - [ ] Interface type
180
- - [x] Literal type
181
- - [x] Tuple Type
182
- - [x] Base Types
183
- - [x] Method Type (Argument Types and Return Types)
184
- - [x] Class declaration
185
- - [ ] Module declaration
186
- - [ ] Interface declaration
188
+ export interface Interface {
189
+ func(arg1: string, arg2: number): {
190
+ str: string;
191
+ int: number;
192
+ };
193
+ };
194
+ ```
@@ -3,6 +3,7 @@ end
3
3
 
4
4
  require 'case_transform'
5
5
 
6
+ require 'rbs2ts/converter/helper'
6
7
  require 'rbs2ts/converter/declarations'
7
8
  require 'rbs2ts/converter/types'
8
9
  require 'rbs2ts/converter/members'
@@ -11,6 +11,10 @@ module Rbs2ts
11
11
  case d
12
12
  when ::RBS::AST::Declarations::Class then
13
13
  Converter::Declarations::Class.new(d).to_ts
14
+ when ::RBS::AST::Declarations::Module then
15
+ Converter::Declarations::Module.new(d).to_ts
16
+ when ::RBS::AST::Declarations::Interface then
17
+ Converter::Declarations::Interface.new(d).to_ts
14
18
  when ::RBS::AST::Declarations::Alias then
15
19
  Converter::Declarations::Alias.new(d).to_ts
16
20
  end
@@ -38,27 +42,16 @@ module Rbs2ts
38
42
 
39
43
  attr_reader :declaration
40
44
  end
41
-
42
- class Class < Base
43
- INDENT = ' '
44
- @@nest = 0
45
45
 
46
+ class Class < Base
46
47
  def to_ts
47
- @@nest = @@nest + 1
48
-
49
48
  members_ts = declaration.members.map {|member|
50
- ts = member_to_ts(member)
51
- ts
52
- .split("\n")
53
- .map {|t| "#{INDENT * @@nest}#{t}" }
54
- .join("\n")
49
+ member_to_ts(member)
55
50
  }.reject(&:empty?).join("\n")
56
51
 
57
- @@nest = @@nest - 1
58
-
59
52
  <<~TS
60
53
  export declare class #{name} {
61
- #{members_ts}
54
+ #{Helper.indent(members_ts)}
62
55
  };
63
56
  TS
64
57
  .chomp
@@ -81,9 +74,52 @@ module Rbs2ts
81
74
  end
82
75
 
83
76
  class Module < Base
77
+ def to_ts
78
+ members_ts = declaration.members.map {|member|
79
+ member_to_ts(member)
80
+ }.reject(&:empty?).join("\n")
81
+
82
+ <<~TS
83
+ export namespace #{name} {
84
+ #{Helper.indent(members_ts)}
85
+ };
86
+ TS
87
+ .chomp
88
+ end
89
+
90
+ def member_to_ts(member)
91
+ case member
92
+ when ::RBS::AST::Members::MethodDefinition
93
+ ts = Converter::Members::MethodDefinition.new(member).to_ts
94
+ "export declare function #{ts}"
95
+ else
96
+ ''
97
+ end
98
+ end
84
99
  end
85
100
 
86
101
  class Interface < Base
102
+ def to_ts
103
+ members_ts = declaration.members.map {|member|
104
+ member_to_ts(member)
105
+ }.reject(&:empty?).join("\n")
106
+
107
+ <<~TS
108
+ export interface #{name.gsub(/_/, '')} {
109
+ #{Helper.indent(members_ts)}
110
+ };
111
+ TS
112
+ .chomp
113
+ end
114
+
115
+ def member_to_ts(member)
116
+ case member
117
+ when ::RBS::AST::Members::MethodDefinition
118
+ Converter::Members::MethodDefinition.new(member).to_ts
119
+ else
120
+ ''
121
+ end
122
+ end
87
123
  end
88
124
 
89
125
  class Alias < Base
@@ -0,0 +1,16 @@
1
+ module Rbs2ts
2
+ module Converter
3
+ module Helper
4
+ class << self
5
+ INDENT = ' '
6
+
7
+ def indent(text, level = 1)
8
+ text
9
+ .split("\n")
10
+ .map {|t| "#{INDENT * level}#{t}" }
11
+ .join("\n")
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -46,27 +46,19 @@ module Rbs2ts
46
46
  end
47
47
 
48
48
  class Record < ConverterBase
49
- INDENT = ' '
50
- @@nest = 0
51
-
52
49
  def to_ts
53
- @@nest = @@nest + 1
54
-
55
- indent = INDENT * @@nest
56
50
  field_lines = type.fields.map { |name, type|
57
- "#{indent}#{CaseTransform.camel_lower(name.to_s)}: #{Types::Resolver.to_ts(type)};"
51
+ "#{CaseTransform.camel_lower(name.to_s)}: #{Types::Resolver.to_ts(type)};"
58
52
  }
59
53
 
60
- @@nest = @@nest - 1
61
-
62
54
  return '{}' if field_lines.empty?
63
55
 
64
56
  field_ts = field_lines.join("\n")
65
57
 
66
58
  ts = <<~CODE
67
59
  {
68
- #{field_ts}
69
- #{INDENT * @@nest}}
60
+ #{Helper.indent(field_ts)}
61
+ }
70
62
  CODE
71
63
 
72
64
  ts.chomp
@@ -1,3 +1,3 @@
1
1
  module Rbs2ts
2
- VERSION = "1.1.0"
2
+ VERSION = "1.2.0"
3
3
  end
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["mugi-uno"]
10
10
  spec.email = ["mugi.uno@gmail.com"]
11
11
 
12
- spec.summary = "Convert rbs to typescript"
12
+ spec.summary = "A RubyGem that converts Ruby RBS to TypeScript definitions."
13
13
  spec.homepage = "https://github.com/mugi-uno/rbs2ts"
14
14
  spec.license = "MIT"
15
15
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbs2ts
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - mugi-uno
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-19 00:00:00.000000000 Z
11
+ date: 2021-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rbs
@@ -118,6 +118,7 @@ files:
118
118
  - lib/rbs2ts/cli.rb
119
119
  - lib/rbs2ts/converter.rb
120
120
  - lib/rbs2ts/converter/declarations.rb
121
+ - lib/rbs2ts/converter/helper.rb
121
122
  - lib/rbs2ts/converter/members.rb
122
123
  - lib/rbs2ts/converter/types.rb
123
124
  - lib/rbs2ts/version.rb
@@ -144,5 +145,5 @@ requirements: []
144
145
  rubygems_version: 3.1.4
145
146
  signing_key:
146
147
  specification_version: 4
147
- summary: Convert rbs to typescript
148
+ summary: A RubyGem that converts Ruby RBS to TypeScript definitions.
148
149
  test_files: []