rucoa 0.8.0 → 0.9.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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/data/definitions_ruby_3_1 +0 -0
  4. data/lib/rucoa/definition_store.rb +114 -54
  5. data/lib/rucoa/definitions/class_definition.rb +70 -4
  6. data/lib/rucoa/definitions/constant_definition.rb +7 -7
  7. data/lib/rucoa/definitions/method_definition.rb +4 -4
  8. data/lib/rucoa/handlers/initialized_handler.rb +33 -5
  9. data/lib/rucoa/handlers/text_document_completion_handler.rb +1 -1
  10. data/lib/rucoa/handlers/text_document_definition_handler.rb +7 -7
  11. data/lib/rucoa/handlers/text_document_did_open_handler.rb +1 -4
  12. data/lib/rucoa/node_concerns/{name_full_qualifiable.rb → name_fully_qualifiable.rb} +2 -2
  13. data/lib/rucoa/node_concerns.rb +1 -1
  14. data/lib/rucoa/node_inspector.rb +18 -17
  15. data/lib/rucoa/nodes/base.rb +30 -5
  16. data/lib/rucoa/nodes/casgn_node.rb +1 -1
  17. data/lib/rucoa/nodes/cbase_node.rb +8 -0
  18. data/lib/rucoa/nodes/class_node.rb +62 -1
  19. data/lib/rucoa/nodes/const_node.rb +46 -5
  20. data/lib/rucoa/nodes/def_node.rb +11 -9
  21. data/lib/rucoa/nodes/defs_node.rb +21 -0
  22. data/lib/rucoa/nodes/lvar_node.rb +2 -1
  23. data/lib/rucoa/nodes/module_node.rb +1 -1
  24. data/lib/rucoa/nodes/send_node.rb +14 -10
  25. data/lib/rucoa/nodes.rb +1 -0
  26. data/lib/rucoa/parse_result.rb +29 -0
  27. data/lib/rucoa/parser.rb +40 -8
  28. data/lib/rucoa/parser_builder.rb +1 -0
  29. data/lib/rucoa/rbs/class_definition_mapper.rb +4 -4
  30. data/lib/rucoa/rbs/constant_definition_mapper.rb +2 -2
  31. data/lib/rucoa/rbs/module_definition_mapper.rb +2 -2
  32. data/lib/rucoa/rubocop/autocorrector.rb +2 -2
  33. data/lib/rucoa/rubocop/investigator.rb +2 -2
  34. data/lib/rucoa/server.rb +1 -1
  35. data/lib/rucoa/source.rb +42 -27
  36. data/lib/rucoa/source_store.rb +0 -13
  37. data/lib/rucoa/version.rb +1 -1
  38. data/lib/rucoa/yard/definitions_loader.rb +308 -59
  39. data/lib/rucoa/yard/type.rb +46 -0
  40. data/lib/rucoa/yard.rb +1 -1
  41. data/lib/rucoa.rb +1 -0
  42. metadata +6 -4
  43. data/lib/rucoa/yard/method_definition_mapper.rb +0 -215
data/lib/rucoa/source.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'uri'
4
+
3
5
  module Rucoa
4
6
  class Source
5
7
  # @return [String]
@@ -9,8 +11,8 @@ module Rucoa
9
11
  attr_reader :uri
10
12
 
11
13
  # @param content [String]
12
- # @param uri [String, nil]
13
- def initialize(content:, uri: nil)
14
+ # @param uri [String]
15
+ def initialize(content:, uri:)
14
16
  @content = content
15
17
  @uri = uri
16
18
  end
@@ -34,34 +36,36 @@ module Rucoa
34
36
  # ]
35
37
  # )
36
38
  def definitions
37
- @definitions ||= Yard::DefinitionsLoader.load_string(
38
- content: @content,
39
- path: path
40
- )
39
+ @definitions ||=
40
+ if parse_result.failed?
41
+ []
42
+ else
43
+ Yard::DefinitionsLoader.call(
44
+ associations: parse_result.associations,
45
+ root_node: parse_result.root_node
46
+ )
47
+ end
41
48
  end
42
49
 
43
50
  # @return [String, nil]
44
- # @example returns path from given VSCode URI
51
+ # @example returns path for file URI
45
52
  # source = Rucoa::Source.new(
46
53
  # content: '',
47
54
  # uri: 'file:///path/to/foo.rb'
48
55
  # )
49
- # expect(source.path).to eq('/path/to/foo.rb')
50
- # @example returns name for untitled URI
56
+ # expect(source.name).to eq('/path/to/foo.rb')
57
+ # @example returns opaque for untitled URI
51
58
  # source = Rucoa::Source.new(
52
59
  # content: '',
53
60
  # uri: 'untitled:Untitled-1'
54
61
  # )
55
- # expect(source.path).to eq('Untitled-1')
56
- def path
57
- return unless @uri
58
-
59
- return @uri.split(':', 2).last if untitled?
60
-
61
- path = ::URI.parse(@uri).path
62
- return unless path
63
-
64
- ::CGI.unescape(path)
62
+ # expect(source.name).to eq('Untitled-1')
63
+ def name
64
+ if untitled?
65
+ uri_object.opaque
66
+ else
67
+ uri_object.path
68
+ end
65
69
  end
66
70
 
67
71
  # @param position [Rucoa::Position]
@@ -70,34 +74,45 @@ module Rucoa
70
74
  root_and_descendant_nodes.reverse.find do |node|
71
75
  node.include_position?(position)
72
76
  end
73
- rescue ::Parser::SyntaxError
74
- nil
75
77
  end
76
78
 
77
79
  # @return [Rucoa::Nodes::Base, nil]
78
80
  def root_node
79
- @root_node ||= Parser.call(@content)
80
- rescue ::Parser::SyntaxError
81
- nil
81
+ parse_result.root_node
82
82
  end
83
83
 
84
84
  # @return [Boolean]
85
- def syntax_error?
86
- root_node.nil?
85
+ def failed_to_parse?
86
+ parse_result.failed?
87
87
  end
88
88
 
89
89
  # @return [Boolean]
90
90
  def untitled?
91
- @uri&.start_with?('untitled:')
91
+ uri_object.scheme == 'untitled'
92
92
  end
93
93
 
94
94
  private
95
95
 
96
+ # @return [Rucoa::ParseResult]
97
+ def parse_result
98
+ return @parse_result if instance_variable_defined?(:@parse_result)
99
+
100
+ @parse_result = Parser.call(
101
+ path: name,
102
+ text: @content
103
+ )
104
+ end
105
+
96
106
  # @return [Array<Rucoa::Nodes::Base>]
97
107
  def root_and_descendant_nodes
98
108
  return [] unless root_node
99
109
 
100
110
  [root_node, *root_node.descendants]
101
111
  end
112
+
113
+ # @return [URI]
114
+ def uri_object
115
+ @uri_object ||= ::URI.parse(@uri)
116
+ end
102
117
  end
103
118
  end
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'cgi'
4
- require 'uri'
5
-
6
3
  module Rucoa
7
4
  class SourceStore
8
5
  def initialize
@@ -26,15 +23,5 @@ module Rucoa
26
23
  def each_uri(&block)
27
24
  @data.each_key(&block)
28
25
  end
29
-
30
- private
31
-
32
- # @param uri [String]
33
- # @return [String]
34
- def path_from_uri(uri)
35
- ::CGI.unescape(
36
- ::URI.parse(uri).path || 'untitled'
37
- )
38
- end
39
26
  end
40
27
  end
data/lib/rucoa/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rucoa
4
- VERSION = '0.8.0'
4
+ VERSION = '0.9.0'
5
5
  end
@@ -1,83 +1,332 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'logger'
4
+ require 'set'
4
5
  require 'yard'
5
6
 
6
7
  module Rucoa
7
8
  module Yard
8
9
  class DefinitionsLoader
9
10
  class << self
10
- # @param content [String]
11
- # @return [Array<Rucoa::Definitions::Base>]
12
- # @example returns method definitions from Ruby source code
13
- # content = <<~RUBY
14
- # class Foo
15
- # # Return given argument as an Integer.
16
- # # @param bar [String]
17
- # # @return [Integer]
18
- # def foo(bar)
19
- # bar.to_i
20
- # end
21
- # end
22
- # RUBY
23
- # definitions = Rucoa::Yard::DefinitionsLoader.load_string(
24
- # content: content,
25
- # path: '/path/to/foo.rb'
26
- # )
27
- # expect(definitions.size).to eq(2)
28
- # expect(definitions[1].full_qualified_name).to eq('Foo#foo')
29
- # expect(definitions[1].source_path).to eq('/path/to/foo.rb')
30
- # expect(definitions[1].description).to eq('Return given argument as an Integer.')
31
- # expect(definitions[1].return_types).to eq(%w[Integer])
32
- def load_string(content:, path:)
33
- load(path: path) do
34
- ::YARD.parse_string(content)
35
- end
11
+ # @param associations [Hash]
12
+ # @param root_node [Rucoa::Nodes::Base]
13
+ def call(
14
+ associations:,
15
+ root_node:
16
+ )
17
+ new(
18
+ associations: associations,
19
+ root_node: root_node
20
+ ).call
36
21
  end
22
+ end
37
23
 
38
- # @param globs [String]
39
- # @return [Array<Rucoa::Definitions::Base>]
40
- def load_globs(globs:)
41
- load do
42
- ::YARD.parse(globs)
24
+ # @param associations [Hash]
25
+ # @param root_node [Rucoa::Nodes::Base]
26
+ def initialize(
27
+ associations:,
28
+ root_node:
29
+ )
30
+ @associations = associations
31
+ @root_node = root_node
32
+ end
33
+
34
+ # @return [Array<Rucoa::Definition::Base>]
35
+ def call
36
+ [
37
+ @root_node,
38
+ *@root_node.descendants
39
+ ].flat_map do |node|
40
+ [
41
+ DefinitionGenerators::ClassDefinitionGenerator,
42
+ DefinitionGenerators::MethodDefinitionGenerator,
43
+ DefinitionGenerators::ModuleDefinitionGenerator,
44
+ DefinitionGenerators::AttributeReaderDefinitionGenerator,
45
+ DefinitionGenerators::AttributeWriterDefinitionGenerator
46
+ ].flat_map do |generator|
47
+ generator.call(
48
+ comment: comment_for(node),
49
+ node: node
50
+ )
43
51
  end
44
52
  end
53
+ end
45
54
 
46
- private
47
-
48
- # @param code_object [YARD::CodeObjects::Base]
49
- # @param path [String, nil]
50
- # @return [Rucoa::Definitions::Base, nil]
51
- def map(code_object, path:)
52
- case code_object
53
- when ::YARD::CodeObjects::ClassObject
54
- Definitions::ClassDefinition.new(
55
- full_qualified_name: code_object.path,
56
- source_path: path || code_object.file,
57
- super_class_name: code_object.superclass.to_s # TODO: superclass may not include full namespace on `YARD.parse_string`.
58
- )
59
- when ::YARD::CodeObjects::ModuleObject
60
- Definitions::ModuleDefinition.new(
61
- full_qualified_name: code_object.path,
62
- source_path: path || code_object.file
55
+ # @return [String]
56
+ def comment_for(node)
57
+ @associations[node.location].map do |parser_comment|
58
+ parser_comment.text.gsub(/^#\s*/m, '')
59
+ end.join("\n")
60
+ end
61
+
62
+ module DefinitionGenerators
63
+ class Base
64
+ class << self
65
+ # @param comment [String]
66
+ # @param node [Rucoa::Nodes::Base]
67
+ # @return [Array<Rucoa::Definitions::Base>]
68
+ def call(
69
+ comment:,
70
+ node:
63
71
  )
64
- when ::YARD::CodeObjects::MethodObject
65
- MethodDefinitionMapper.call(code_object, path: path)
72
+ new(
73
+ comment: comment,
74
+ node: node
75
+ ).call
76
+ end
77
+ end
78
+
79
+ # @param comment [String]
80
+ # @param node [Rucoa::Nodes::Base]
81
+ def initialize(
82
+ comment:,
83
+ node:
84
+ )
85
+ @comment = comment
86
+ @node = node
87
+ end
88
+
89
+ # @return [Array<Rucoa::Definitions::Base>]
90
+ def call
91
+ raise ::NotImplementedError
92
+ end
93
+
94
+ private
95
+
96
+ # @return [YARD::DocstringParser]
97
+ def docstring_parser
98
+ @docstring_parser ||= ::YARD::Logger.instance.enter_level(::Logger::FATAL) do
99
+ ::YARD::Docstring.parser.parse(
100
+ @comment,
101
+ ::YARD::CodeObjects::Base.new(:root, 'stub')
102
+ )
103
+ end
104
+ end
105
+
106
+ # @return [Array<String>]
107
+ # @example returns annotated return types if return tag is provided
108
+ # definitions = Rucoa::Source.new(
109
+ # content: <<~RUBY,
110
+ # # @return [String]
111
+ # def foo
112
+ # end
113
+ # RUBY
114
+ # uri: '/path/to/foo.rb'
115
+ # ).definitions
116
+ # expect(definitions[0].return_types).to eq(%w[String])
117
+ # @example returns Object if no return tag is provided
118
+ # definitions = Rucoa::Source.new(
119
+ # content: <<~RUBY,
120
+ # def foo
121
+ # end
122
+ # RUBY
123
+ # uri: '/path/to/foo.rb'
124
+ # ).definitions
125
+ # expect(definitions[0].return_types).to eq(%w[Object])
126
+ def return_types
127
+ types = docstring_parser.tags.select do |tag|
128
+ tag.tag_name == 'return'
129
+ end.flat_map(&:types).compact.map do |yard_type|
130
+ Type.new(yard_type).to_rucoa_type
131
+ end
132
+ if types.empty?
133
+ %w[Object]
134
+ else
135
+ types
136
+ end
66
137
  end
67
138
  end
68
139
 
69
- # @param path [String, nil]
70
- # @return [Array<Rucoa::Definitions::Base>]
71
- def load(path: nil, &block)
72
- ::YARD::Registry.clear
73
- quietly(&block)
74
- ::YARD::Registry.all.filter_map do |code_object|
75
- map(code_object, path: path)
140
+ class ClassDefinitionGenerator < Base
141
+ # @example returns class definition for class node
142
+ # definitions = Rucoa::Source.new(
143
+ # content: <<~RUBY,
144
+ # class Foo
145
+ # end
146
+ # RUBY
147
+ # uri: '/path/to/foo.rb'
148
+ # ).definitions
149
+ # expect(definitions[0]).to be_a(Rucoa::Definitions::ClassDefinition)
150
+ def call
151
+ return [] unless @node.is_a?(Nodes::ClassNode)
152
+
153
+ [
154
+ Definitions::ClassDefinition.new(
155
+ fully_qualified_name: @node.fully_qualified_name,
156
+ module_nesting: @node.module_nesting,
157
+ source_path: @node.location.expression.source_buffer.name,
158
+ super_class_chained_name: @node.super_class_chained_name
159
+ )
160
+ ]
161
+ end
162
+ end
163
+
164
+ class ModuleDefinitionGenerator < Base
165
+ # @example returns module definition for module node
166
+ # definitions = Rucoa::Source.new(
167
+ # content: <<~RUBY,
168
+ # module Foo
169
+ # end
170
+ # RUBY
171
+ # uri: '/path/to/foo.rb'
172
+ # ).definitions
173
+ # expect(definitions[0]).to be_a(Rucoa::Definitions::ModuleDefinition)
174
+ def call
175
+ return [] unless @node.is_a?(Nodes::ModuleNode)
176
+
177
+ [
178
+ Definitions::ModuleDefinition.new(
179
+ fully_qualified_name: @node.fully_qualified_name,
180
+ source_path: @node.location.expression.source_buffer.name
181
+ )
182
+ ]
183
+ end
184
+ end
185
+
186
+ class MethodDefinitionGenerator < Base
187
+ # @example returns method definition for def node
188
+ # definitions = Rucoa::Source.new(
189
+ # content: <<~RUBY,
190
+ # def foo
191
+ # end
192
+ # RUBY
193
+ # uri: '/path/to/foo.rb'
194
+ # ).definitions
195
+ # expect(definitions[0]).to be_a(Rucoa::Definitions::MethodDefinition)
196
+ # @example returns method definition for defs node
197
+ # definitions = Rucoa::Source.new(
198
+ # content: <<~RUBY,
199
+ # def self.foo
200
+ # end
201
+ # RUBY
202
+ # uri: '/path/to/foo.rb'
203
+ # ).definitions
204
+ # expect(definitions[0]).to be_a(Rucoa::Definitions::MethodDefinition)
205
+ def call
206
+ return [] unless @node.is_a?(Nodes::DefNode) || @node.is_a?(Nodes::DefsNode)
207
+
208
+ [
209
+ Definitions::MethodDefinition.new(
210
+ description: docstring_parser.to_docstring.to_s,
211
+ kind: @node.singleton? ? :singleton : :instance,
212
+ method_name: @node.name,
213
+ namespace: @node.namespace,
214
+ source_path: @node.location.expression.source_buffer.name,
215
+ types: return_types.map do |type|
216
+ Types::MethodType.new(
217
+ parameters_string: '', # TODO
218
+ return_type: type
219
+ )
220
+ end
221
+ )
222
+ ]
76
223
  end
77
224
  end
78
225
 
79
- def quietly(&block)
80
- ::YARD::Logger.instance.enter_level(::Logger::FATAL, &block)
226
+ class AttributeReaderDefinitionGenerator < Base
227
+ READER_METHOD_NAMES = ::Set[
228
+ 'attr_accessor',
229
+ 'attr_reader'
230
+ ].freeze
231
+
232
+ # @example returns method definition for attr_reader node
233
+ # definitions = Rucoa::Source.new(
234
+ # content: <<~RUBY,
235
+ # class Foo
236
+ # attr_reader :bar
237
+ # end
238
+ # RUBY
239
+ # uri: '/path/to/foo.rb'
240
+ # ).definitions
241
+ # expect(definitions[1]).to be_a(Rucoa::Definitions::MethodDefinition)
242
+ # @example returns method definition for attr_accessor node
243
+ # definitions = Rucoa::Source.new(
244
+ # content: <<~RUBY,
245
+ # class Foo
246
+ # attr_accessor :bar
247
+ # end
248
+ # RUBY
249
+ # uri: '/path/to/foo.rb'
250
+ # ).definitions
251
+ # expect(definitions.map(&:fully_qualified_name)).to eq(
252
+ # %w[
253
+ # Foo
254
+ # Foo#bar
255
+ # Foo#bar=
256
+ # ]
257
+ # )
258
+ def call
259
+ return [] unless @node.is_a?(Nodes::SendNode) && READER_METHOD_NAMES.include?(@node.name)
260
+
261
+ @node.arguments.map do |argument|
262
+ Definitions::MethodDefinition.new(
263
+ description: docstring_parser.to_docstring.to_s,
264
+ kind: :instance,
265
+ method_name: argument.value.to_s,
266
+ namespace: @node.namespace,
267
+ source_path: @node.location.expression.source_buffer.name,
268
+ types: return_types.map do |type|
269
+ Types::MethodType.new(
270
+ parameters_string: '', # TODO
271
+ return_type: type
272
+ )
273
+ end
274
+ )
275
+ end
276
+ end
277
+ end
278
+
279
+ class AttributeWriterDefinitionGenerator < Base
280
+ WRITER_METHOD_NAMES = ::Set[
281
+ 'attr_accessor',
282
+ 'attr_writer'
283
+ ].freeze
284
+
285
+ # @example returns method definition for attr_writer node
286
+ # definitions = Rucoa::Source.new(
287
+ # content: <<~RUBY,
288
+ # class Foo
289
+ # attr_writer :bar
290
+ # end
291
+ # RUBY
292
+ # uri: '/path/to/foo.rb'
293
+ # ).definitions
294
+ # expect(definitions[1]).to be_a(Rucoa::Definitions::MethodDefinition)
295
+ # @example returns method definition for attr_accessor node
296
+ # definitions = Rucoa::Source.new(
297
+ # content: <<~RUBY,
298
+ # class Foo
299
+ # attr_accessor :bar
300
+ # end
301
+ # RUBY
302
+ # uri: '/path/to/foo.rb'
303
+ # ).definitions
304
+ # expect(definitions.map(&:fully_qualified_name)).to eq(
305
+ # %w[
306
+ # Foo
307
+ # Foo#bar
308
+ # Foo#bar=
309
+ # ]
310
+ # )
311
+ def call
312
+ return [] unless @node.is_a?(Nodes::SendNode) && WRITER_METHOD_NAMES.include?(@node.name)
313
+
314
+ @node.arguments.map do |argument|
315
+ Definitions::MethodDefinition.new(
316
+ description: docstring_parser.to_docstring.to_s,
317
+ kind: :instance,
318
+ method_name: "#{argument.value}=",
319
+ namespace: @node.namespace,
320
+ source_path: @node.location.expression.source_buffer.name,
321
+ types: return_types.map do |type|
322
+ Types::MethodType.new(
323
+ parameters_string: 'value', # TODO
324
+ return_type: type
325
+ )
326
+ end
327
+ )
328
+ end
329
+ end
81
330
  end
82
331
  end
83
332
  end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rucoa
4
+ module Yard
5
+ class Type
6
+ # @param value [String]
7
+ def initialize(value)
8
+ @value = value
9
+ end
10
+
11
+ # @return [String]
12
+ # @example scrubs "Array<String>" to "Array"
13
+ # yard_type = Rucoa::Yard::Type.new(
14
+ # 'Array<String>'
15
+ # )
16
+ # expect(yard_type.to_rucoa_type).to eq('Array')
17
+ # @example scrubs "Array(String, Integer)" to "Array"
18
+ # yard_type = Rucoa::Yard::Type.new(
19
+ # 'Array(String, Integer)'
20
+ # )
21
+ # expect(yard_type.to_rucoa_type).to eq('Array')
22
+ # @example scrubs "::Array" to "Array"
23
+ # yard_type = Rucoa::Yard::Type.new(
24
+ # '::Array'
25
+ # )
26
+ # expect(yard_type.to_rucoa_type).to eq('Array')
27
+ # @example scrubs "Hash{Symbol => Object}" to "Hash"
28
+ # yard_type = Rucoa::Yard::Type.new(
29
+ # 'Hash{Symbol => Object}'
30
+ # )
31
+ # expect(yard_type.to_rucoa_type).to eq('Hash')
32
+ # @example scrubs "Array<Array<Integer>>" to "Array"
33
+ # yard_type = Rucoa::Yard::Type.new(
34
+ # 'Array<Array<Integer>>'
35
+ # )
36
+ # expect(yard_type.to_rucoa_type).to eq('Array')
37
+ def to_rucoa_type
38
+ @value
39
+ .delete_prefix('::')
40
+ .gsub(/<.+>/, '')
41
+ .gsub(/\{.+\}/, '')
42
+ .gsub(/\(.+\)/, '')
43
+ end
44
+ end
45
+ end
46
+ end
data/lib/rucoa/yard.rb CHANGED
@@ -3,6 +3,6 @@
3
3
  module Rucoa
4
4
  module Yard
5
5
  autoload :DefinitionsLoader, 'rucoa/yard/definitions_loader'
6
- autoload :MethodDefinitionMapper, 'rucoa/yard/method_definition_mapper'
6
+ autoload :Type, 'rucoa/yard/type'
7
7
  end
8
8
  end
data/lib/rucoa.rb CHANGED
@@ -18,6 +18,7 @@ module Rucoa
18
18
  autoload :Nodes, 'rucoa/nodes'
19
19
  autoload :Parser, 'rucoa/parser'
20
20
  autoload :ParserBuilder, 'rucoa/parser_builder'
21
+ autoload :ParseResult, 'rucoa/parse_result'
21
22
  autoload :Position, 'rucoa/position'
22
23
  autoload :Range, 'rucoa/range'
23
24
  autoload :Rbs, 'rucoa/rbs'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rucoa
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryo Nakamura
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-09-17 00:00:00.000000000 Z
11
+ date: 2022-09-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -126,11 +126,12 @@ files:
126
126
  - lib/rucoa/message_reader.rb
127
127
  - lib/rucoa/message_writer.rb
128
128
  - lib/rucoa/node_concerns.rb
129
- - lib/rucoa/node_concerns/name_full_qualifiable.rb
129
+ - lib/rucoa/node_concerns/name_fully_qualifiable.rb
130
130
  - lib/rucoa/node_inspector.rb
131
131
  - lib/rucoa/nodes.rb
132
132
  - lib/rucoa/nodes/base.rb
133
133
  - lib/rucoa/nodes/casgn_node.rb
134
+ - lib/rucoa/nodes/cbase_node.rb
134
135
  - lib/rucoa/nodes/class_node.rb
135
136
  - lib/rucoa/nodes/const_node.rb
136
137
  - lib/rucoa/nodes/def_node.rb
@@ -141,6 +142,7 @@ files:
141
142
  - lib/rucoa/nodes/send_node.rb
142
143
  - lib/rucoa/nodes/str_node.rb
143
144
  - lib/rucoa/nodes/sym_node.rb
145
+ - lib/rucoa/parse_result.rb
144
146
  - lib/rucoa/parser.rb
145
147
  - lib/rucoa/parser_builder.rb
146
148
  - lib/rucoa/position.rb
@@ -163,7 +165,7 @@ files:
163
165
  - lib/rucoa/version.rb
164
166
  - lib/rucoa/yard.rb
165
167
  - lib/rucoa/yard/definitions_loader.rb
166
- - lib/rucoa/yard/method_definition_mapper.rb
168
+ - lib/rucoa/yard/type.rb
167
169
  - rucoa.gemspec
168
170
  homepage: https://github.com/r7kamura/rucoa
169
171
  licenses: