yard2steep 0.1.2 → 0.1.3

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: 9bb70f71599de19c3366d88dcafff7a50180c9358f2c331467158b3a711865cb
4
- data.tar.gz: 7efcad232269e58c28f8cab663b10936eaa6c58fc5d8548426cfc8e768c21199
3
+ metadata.gz: 6288038fd78f492af6aa413b15c40ac3c6f3ada8068e56a3cf4ec252cfccec1d
4
+ data.tar.gz: 9fb5f345434b127bd61f96f1081874b8157698a8f7eaf5a8e6779ff891480642
5
5
  SHA512:
6
- metadata.gz: 934d8b340f06399d2990f96330c01eeece9db711a2dbfc7aebfb7e43355145b3dee1f4594081cdcd193f2211fe8200d9f2f4878346ab1879b9bb4dcffcf9783b
7
- data.tar.gz: b674c6de151346cc48015d1b166c4c2059f1fd5967a4dbd94a1e14db05206876b78abea19921d236962cd272d37ac16e993533b6c8b1cac2253a6bd554fe2894
6
+ metadata.gz: 478577c07127351b4080ccbcf48f87656b65cafd6481ebd188bf3d110d26fc04da2513d520d6e99182981bbb84450ebab1c9651ce14569dd6ca3c1941684afaa
7
+ data.tar.gz: 8146d573e9f52dbac2309df6651c7b39733f3e5a6d267ec279985a6ec6459866bc61f84e4c4061aa75257444443a03eabbb91c192aadeae13ad62c8307bb02b6
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- yard2steep (0.1.2)
4
+ yard2steep (0.1.3)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Generate [steep](https://github.com/soutaro/steep) type definition file from yard annotation.
4
4
 
5
- :warning: **This is highly experimental project. Current version is 0.1.1.**
5
+ :warning: **This is highly experimental project. Current version is 0.1.2.**
6
6
 
7
7
  ## Installation
8
8
 
@@ -31,7 +31,17 @@ class MyClass
31
31
  end
32
32
  end
33
33
 
34
- CONSTANT = "This is constant".freeze
34
+ CONSTANT = "This is constant"
35
+ CONSTANT2 = /this is re/
36
+ CONSTANT3 = :symbol_value
37
+ CONSTANT4 = 1..2
38
+ CONSTANT5 = 34
39
+ CONSTANT6 = 2.34
40
+ CONSTANT7 = [1, 2]
41
+ CONSTANT8 = { a: 3 }
42
+ CONSTANT9 = true
43
+ CONSTANT10 = false
44
+ CONSTANT11 = nil
35
45
 
36
46
  # This for should not be used.
37
47
  # @return [String]
@@ -19,7 +19,17 @@ class MyClass
19
19
  def present?: (any) -> any
20
20
  def mysum: (any) { (any) -> any } -> any
21
21
  end
22
- MyClass::CONSTANT: any
22
+ MyClass::CONSTANT: String
23
+ MyClass::CONSTANT2: Regexp
24
+ MyClass::CONSTANT3: Symbol
25
+ MyClass::CONSTANT4: Range<any>
26
+ MyClass::CONSTANT5: Integer
27
+ MyClass::CONSTANT6: Float
28
+ MyClass::CONSTANT7: Array<any>
29
+ MyClass::CONSTANT8: Hash<any, any>
30
+ MyClass::CONSTANT9: bool
31
+ MyClass::CONSTANT10: bool
32
+ MyClass::CONSTANT11: nil
23
33
  module MyClass::InnerClass
24
34
  def double: (source: Integer) -> Integer
25
35
  end
@@ -1,15 +1,17 @@
1
1
  module Yard2steep
2
2
  module AST
3
3
  class ConstantNode
4
- # @dynamic name, klass
5
- attr_reader :name, :klass
4
+ # @dynamic name, klass, v_type
5
+ attr_reader :name, :klass, :v_type
6
6
 
7
7
  # @param [String] name
8
8
  # @param [String] klass
9
- def initialize(name:, klass:)
9
+ # @param [String] v_type
10
+ def initialize(name:, klass:, v_type:)
10
11
  Util.assert! { name.is_a?(String) }
11
- @name = name
12
- @klass = klass
12
+ @name = name
13
+ @klass = klass
14
+ @v_type = v_type
13
15
  end
14
16
 
15
17
  # @return [String]
@@ -0,0 +1,131 @@
1
+ require 'yard2steep/type'
2
+
3
+ module Yard2steep
4
+ class Comments
5
+ S_RE = /[\s\t]*/
6
+ TYPE_WITH_PAREN_RE = /
7
+ \[
8
+ (
9
+ [^\]]
10
+ *
11
+ )
12
+ \]
13
+ /x
14
+ COMMENT_RE = /^
15
+ \#
16
+ #{S_RE}
17
+ @(?:param|return)
18
+ #{S_RE}
19
+ #{TYPE_WITH_PAREN_RE}
20
+ /x
21
+ PARAM_RE = /
22
+ \#
23
+ #{S_RE}
24
+ @param
25
+ #{S_RE}
26
+ #{TYPE_WITH_PAREN_RE}
27
+ #{S_RE}
28
+ (\w+)
29
+ /x
30
+ RETURN_RE = /
31
+ \#
32
+ #{S_RE}
33
+ @return
34
+ #{S_RE}
35
+ #{TYPE_WITH_PAREN_RE}
36
+ /x
37
+
38
+ # @param [String] text
39
+ def initialize(text)
40
+ @comments_map = extract(text)
41
+ end
42
+
43
+ # @param [Integer] m_loc represents location of method definition
44
+ # @return [Array(Hash { String => String }, String)]
45
+ def parse_from(m_loc)
46
+ Util.assert! { m_loc >= 0 }
47
+ reset_context!
48
+
49
+ l = m_loc - 1
50
+ while l >= 0
51
+ comment = @comments_map[l]
52
+ break unless comment # nil when no more comment exist
53
+
54
+ parse_comment!(comment)
55
+ l -= 1
56
+ end
57
+
58
+ [@p_types, @r_type]
59
+ end
60
+
61
+ private
62
+
63
+ # @return [void]
64
+ def reset_context!
65
+ @p_types = {}
66
+ @r_type = nil
67
+ end
68
+
69
+ # @param [String] text
70
+ # @return [Hash{ String => String }]
71
+ def extract(text)
72
+ # NOTE: `Ripper.lex` returns array of array such as
73
+ # [
74
+ # [[1, 0], :on_comment, "# @param [Array] contents\n", EXPR_BEG],
75
+ # ...
76
+ # ]
77
+ r = {}
78
+ Ripper.lex(text).each do |t|
79
+ # Check token type
80
+ type = t[1]
81
+ next if type != :on_comment
82
+ # Check comment body
83
+ comment = t[2]
84
+ next unless comment.match?(COMMENT_RE)
85
+
86
+ line = t[0][0]
87
+ r[line] = comment
88
+ end
89
+
90
+ r
91
+ end
92
+
93
+ # @param [String] comment
94
+ # @return [void]
95
+ def parse_comment!(comment)
96
+ return if try_param_comment(comment)
97
+ return if try_return_comment(comment)
98
+ raise "Must not reach here!"
99
+ end
100
+
101
+ # @param [String] comment
102
+ # @return [bool]
103
+ def try_param_comment(comment)
104
+ m = comment.match(PARAM_RE)
105
+ return false unless m
106
+
107
+ type = normalize_type(m[1])
108
+ name = m[2]
109
+ @p_types[name] = type
110
+
111
+ true
112
+ end
113
+
114
+ # @param [String] comment
115
+ # @return [bool]
116
+ def try_return_comment(comment)
117
+ m = comment.match(RETURN_RE)
118
+ return false unless m
119
+
120
+ @r_type = normalize_type(m[1])
121
+
122
+ true
123
+ end
124
+
125
+ # @param [String] type
126
+ # @return [String]
127
+ def normalize_type(type)
128
+ Type.translate(type)
129
+ end
130
+ end
131
+ end
@@ -94,7 +94,7 @@ module Yard2steep
94
94
  def gen_c!(c_node, off:)
95
95
  Util.assert! { c_node.is_a?(AST::ConstantNode) }
96
96
  # NOTE: Use any as constant type.
97
- emit! "#{c_node.long_name}: any\n", off: off
97
+ emit! "#{c_node.long_name}: #{c_node.v_type}\n", off: off
98
98
  end
99
99
 
100
100
  # @param [AST::MethodNode] m_node
@@ -1,44 +1,11 @@
1
1
  require 'ripper'
2
2
 
3
- require 'yard2steep/type'
3
+ require 'yard2steep/comments'
4
4
  require 'yard2steep/ast'
5
5
  require 'yard2steep/util'
6
6
 
7
7
  module Yard2steep
8
8
  class Parser
9
- S_RE = /[\s\t]*/
10
- TYPE_WITH_PAREN_RE = /
11
- \[
12
- (
13
- [^\]]
14
- *
15
- )
16
- \]
17
- /x
18
- COMMENT_RE = /^
19
- \#
20
- #{S_RE}
21
- @(?:param|return)
22
- #{S_RE}
23
- #{TYPE_WITH_PAREN_RE}
24
- /x
25
- PARAM_RE = /
26
- \#
27
- #{S_RE}
28
- @param
29
- #{S_RE}
30
- #{TYPE_WITH_PAREN_RE}
31
- #{S_RE}
32
- (\w+)
33
- /x
34
- RETURN_RE = /
35
- \#
36
- #{S_RE}
37
- @return
38
- #{S_RE}
39
- #{TYPE_WITH_PAREN_RE}
40
- /x
41
-
42
9
  ANY_TYPE = 'any'
43
10
  ANY_BLOCK_TYPE = '{ (any) -> any }'
44
11
 
@@ -48,8 +15,6 @@ module Yard2steep
48
15
 
49
16
  # NOTE: set at parse
50
17
  @file = nil
51
-
52
- @comments_map = {}
53
18
  end
54
19
 
55
20
  # @param [String] file
@@ -62,7 +27,7 @@ module Yard2steep
62
27
  @file = file
63
28
  debug_print!("Start parsing: #{file}")
64
29
 
65
- @comments_map = extract_comments(text)
30
+ @comments = Comments.new(text)
66
31
 
67
32
  main = AST::ClassNode.create_main
68
33
  @ast = main
@@ -181,7 +146,7 @@ module Yard2steep
181
146
  # @return [void]
182
147
  def parse_method_impl(m_name, m_loc, params)
183
148
  within_context do
184
- extract_p_types!(m_loc)
149
+ @p_types, @r_type = @comments.parse_from(m_loc)
185
150
 
186
151
  p_list = parse_params(params)
187
152
 
@@ -197,54 +162,6 @@ module Yard2steep
197
162
  end
198
163
  end
199
164
 
200
- # @param [Integer] m_loc represents location of method definition
201
- # @return [void]
202
- def extract_p_types!(m_loc)
203
- Util.assert! { m_loc >= 0 }
204
- l = m_loc - 1
205
- while l >= 0
206
- comment = @comments_map[l]
207
- break unless comment # nil when no more comment exist
208
-
209
- parse_comment!(comment)
210
- l -= 1
211
- end
212
- end
213
-
214
- # @param [String] comment
215
- # @return [void]
216
- def parse_comment!(comment)
217
- return if try_param_comment(comment)
218
- return if try_return_comment(comment)
219
- raise "Must not reach here!"
220
- end
221
-
222
- # @param [String] comment
223
- # @return [bool]
224
- def try_param_comment(comment)
225
- m = comment.match(PARAM_RE)
226
- return false unless m
227
-
228
- p = AST::PTypeNode.new(
229
- p_type: normalize_type(m[1]),
230
- p_name: m[2],
231
- kind: AST::PTypeNode::KIND[:normal],
232
- )
233
- @p_types[p.p_name] = p
234
-
235
- true
236
- end
237
-
238
- # @param [String] comment
239
- # @return [bool]
240
- def try_return_comment(comment)
241
- m = comment.match(RETURN_RE)
242
- return false unless m
243
-
244
- @r_type = normalize_type(m[1])
245
-
246
- true
247
- end
248
165
 
249
166
  # @param [Array] r_ast
250
167
  # @return [Array<AST::PNode>]
@@ -504,12 +421,74 @@ module Yard2steep
504
421
  }
505
422
  var_type = r_ast[1][1][0]
506
423
  if var_type == :@const
507
- # TODO(south37) Check the value node to predict the type of the const.
508
- c = AST::ConstantNode.new(
509
- name: r_ast[1][1][1],
510
- klass: @current_class,
511
- )
512
- @current_class.append_constant(c)
424
+ parse_assign_constant(name: r_ast[1][1][1], v_ast: r_ast[2])
425
+ end
426
+ end
427
+
428
+ # @param [String] name
429
+ # @param [Array] v_ast
430
+ # @return [void]
431
+ def parse_assign_constant(name:, v_ast:)
432
+ c = AST::ConstantNode.new(
433
+ name: name,
434
+ klass: @current_class,
435
+ v_type: type_of(v_ast),
436
+ )
437
+ @current_class.append_constant(c)
438
+ end
439
+
440
+ # @param [Array] r_ast
441
+ # @return [String]
442
+ def type_of(r_ast)
443
+ # NOTE: r_ast is array such as
444
+ #
445
+ # String example:
446
+ # [:string_literal,
447
+ # [:string_content,
448
+ # [:@tstring_content, "String...", [34, 15]]
449
+ # ]
450
+ # ]
451
+ #
452
+ # Regexp example:
453
+ # [:regexp_literal,
454
+ # [
455
+ # [:@tstring_content, "this is re", [35, 15]]
456
+ # ],
457
+ # [:@regexp_end, "/", [35, 25]]
458
+ # ]
459
+ #
460
+ # nil example:
461
+ # [:var_ref, [:@kw, "nil", [40, 14]]]
462
+
463
+ case r_ast[0]
464
+ when :string_literal
465
+ 'String'
466
+ when :regexp_literal
467
+ 'Regexp'
468
+ when :symbol_literal
469
+ 'Symbol'
470
+ when :dot2
471
+ 'Range<any>'
472
+ when :@int
473
+ 'Integer'
474
+ when :@float
475
+ 'Float'
476
+ when :array
477
+ 'Array<any>' # TODO(south37): check type of element
478
+ when :hash
479
+ 'Hash<any, any>' # TODO(south37): check type of element
480
+ when :var_ref
481
+ Util.assert! { r_ast[1].is_a?(Array) && r_ast[1][0] == :@kw }
482
+ case r_ast[1][1]
483
+ when 'true', 'false'
484
+ 'bool'
485
+ when 'nil'
486
+ 'nil'
487
+ else
488
+ 'any'
489
+ end
490
+ else
491
+ 'any'
513
492
  end
514
493
  end
515
494
 
@@ -657,30 +636,6 @@ module Yard2steep
657
636
  end
658
637
  end
659
638
 
660
- # @param [String] text
661
- # @return [Hash{ String => String }]
662
- def extract_comments(text)
663
- # NOTE: `Ripper.lex` returns array of array such as
664
- # [
665
- # [[1, 0], :on_comment, "# @param [Array] contents\n", EXPR_BEG],
666
- # ...
667
- # ]
668
- r = {}
669
- Ripper.lex(text).each do |t|
670
- # Check token type
671
- type = t[1]
672
- next if type != :on_comment
673
- # Check comment body
674
- comment = t[2]
675
- next unless comment.match?(COMMENT_RE)
676
-
677
- line = t[0][0]
678
- r[line] = comment
679
- end
680
-
681
- r
682
- end
683
-
684
639
  ##
685
640
  # Helper
686
641
 
@@ -694,35 +649,32 @@ module Yard2steep
694
649
  # @return [AST::PTypeNode]
695
650
  def type_node(p)
696
651
  if @p_types[p]
697
- @p_types[p]
652
+ type = @p_types[p]
698
653
  else
699
- AST::PTypeNode.new(
700
- p_type: ANY_TYPE,
701
- p_name: p,
702
- kind: AST::PTypeNode::KIND[:normal],
703
- )
654
+ type = ANY_TYPE
704
655
  end
656
+
657
+ AST::PTypeNode.new(
658
+ p_type: type,
659
+ p_name: p,
660
+ kind: AST::PTypeNode::KIND[:normal],
661
+ )
705
662
  end
706
663
 
707
664
  # @param [String] p
708
665
  # @return [AST::PTypeNode]
709
666
  def block_type_node(p)
710
667
  if @p_types[p]
711
- @p_types[p]
668
+ type = @p_types[p]
712
669
  else
713
- AST::PTypeNode.new(
714
- p_type: ANY_BLOCK_TYPE,
715
- p_name: p,
716
- kind: AST::PTypeNode::KIND[:block],
717
- )
670
+ type = ANY_BLOCK_TYPE
718
671
  end
719
- end
720
672
 
721
- # @param [String] type
722
- # @return [String]
723
- def normalize_type(type)
724
- debug_print! type
725
- Type.translate(type)
673
+ AST::PTypeNode.new(
674
+ p_type: type,
675
+ p_name: p,
676
+ kind: AST::PTypeNode::KIND[:block],
677
+ )
726
678
  end
727
679
  end
728
680
  end
@@ -1,14 +1,13 @@
1
1
  module Yard2steep
2
2
  class Type
3
3
  class TypeBase
4
- # @param [Array<TypeBase>] types
5
- # @return [String]
6
- def self.union2s(types)
7
- types.map { |t| t.to_s }.uniq.join(' | ')
4
+ def to_s
5
+ raise "Must be implemented in child class"
8
6
  end
9
7
  end
10
8
 
11
9
  class AnyType < TypeBase
10
+ # @return [String]
12
11
  def to_s
13
12
  'any'
14
13
  end
@@ -26,26 +25,40 @@ module Yard2steep
26
25
  end
27
26
 
28
27
  class ArrayType < TypeBase
29
- # @param [Array<TypeBase>] type
28
+ # @param [TypeBase] type
30
29
  def initialize(type:)
31
30
  @type = type
32
31
  end
33
32
 
33
+ # @return [String]
34
34
  def to_s
35
- "Array<#{TypeBase.union2s(@type)}>"
35
+ "Array<#{@type}>"
36
36
  end
37
37
  end
38
38
 
39
39
  class HashType < TypeBase
40
- # @param [Array<TypeBase>] key
41
- # @param [Array<TypeBase>] val
40
+ # @param [TypeBase] key
41
+ # @param [TypeBase] val
42
42
  def initialize(key:, val:)
43
43
  @key = key
44
44
  @val = val
45
45
  end
46
46
 
47
+ # @return [String]
48
+ def to_s
49
+ "Hash<#{@key}, #{@val}>"
50
+ end
51
+ end
52
+
53
+ class UnionType < TypeBase
54
+ def initialize(types:)
55
+ Util.assert! { types.size > 0 }
56
+ @types = types
57
+ end
58
+
59
+ # @return [String]
47
60
  def to_s
48
- "Hash<#{TypeBase.union2s(@key)}, #{TypeBase.union2s(@val)}>"
61
+ @types.map { |t| t.to_s }.uniq.join(' | ')
49
62
  end
50
63
  end
51
64
  end
@@ -25,7 +25,7 @@ module Yard2steep
25
25
  @types.push(parse_type)
26
26
  end
27
27
 
28
- @types
28
+ UnionType.new(types: @types)
29
29
  end
30
30
 
31
31
  private
@@ -69,7 +69,7 @@ module Yard2steep
69
69
  r.push(parse_type)
70
70
 
71
71
  while t = peek
72
- break if t != ','
72
+ break unless t == ','
73
73
  expect!(',')
74
74
  r.push(parse_type)
75
75
  end
@@ -85,19 +85,19 @@ module Yard2steep
85
85
  case peek
86
86
  when '<'
87
87
  expect!('<')
88
- ArrayType.new(
89
- type: parse_multiple_types('>')
88
+ type = UnionType.new(
89
+ types: parse_multiple_types('>')
90
90
  )
91
91
  when '('
92
92
  expect!('(')
93
- ArrayType.new(
94
- type: parse_multiple_types(')')
93
+ type = UnionType.new(
94
+ types: parse_multiple_types(')')
95
95
  )
96
96
  else
97
- ArrayType.new(
98
- type: [AnyType.new]
99
- )
97
+ type = AnyType.new
100
98
  end
99
+
100
+ ArrayType.new(type: type)
101
101
  end
102
102
 
103
103
  # @return [HashType]
@@ -107,20 +107,18 @@ module Yard2steep
107
107
  case peek
108
108
  when '{'
109
109
  expect!('{')
110
- key = parse_multiple_types('=')
111
- Util.assert! { key.size > 0 }
112
-
110
+ key = UnionType.new(types: parse_multiple_types('='))
113
111
  expect!('>')
114
- val = parse_multiple_types('}')
115
- Util.assert! { val.size > 0 }
112
+ val = UnionType.new(types: parse_multiple_types('}'))
113
+
116
114
  HashType.new(
117
115
  key: key,
118
116
  val: val,
119
117
  )
120
118
  else
121
119
  HashType.new(
122
- key: [AnyType.new],
123
- val: [AnyType.new],
120
+ key: AnyType.new,
121
+ val: AnyType.new,
124
122
  )
125
123
  end
126
124
  end
@@ -131,15 +129,18 @@ module Yard2steep
131
129
  Util.assert! { t == token }
132
130
  end
133
131
 
132
+ # @return [String]
134
133
  def get
135
134
  @tokens.shift
136
135
  end
137
136
 
137
+ # @return [String]
138
138
  def peek
139
139
  @tokens[0]
140
140
  end
141
141
 
142
142
  # @param [String] message
143
+ # @return [void]
143
144
  def debug_print!(message)
144
145
  # TODO(south37) Add flag
145
146
  # print message
@@ -19,7 +19,7 @@ module Yard2steep
19
19
  def translate
20
20
  tokens = tokens(@text)
21
21
  ast = Parser.parse(tokens)
22
- TypeBase.union2s(ast)
22
+ ast.to_s
23
23
  end
24
24
 
25
25
  S_RE = /[\s\t]*/
@@ -1,3 +1,3 @@
1
1
  module Yard2steep
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -1,15 +1,34 @@
1
+ class Yard2steep::Comments
2
+ @comments_map: any
3
+ @p_types: any
4
+ @r_type: any
5
+ def initialize: (any) -> any
6
+ def parse_from: (any) -> Array<any>
7
+ def reset_context!: () -> any
8
+ def extract: (any) -> any
9
+ def parse_comment!: (any) -> any
10
+ def try_param_comment: (any) -> bool
11
+ def try_return_comment: (any) -> bool
12
+ def normalize_type: (any) -> any
13
+ end
14
+
15
+ Yard2steep::Comments::S_RE: Regexp
16
+ Yard2steep::Comments::TYPE_WITH_PAREN_RE: Regexp
17
+ Yard2steep::Comments::COMMENT_RE: Regexp
18
+ Yard2steep::Comments::PARAM_RE: Regexp
19
+ Yard2steep::Comments::RETURN_RE: Regexp
1
20
  module Yard2steep::AST
2
21
  end
3
22
 
4
23
  class Yard2steep::Parser
5
24
  @debug: any
6
25
  @file: any
7
- @comments_map: any
26
+ @comments: any
8
27
  @ast: any
9
28
  @current_class: any
10
- @r_type: any
11
29
  @p_types: any
12
- def initialize: () -> Hash<any, any>
30
+ @r_type: any
31
+ def initialize: () -> any
13
32
  def parse: (any, any, ?debug: bool) -> any
14
33
  def parse_program: (any) -> any
15
34
  def parse_stmts: (any) -> any
@@ -17,10 +36,6 @@ class Yard2steep::Parser
17
36
  def parse_defs: (any) -> any
18
37
  def parse_def: (any) -> any
19
38
  def parse_method_impl: (any, any, any) -> any
20
- def extract_p_types!: (any) -> void
21
- def parse_comment!: (any) -> any
22
- def try_param_comment: (any) -> bool
23
- def try_return_comment: (any) -> bool
24
39
  def parse_params: (any) -> any
25
40
  def parse_paren_params: (any) -> any
26
41
  def parse_no_paren_params: (any) -> any
@@ -28,22 +43,17 @@ class Yard2steep::Parser
28
43
  def parse_class_or_module: (any) -> any
29
44
  def parse_bodystmt: (any) -> any
30
45
  def parse_assign: (any) -> void
46
+ def parse_assign_constant: (name: any, v_ast: any) -> any
47
+ def type_of: (any) -> String
31
48
  def parse_command: (any) -> void
32
49
  def parse_command_args_add_block: (any) -> any
33
50
  def parse_method_add_arg: (any) -> void
34
51
  def parse_attr_reader: (any) -> any
35
- def extract_comments: (any) -> any
36
52
  def debug_print!: (any) -> void
37
53
  def type_node: (any) -> any
38
54
  def block_type_node: (any) -> any
39
- def normalize_type: (any) -> any
40
55
  end
41
56
 
42
- Yard2steep::Parser::S_RE: Regexp
43
- Yard2steep::Parser::TYPE_WITH_PAREN_RE: Regexp
44
- Yard2steep::Parser::COMMENT_RE: Regexp
45
- Yard2steep::Parser::PARAM_RE: Regexp
46
- Yard2steep::Parser::RETURN_RE: Regexp
47
57
  Yard2steep::Parser::ANY_TYPE: String
48
58
  Yard2steep::Parser::ANY_BLOCK_TYPE: String
49
59
  class Yard2steep::CLI
@@ -73,7 +83,7 @@ class Yard2steep::Engine
73
83
  end
74
84
 
75
85
  class Yard2steep::Type::TypeBase
76
- def self.union2s: (any) -> any
86
+ def to_s: () -> any
77
87
  end
78
88
 
79
89
  class Yard2steep::Type::AnyType
@@ -99,6 +109,12 @@ class Yard2steep::Type::HashType
99
109
  def to_s: () -> String
100
110
  end
101
111
 
112
+ class Yard2steep::Type::UnionType
113
+ @types: any
114
+ def initialize: (types: any) -> any
115
+ def to_s: () -> any
116
+ end
117
+
102
118
  class Yard2steep::Type::Parser
103
119
  @tokens: any
104
120
  @types: any
@@ -167,7 +183,8 @@ Yard2steep::AST::ClassNode::KIND: Array<any>
167
183
  class Yard2steep::AST::ConstantNode
168
184
  @name: any
169
185
  @klass: any
170
- def initialize: (name: any, klass: any) -> any
186
+ @v_type: any
187
+ def initialize: (name: any, klass: any, v_type: any) -> any
171
188
  def long_name: () -> String
172
189
  end
173
190
 
@@ -26,4 +26,4 @@ class Yard2steep::AST::ClassNode
26
26
  def to_s: -> String
27
27
  def inspect: -> String
28
28
  end
29
- Yard2steep::AST::ClassNode::KIND: any
29
+ Yard2steep::AST::ClassNode::KIND: Array<any>
@@ -1,8 +1,10 @@
1
1
  class Yard2steep::AST::ConstantNode
2
2
  @name: any
3
3
  @klass: any
4
+ @v_type: any
4
5
  def name: -> any
5
6
  def klass: -> any
6
- def initialize: (name: String, klass: String) -> any
7
+ def v_type: -> any
8
+ def initialize: (name: String, klass: String, v_type: String) -> any
7
9
  def long_name: -> String
8
10
  end
@@ -5,4 +5,4 @@ class Yard2steep::AST::PNode
5
5
  def style: -> any
6
6
  def initialize: (type_node: AST::PTypeNode, style: String) -> any
7
7
  end
8
- Yard2steep::AST::PNode::STYLE: any
8
+ Yard2steep::AST::PNode::STYLE: Hash<any, any>
@@ -7,4 +7,4 @@ class Yard2steep::AST::PTypeNode
7
7
  def kind: -> any
8
8
  def initialize: (p_type: String, p_name: String, kind: String) -> any
9
9
  end
10
- Yard2steep::AST::PTypeNode::KIND: any
10
+ Yard2steep::AST::PTypeNode::KIND: Hash<any, any>
@@ -0,0 +1,15 @@
1
+ class Yard2steep::Comments
2
+ def initialize: (String) -> any
3
+ def parse_from: (Integer) -> Array<Hash<String, String> | String>
4
+ def reset_context!: -> void
5
+ def extract: (String) -> Hash<String, String>
6
+ def parse_comment!: (String) -> void
7
+ def try_param_comment: (String) -> bool
8
+ def try_return_comment: (String) -> bool
9
+ def normalize_type: (String) -> String
10
+ end
11
+ Yard2steep::Comments::S_RE: Regexp
12
+ Yard2steep::Comments::TYPE_WITH_PAREN_RE: Regexp
13
+ Yard2steep::Comments::COMMENT_RE: Regexp
14
+ Yard2steep::Comments::PARAM_RE: Regexp
15
+ Yard2steep::Comments::RETURN_RE: Regexp
@@ -7,10 +7,6 @@ class Yard2steep::Parser
7
7
  def parse_defs: (Array<any>) -> void
8
8
  def parse_def: (Array<any>) -> void
9
9
  def parse_method_impl: (String, Integer, Array<any>) -> void
10
- def extract_p_types!: (Integer) -> void
11
- def parse_comment!: (String) -> void
12
- def try_param_comment: (String) -> bool
13
- def try_return_comment: (String) -> bool
14
10
  def parse_params: (Array<any>) -> Array<AST::PNode>
15
11
  def parse_paren_params: (Array<any>) -> Array<AST::PNode>
16
12
  def parse_no_paren_params: (Array<any>) -> Array<AST::PNode>
@@ -18,20 +14,15 @@ class Yard2steep::Parser
18
14
  def parse_class_or_module: (Array<any>) -> void
19
15
  def parse_bodystmt: (Array<any>) -> void
20
16
  def parse_assign: (Array<any>) -> void
17
+ def parse_assign_constant: (name: String, v_ast: Array<any>) -> void
18
+ def type_of: (Array<any>) -> String
21
19
  def parse_command: (Array<any>) -> void
22
20
  def parse_command_args_add_block: (Array<any>) -> Array<String>
23
21
  def parse_method_add_arg: (Array<any>) -> void
24
22
  def parse_attr_reader: (any) -> void
25
- def extract_comments: (String) -> Hash<String, String>
26
23
  def debug_print!: (String) -> void
27
24
  def type_node: (String) -> AST::PTypeNode
28
25
  def block_type_node: (String) -> AST::PTypeNode
29
- def normalize_type: (String) -> String
30
26
  end
31
- Yard2steep::Parser::S_RE: any
32
- Yard2steep::Parser::TYPE_WITH_PAREN_RE: any
33
- Yard2steep::Parser::COMMENT_RE: any
34
- Yard2steep::Parser::PARAM_RE: any
35
- Yard2steep::Parser::RETURN_RE: any
36
- Yard2steep::Parser::ANY_TYPE: any
37
- Yard2steep::Parser::ANY_BLOCK_TYPE: any
27
+ Yard2steep::Parser::ANY_TYPE: String
28
+ Yard2steep::Parser::ANY_BLOCK_TYPE: String
@@ -1,18 +1,22 @@
1
1
  class Yard2steep::Type::TypeBase
2
- def self.union2s: (Array<TypeBase>) -> String
2
+ def to_s: -> any
3
3
  end
4
4
  class Yard2steep::Type::AnyType <: Yard2steep::Type::TypeBase
5
- def to_s: -> any
5
+ def to_s: -> String
6
6
  end
7
7
  class Yard2steep::Type::NormalType <: Yard2steep::Type::TypeBase
8
8
  def initialize: (type: String) -> any
9
9
  def to_s: -> any
10
10
  end
11
11
  class Yard2steep::Type::ArrayType <: Yard2steep::Type::TypeBase
12
- def initialize: (type: Array<TypeBase>) -> any
13
- def to_s: -> any
12
+ def initialize: (type: TypeBase) -> any
13
+ def to_s: -> String
14
14
  end
15
15
  class Yard2steep::Type::HashType <: Yard2steep::Type::TypeBase
16
- def initialize: (key: Array<TypeBase>, val: Array<TypeBase>) -> any
17
- def to_s: -> any
16
+ def initialize: (key: TypeBase, val: TypeBase) -> any
17
+ def to_s: -> String
18
+ end
19
+ class Yard2steep::Type::UnionType <: Yard2steep::Type::TypeBase
20
+ def initialize: (types: any) -> any
21
+ def to_s: -> String
18
22
  end
@@ -8,7 +8,7 @@ class Yard2steep::Type::Parser
8
8
  def parse_array: -> ArrayType
9
9
  def parse_hash: -> HashType
10
10
  def expect!: (String) -> any
11
- def get: -> any
12
- def peek: -> any
13
- def debug_print!: (String) -> any
11
+ def get: -> String
12
+ def peek: -> String
13
+ def debug_print!: (String) -> void
14
14
  end
@@ -4,5 +4,5 @@ class Yard2steep::Type
4
4
  def translate: -> String
5
5
  def tokens: (String) -> Array<String>
6
6
  end
7
- Yard2steep::Type::S_RE: any
8
- Yard2steep::Type::TOKENS: any
7
+ Yard2steep::Type::S_RE: Regexp
8
+ Yard2steep::Type::TOKENS: Regexp
@@ -1 +1 @@
1
- Yard2steep::VERSION: any
1
+ Yard2steep::VERSION: String
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yard2steep
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nao Minami
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-07-08 00:00:00.000000000 Z
11
+ date: 2018-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -129,6 +129,7 @@ files:
129
129
  - lib/yard2steep/ast/p_type_node.rb
130
130
  - lib/yard2steep/cli.rb
131
131
  - lib/yard2steep/cli/option.rb
132
+ - lib/yard2steep/comments.rb
132
133
  - lib/yard2steep/engine.rb
133
134
  - lib/yard2steep/gen.rb
134
135
  - lib/yard2steep/parser.rb
@@ -148,6 +149,7 @@ files:
148
149
  - sig/yard2steep/yard2steep/ast/p_type_node.rbi
149
150
  - sig/yard2steep/yard2steep/cli.rbi
150
151
  - sig/yard2steep/yard2steep/cli/option.rbi
152
+ - sig/yard2steep/yard2steep/comments.rbi
151
153
  - sig/yard2steep/yard2steep/engine.rbi
152
154
  - sig/yard2steep/yard2steep/gen.rbi
153
155
  - sig/yard2steep/yard2steep/parser.rbi