rbs2ts 1.0.0 → 1.1.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: ebbf96bfef0f567cd8792b0e3cd41e79006c24a0a474d7706f0d6275a32c0ed8
4
- data.tar.gz: b9f817043223698ccc7dde082ee2f9196e5f46dcfe3e72ae6879213b62254afc
3
+ metadata.gz: 81fe2e0338e3f48a7b4670627ce0a8062f4b2af6dfe019363b81d92e45b2cfe2
4
+ data.tar.gz: d9af2d2209b401943576f78dd81d6c79f396b9d2f2f8169b55da39c7814d4878
5
5
  SHA512:
6
- metadata.gz: ebd873eb921321e9de32fe24383c132e1d5a88e02bc081e4803e22567b6cdf99b33596da30a2d6a27f840a359c581d3215db2acf09004e5ee81ef8ae7082c278
7
- data.tar.gz: 4929afb32f5b21e917bda03481a363f845b7a6d4f3d829d256d187999e3b29d049aaee64324f9553ff08ccf09065aa86201f6382c0d5822ba02a1e119a8a527b
6
+ metadata.gz: 5290fff9e17e557d1b4cbc2d9609c74c530f8a4f7b746d57bb57104968dc13e2a99580a40c67a40f9a72cb1fe0f5113f0748d1699fcbd5003fc440a5ea301331
7
+ data.tar.gz: 7f3cf63285e8b6749816a34062030a2d982371a1bf40443e3c323785c75c4ee208620e513d1443ecc26b2b441c464d2c7fba107f183867a99b32679fb031ee8c
data/README.md CHANGED
@@ -33,8 +33,8 @@ type StringLiteral = 'abc'
33
33
  type TrueLiteral = true
34
34
  type FalseLiteral = false
35
35
 
36
- type UnionType = String & Integer & Bool
37
- type IntersectionType = String | Integer | Bool
36
+ type IntersectionType = String & Integer & Bool
37
+ type UnionType = String | Integer | Bool
38
38
 
39
39
  type ArrayType = Array[String]
40
40
 
@@ -64,8 +64,29 @@ class Klass
64
64
  }?
65
65
  }
66
66
 
67
- def to_s: () -> String
68
- def tuple: () -> [{ s: String, f: Float }?]
67
+ def to_tuple: () -> [{ s: String, f: Float }?]
68
+ def required_positional: (String) -> void
69
+ def required_positional_name: (String str) -> void
70
+ def optional_positional: (?String) -> void
71
+ def optional_positional_name: (?String? str) -> void
72
+ def rest_positional: (*String) -> void
73
+ def rest_positional_name: (*String str) -> void
74
+ def rest_positional_with_trailing: (*String, Integer) -> void
75
+ def rest_positional_name_with_trailing: (*String str, Integer trailing) -> void
76
+ def required_keyword: (str: String) -> void
77
+ def optional_keyword: (?str: String?) -> void
78
+ def rest_keywords: (**String) -> void
79
+ def rest_keywords_name: (**String rest) -> void
80
+
81
+ def all_arguments: (
82
+ String required_positional,
83
+ ?Integer? optional_positional,
84
+ *String rest_positionals_s,
85
+ Integer trailing_positional_s,
86
+ required_keyword: String,
87
+ ?optional_keyword: Integer?,
88
+ **String rest_keywords
89
+ ) -> [{ s: String, f: Float }?]
69
90
  end
70
91
  ```
71
92
 
@@ -96,9 +117,9 @@ export type TrueLiteral = true;
96
117
 
97
118
  export type FalseLiteral = false;
98
119
 
99
- export type UnionType = string & number & boolean;
120
+ export type IntersectionType = string & number & boolean;
100
121
 
101
- export type IntersectionType = string | number | boolean;
122
+ export type UnionType = string | number | boolean;
102
123
 
103
124
  export type ArrayType = string[];
104
125
 
@@ -116,18 +137,34 @@ export type RecordType = {
116
137
  } | null | undefined;
117
138
  };
118
139
 
119
- export namespace Klass {
120
- export type a = string;
121
- export type b = number;
122
- export type r = {
140
+ export declare class Klass {
141
+ a: string;
142
+ readonly b: number;
143
+ c: boolean;
144
+ readonly r: {
123
145
  d: string;
124
146
  e: {
125
147
  f: string;
126
148
  g: string | null | undefined;
127
149
  } | null | undefined;
128
150
  };
129
- export type toSReturnType = string;
130
- export type tupleReturnType = [({
151
+ toTuple(): [({
152
+ s: string;
153
+ f: number;
154
+ } | null | undefined)];
155
+ requiredPositional(arg1: string): void;
156
+ requiredPositionalName(str: string): void;
157
+ optionalPositional(arg1?: string): void;
158
+ optionalPositionalName(str?: string | null | undefined): void;
159
+ restPositional(...arg1: string[]): void;
160
+ restPositionalName(...str: string[]): void;
161
+ restPositionalWithTrailing(arg1: string[], arg2: number): void;
162
+ restPositionalNameWithTrailing(str: string[], trailing: number): void;
163
+ requiredKeyword(arg1: { str: string }): void;
164
+ optionalKeyword(arg1: { str?: string | null | undefined }): void;
165
+ restKeywords(arg1: { [key: string]: unknown; }): void;
166
+ restKeywordsName(arg1: { [key: string]: unknown; }): void;
167
+ allArguments(requiredPositional: string, optionalPositional?: number | null | undefined, restPositionalsS?: string[], trailingPositionalS?: number, arg1?: { requiredKeyword: string, optionalKeyword?: number | null | undefined, [key: string]: unknown; }): [({
131
168
  s: string;
132
169
  f: number;
133
170
  } | null | undefined)];
@@ -5,3 +5,4 @@ require 'case_transform'
5
5
 
6
6
  require 'rbs2ts/converter/declarations'
7
7
  require 'rbs2ts/converter/types'
8
+ require 'rbs2ts/converter/members'
@@ -57,7 +57,7 @@ module Rbs2ts
57
57
  @@nest = @@nest - 1
58
58
 
59
59
  <<~TS
60
- export namespace #{name} {
60
+ export declare class #{name} {
61
61
  #{members_ts}
62
62
  };
63
63
  TS
@@ -66,10 +66,14 @@ module Rbs2ts
66
66
 
67
67
  def member_to_ts(member)
68
68
  case member
69
- when ::RBS::AST::Members::AttrReader, ::RBS::AST::Members::AttrAccessor then
70
- "export type #{CaseTransform.camel_lower(member.name)} = #{Converter::Types::Resolver.to_ts(member.type)};"
69
+ when ::RBS::AST::Members::AttrReader then
70
+ Converter::Members::AttrReader.new(member).to_ts
71
+ when ::RBS::AST::Members::AttrWriter then
72
+ Converter::Members::AttrWriter.new(member).to_ts
73
+ when ::RBS::AST::Members::AttrAccessor then
74
+ Converter::Members::AttrAccessor.new(member).to_ts
71
75
  when ::RBS::AST::Members::MethodDefinition
72
- "export type #{CaseTransform.camel_lower(member.name)}ReturnType = #{Converter::Types::Resolver.to_ts(member.types.first.type.return_type)};"
76
+ Converter::Members::MethodDefinition.new(member).to_ts
73
77
  else
74
78
  ''
75
79
  end
@@ -0,0 +1,140 @@
1
+ module Rbs2ts
2
+ module Converter
3
+ module Members
4
+ class Base
5
+ def initialize(member)
6
+ @member = member
7
+ end
8
+
9
+ def to_ts
10
+ ''
11
+ end
12
+
13
+ def name
14
+ CaseTransform.camel_lower(member.name.to_s.gsub(/:/, ''))
15
+ end
16
+
17
+ private
18
+
19
+ attr_reader :member
20
+ end
21
+
22
+ class AttrReader < Base
23
+ def to_ts
24
+ "readonly #{name}: #{Converter::Types::Resolver.to_ts(member.type)};"
25
+ end
26
+ end
27
+
28
+ class AttrWriter < Base
29
+ def to_ts
30
+ "#{name}: #{Converter::Types::Resolver.to_ts(member.type)};"
31
+ end
32
+ end
33
+
34
+ class AttrAccessor < Base
35
+ def to_ts
36
+ "#{name}: #{Converter::Types::Resolver.to_ts(member.type)};"
37
+ end
38
+ end
39
+
40
+ class MethodDefinition < Base
41
+ def initialize(member)
42
+ super
43
+ @args_count = 0
44
+ end
45
+
46
+ def to_ts
47
+ "#{name}(#{args_to_ts}): #{return_type_to_ts};"
48
+ end
49
+
50
+ def args_to_ts
51
+ [
52
+ *required_positional_to_ts,
53
+ *optional_positional_to_ts,
54
+ *rest_positionals_to_ts,
55
+ *trailing_positionals_to_ts,
56
+ *keyword_args_to_ts
57
+ ].join(", ")
58
+ end
59
+
60
+ def arg_name(arg)
61
+ name = arg.name.nil? ? next_default_arg_name : arg.name.to_s
62
+ CaseTransform.camel_lower(name)
63
+ end
64
+
65
+ def next_default_arg_name
66
+ @args_count = @args_count + 1
67
+ "arg#{@args_count.to_s}"
68
+ end
69
+
70
+ def required_positional_to_ts
71
+ method_type.required_positionals.map {|arg|
72
+ "#{arg_name(arg)}: #{Converter::Types::Resolver.to_ts(arg.type)}"
73
+ }
74
+ end
75
+
76
+ def optional_positional_to_ts
77
+ method_type.optional_positionals.map {|arg|
78
+ "#{arg_name(arg)}?: #{Converter::Types::Resolver.to_ts(arg.type)}"
79
+ }
80
+ end
81
+
82
+ def rest_positionals_to_ts
83
+ arg = method_type.rest_positionals
84
+
85
+ return [] if arg.nil?
86
+
87
+ has_rest_after_arguments ?
88
+ ["#{arg_name(arg)}#{optional_ts_code}: #{Converter::Types::Resolver.to_ts(arg.type)}[]"] :
89
+ ["...#{arg_name(arg)}#{optional_ts_code}: #{Converter::Types::Resolver.to_ts(arg.type)}[]"]
90
+ end
91
+
92
+ def trailing_positionals_to_ts
93
+ method_type.trailing_positionals.map {|arg|
94
+ "#{arg_name(arg)}#{optional_ts_code}: #{Converter::Types::Resolver.to_ts(arg.type)}"
95
+ }
96
+ end
97
+
98
+ def keyword_args_to_ts
99
+ required_keywords_ts = method_type.required_keywords.map {|key, value|
100
+ "#{CaseTransform.camel_lower(key.to_s)}: #{Converter::Types::Resolver.to_ts(value.type)}"
101
+ }
102
+ optional_keywords_ts = method_type.optional_keywords.map {|key, value|
103
+ "#{CaseTransform.camel_lower(key.to_s)}?: #{Converter::Types::Resolver.to_ts(value.type)}"
104
+ }
105
+ rest_keywords_ts = method_type.rest_keywords.nil? ? [] : ["[key: string]: unknown;"]
106
+
107
+ ts_array = [
108
+ *required_keywords_ts,
109
+ *optional_keywords_ts,
110
+ *rest_keywords_ts
111
+ ]
112
+
113
+ return [] if ts_array.empty?
114
+
115
+ ts = ts_array.join(', ')
116
+
117
+ ["#{next_default_arg_name}#{optional_ts_code}: { #{ts} }"]
118
+ end
119
+
120
+ def method_type
121
+ member.types.first.type
122
+ end
123
+
124
+ def return_type_to_ts
125
+ Converter::Types::Resolver.to_ts(method_type.return_type)
126
+ end
127
+
128
+ def optional_ts_code
129
+ method_type.optional_positionals.present? ? '?' : ''
130
+ end
131
+
132
+ def has_rest_after_arguments
133
+ method_type.trailing_positionals.present? ||
134
+ method_type.required_keywords.present? ||
135
+ method_type.optional_keywords.present?
136
+ end
137
+ end
138
+ end
139
+ end
140
+ end
@@ -1,3 +1,3 @@
1
1
  module Rbs2ts
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
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.0.0
4
+ version: 1.1.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-17 00:00:00.000000000 Z
11
+ date: 2021-01-19 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/members.rb
121
122
  - lib/rbs2ts/converter/types.rb
122
123
  - lib/rbs2ts/version.rb
123
124
  - rbs2ts.gemspec