rbs2ts 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
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: []