rucoa 0.6.0 → 0.8.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 (49) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/README.md +4 -1
  4. data/data/definitions_ruby_3_1 +0 -0
  5. data/lib/rucoa/configuration.rb +10 -0
  6. data/lib/rucoa/definition_store.rb +113 -6
  7. data/lib/rucoa/definitions/class_definition.rb +16 -0
  8. data/lib/rucoa/definitions/method_definition.rb +14 -2
  9. data/lib/rucoa/definitions/module_definition.rb +8 -0
  10. data/lib/rucoa/definitions.rb +2 -0
  11. data/lib/rucoa/handler_concerns/diagnostics_publishable.rb +14 -2
  12. data/lib/rucoa/handlers/initialize_handler.rb +1 -0
  13. data/lib/rucoa/handlers/initialized_handler.rb +1 -1
  14. data/lib/rucoa/handlers/text_document_completion_handler.rb +9 -2
  15. data/lib/rucoa/handlers/text_document_definition_handler.rb +155 -0
  16. data/lib/rucoa/handlers/text_document_did_close_handler.rb +20 -0
  17. data/lib/rucoa/handlers/text_document_formatting_handler.rb +2 -2
  18. data/lib/rucoa/handlers/text_document_hover_handler.rb +3 -4
  19. data/lib/rucoa/handlers/text_document_range_formatting_handler.rb +2 -2
  20. data/lib/rucoa/handlers.rb +2 -0
  21. data/lib/rucoa/node_inspector.rb +48 -15
  22. data/lib/rucoa/nodes/base.rb +2 -2
  23. data/lib/rucoa/nodes/const_node.rb +31 -0
  24. data/lib/rucoa/position.rb +1 -1
  25. data/lib/rucoa/rbs/class_definition_mapper.rb +46 -0
  26. data/lib/rucoa/{definition_builders/rbs_constant_definition_builder.rb → rbs/constant_definition_mapper.rb} +4 -8
  27. data/lib/rucoa/{definition_builders/rbs_method_definition_builder.rb → rbs/method_definition_mapper.rb} +4 -7
  28. data/lib/rucoa/rbs/module_definition_mapper.rb +40 -0
  29. data/lib/rucoa/rbs/ruby_definitions_loader.rb +82 -0
  30. data/lib/rucoa/rbs.rb +11 -0
  31. data/lib/rucoa/rubocop/autocorrector.rb +51 -0
  32. data/lib/rucoa/rubocop/configuration_checker.rb +44 -0
  33. data/lib/rucoa/rubocop/investigator.rb +59 -0
  34. data/lib/rucoa/rubocop.rb +9 -0
  35. data/lib/rucoa/server.rb +2 -0
  36. data/lib/rucoa/source.rb +11 -3
  37. data/lib/rucoa/version.rb +1 -1
  38. data/lib/rucoa/yard/definitions_loader.rb +85 -0
  39. data/lib/rucoa/{definition_builders/yard_method_definition_builder.rb → yard/method_definition_mapper.rb} +22 -25
  40. data/lib/rucoa/yard.rb +8 -0
  41. data/lib/rucoa.rb +3 -7
  42. metadata +19 -12
  43. data/lib/rucoa/definition_builders.rb +0 -9
  44. data/lib/rucoa/rbs_document_loader.rb +0 -43
  45. data/lib/rucoa/rubocop_autocorrector.rb +0 -38
  46. data/lib/rucoa/rubocop_configuration_checker.rb +0 -42
  47. data/lib/rucoa/rubocop_investigator.rb +0 -48
  48. data/lib/rucoa/yard_glob_document_loader.rb +0 -47
  49. data/lib/rucoa/yard_string_document_loader.rb +0 -70
@@ -0,0 +1,85 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'logger'
4
+ require 'yard'
5
+
6
+ module Rucoa
7
+ module Yard
8
+ class DefinitionsLoader
9
+ 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
36
+ end
37
+
38
+ # @param globs [String]
39
+ # @return [Array<Rucoa::Definitions::Base>]
40
+ def load_globs(globs:)
41
+ load do
42
+ ::YARD.parse(globs)
43
+ end
44
+ end
45
+
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
63
+ )
64
+ when ::YARD::CodeObjects::MethodObject
65
+ MethodDefinitionMapper.call(code_object, path: path)
66
+ end
67
+ end
68
+
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)
76
+ end
77
+ end
78
+
79
+ def quietly(&block)
80
+ ::YARD::Logger.instance.enter_level(::Logger::FATAL, &block)
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
@@ -3,30 +3,27 @@
3
3
  require 'yard'
4
4
 
5
5
  module Rucoa
6
- module DefinitionBuilders
7
- class YardMethodDefinitionBuilder
6
+ module Yard
7
+ class MethodDefinitionMapper
8
8
  class << self
9
9
  # @param code_object [YARD::CodeObjects::MethodObject]
10
- # @param path [String]
11
- # @return [Rucoa::Definitions::Base]
12
- def call(code_object:, path:)
13
- new(
14
- code_object: code_object,
15
- path: path
16
- ).call
10
+ # @param path [String] This must be passed if the path is not available from code object.
11
+ # @return [Rucoa::Definitions::Base, nil]
12
+ def call(code_object, path: code_object.file)
13
+ new(code_object, path: path).call
17
14
  end
18
15
  end
19
16
 
20
- # @param code_object [YARD::CodeObjects::Base]
17
+ # @param code_object [YARD::CodeObjects::MethodObject]
21
18
  # @param path [String]
22
- def initialize(code_object:, path:)
19
+ def initialize(code_object, path:)
23
20
  @code_object = code_object
24
21
  @path = path
25
22
  end
26
23
 
27
- # @return [Rucoa::Definitions::Base]
24
+ # @return [Rucoa::Definitions::MethodDefinition]
28
25
  def call
29
- ::Rucoa::Definitions::MethodDefinition.new(
26
+ Definitions::MethodDefinition.new(
30
27
  description: description,
31
28
  kind: kind,
32
29
  method_name: method_name,
@@ -52,9 +49,9 @@ module Rucoa
52
49
  end
53
50
  end
54
51
 
55
- # @return [String
52
+ # @return [String]
56
53
  def method_name
57
- @code_object.name
54
+ @code_object.name.to_s
58
55
  end
59
56
 
60
57
  # @return [String]
@@ -74,7 +71,7 @@ module Rucoa
74
71
 
75
72
  # @return [String]
76
73
  # @example
77
- # definitions = Rucoa::YardStringDocumentLoader.call(
74
+ # definitions = Rucoa::Yard::DefinitionsLoader.load_string(
78
75
  # content: <<~RUBY,
79
76
  # class Foo
80
77
  # def bar(
@@ -91,7 +88,7 @@ module Rucoa
91
88
  # RUBY
92
89
  # path: '/path/to/foo.rb'
93
90
  # )
94
- # expect(definitions.first.signatures).to eq(
91
+ # expect(definitions[1].signatures).to eq(
95
92
  # [
96
93
  # 'Foo#bar(argument1, argument2 = nil, *arguments, keyword1:, keyword2: nil, **keywords, &block) -> Object'
97
94
  # ]
@@ -116,7 +113,7 @@ module Rucoa
116
113
  # @return [Array<Rucoa::Definitions::MethodParameterDefinition>]
117
114
  def parameters
118
115
  parameter_tags.map do |parameter_tag|
119
- ::Rucoa::Definitions::MethodParameterDefinition.new(
116
+ Definitions::MethodParameterDefinition.new(
120
117
  name: parameter_tag.name,
121
118
  types: parameter_tag.types
122
119
  )
@@ -133,7 +130,7 @@ module Rucoa
133
130
  # @return [Array<String>]
134
131
  # @return [String]
135
132
  # @example returns return type annotated by YARD @return tags
136
- # definitions = Rucoa::YardStringDocumentLoader.call(
133
+ # definitions = Rucoa::Yard::DefinitionsLoader.load_string(
137
134
  # content: <<~RUBY,
138
135
  # # @return [String]
139
136
  # def foo
@@ -148,7 +145,7 @@ module Rucoa
148
145
  # ]
149
146
  # )
150
147
  # @example ignores empty @return tags
151
- # definitions = Rucoa::YardStringDocumentLoader.call(
148
+ # definitions = Rucoa::Yard::DefinitionsLoader.load_string(
152
149
  # content: <<~RUBY,
153
150
  # # @return []
154
151
  # def foo
@@ -181,27 +178,27 @@ module Rucoa
181
178
 
182
179
  # @return [String]
183
180
  # @example scrubs "Array<String>" to "Array"
184
- # yard_type = Rucoa::DefinitionBuilders::YardMethodDefinitionBuilder::YardType.new(
181
+ # yard_type = Rucoa::Yard::MethodDefinitionMapper::YardType.new(
185
182
  # 'Array<String>'
186
183
  # )
187
184
  # expect(yard_type.to_rucoa_type).to eq('Array')
188
185
  # @example scrubs "Array(String, Integer)" to "Array"
189
- # yard_type = Rucoa::DefinitionBuilders::YardMethodDefinitionBuilder::YardType.new(
186
+ # yard_type = Rucoa::Yard::MethodDefinitionMapper::YardType.new(
190
187
  # 'Array(String, Integer)'
191
188
  # )
192
189
  # expect(yard_type.to_rucoa_type).to eq('Array')
193
190
  # @example scrubs "::Array" to "Array"
194
- # yard_type = Rucoa::DefinitionBuilders::YardMethodDefinitionBuilder::YardType.new(
191
+ # yard_type = Rucoa::Yard::MethodDefinitionMapper::YardType.new(
195
192
  # '::Array'
196
193
  # )
197
194
  # expect(yard_type.to_rucoa_type).to eq('Array')
198
195
  # @example scrubs "Hash{Symbol => Object}" to "Hash"
199
- # yard_type = Rucoa::DefinitionBuilders::YardMethodDefinitionBuilder::YardType.new(
196
+ # yard_type = Rucoa::Yard::MethodDefinitionMapper::YardType.new(
200
197
  # 'Hash{Symbol => Object}'
201
198
  # )
202
199
  # expect(yard_type.to_rucoa_type).to eq('Hash')
203
200
  # @example scrubs "Array<Array<Integer>>" to "Array"
204
- # yard_type = Rucoa::DefinitionBuilders::YardMethodDefinitionBuilder::YardType.new(
201
+ # yard_type = Rucoa::Yard::MethodDefinitionMapper::YardType.new(
205
202
  # 'Array<Array<Integer>>'
206
203
  # )
207
204
  # expect(yard_type.to_rucoa_type).to eq('Array')
data/lib/rucoa/yard.rb ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rucoa
4
+ module Yard
5
+ autoload :DefinitionsLoader, 'rucoa/yard/definitions_loader'
6
+ autoload :MethodDefinitionMapper, 'rucoa/yard/method_definition_mapper'
7
+ end
8
+ end
data/lib/rucoa.rb CHANGED
@@ -6,7 +6,6 @@ module Rucoa
6
6
  autoload :Cli, 'rucoa/cli'
7
7
  autoload :Configuration, 'rucoa/configuration'
8
8
  autoload :DefinitionArchiver, 'rucoa/definition_archiver'
9
- autoload :DefinitionBuilders, 'rucoa/definition_builders'
10
9
  autoload :Definitions, 'rucoa/definitions'
11
10
  autoload :DefinitionStore, 'rucoa/definition_store'
12
11
  autoload :Errors, 'rucoa/errors'
@@ -21,14 +20,11 @@ module Rucoa
21
20
  autoload :ParserBuilder, 'rucoa/parser_builder'
22
21
  autoload :Position, 'rucoa/position'
23
22
  autoload :Range, 'rucoa/range'
24
- autoload :RbsDocumentLoader, 'rucoa/rbs_document_loader'
25
- autoload :RubocopAutocorrector, 'rucoa/rubocop_autocorrector'
26
- autoload :RubocopConfigurationChecker, 'rucoa/rubocop_configuration_checker'
27
- autoload :RubocopInvestigator, 'rucoa/rubocop_investigator'
23
+ autoload :Rbs, 'rucoa/rbs'
24
+ autoload :Rubocop, 'rucoa/rubocop'
28
25
  autoload :Server, 'rucoa/server'
29
26
  autoload :Source, 'rucoa/source'
30
27
  autoload :SourceStore, 'rucoa/source_store'
31
28
  autoload :Types, 'rucoa/types'
32
- autoload :YardGlobDocumentLoader, 'rucoa/yard_glob_document_loader'
33
- autoload :YardStringDocumentLoader, 'rucoa/yard_string_document_loader'
29
+ autoload :Yard, 'rucoa/yard'
34
30
  end
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.6.0
4
+ version: 0.8.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-13 00:00:00.000000000 Z
11
+ date: 2022-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -92,16 +92,14 @@ files:
92
92
  - lib/rucoa/cli.rb
93
93
  - lib/rucoa/configuration.rb
94
94
  - lib/rucoa/definition_archiver.rb
95
- - lib/rucoa/definition_builders.rb
96
- - lib/rucoa/definition_builders/rbs_constant_definition_builder.rb
97
- - lib/rucoa/definition_builders/rbs_method_definition_builder.rb
98
- - lib/rucoa/definition_builders/yard_method_definition_builder.rb
99
95
  - lib/rucoa/definition_store.rb
100
96
  - lib/rucoa/definitions.rb
101
97
  - lib/rucoa/definitions/base.rb
98
+ - lib/rucoa/definitions/class_definition.rb
102
99
  - lib/rucoa/definitions/constant_definition.rb
103
100
  - lib/rucoa/definitions/method_definition.rb
104
101
  - lib/rucoa/definitions/method_parameter_definition.rb
102
+ - lib/rucoa/definitions/module_definition.rb
105
103
  - lib/rucoa/errors.rb
106
104
  - lib/rucoa/handler_concerns.rb
107
105
  - lib/rucoa/handler_concerns/configuration_requestable.rb
@@ -114,7 +112,9 @@ files:
114
112
  - lib/rucoa/handlers/shutdown_handler.rb
115
113
  - lib/rucoa/handlers/text_document_code_action_handler.rb
116
114
  - lib/rucoa/handlers/text_document_completion_handler.rb
115
+ - lib/rucoa/handlers/text_document_definition_handler.rb
117
116
  - lib/rucoa/handlers/text_document_did_change_handler.rb
117
+ - lib/rucoa/handlers/text_document_did_close_handler.rb
118
118
  - lib/rucoa/handlers/text_document_did_open_handler.rb
119
119
  - lib/rucoa/handlers/text_document_document_symbol_handler.rb
120
120
  - lib/rucoa/handlers/text_document_formatting_handler.rb
@@ -145,18 +145,25 @@ files:
145
145
  - lib/rucoa/parser_builder.rb
146
146
  - lib/rucoa/position.rb
147
147
  - lib/rucoa/range.rb
148
- - lib/rucoa/rbs_document_loader.rb
149
- - lib/rucoa/rubocop_autocorrector.rb
150
- - lib/rucoa/rubocop_configuration_checker.rb
151
- - lib/rucoa/rubocop_investigator.rb
148
+ - lib/rucoa/rbs.rb
149
+ - lib/rucoa/rbs/class_definition_mapper.rb
150
+ - lib/rucoa/rbs/constant_definition_mapper.rb
151
+ - lib/rucoa/rbs/method_definition_mapper.rb
152
+ - lib/rucoa/rbs/module_definition_mapper.rb
153
+ - lib/rucoa/rbs/ruby_definitions_loader.rb
154
+ - lib/rucoa/rubocop.rb
155
+ - lib/rucoa/rubocop/autocorrector.rb
156
+ - lib/rucoa/rubocop/configuration_checker.rb
157
+ - lib/rucoa/rubocop/investigator.rb
152
158
  - lib/rucoa/server.rb
153
159
  - lib/rucoa/source.rb
154
160
  - lib/rucoa/source_store.rb
155
161
  - lib/rucoa/types.rb
156
162
  - lib/rucoa/types/method_type.rb
157
163
  - lib/rucoa/version.rb
158
- - lib/rucoa/yard_glob_document_loader.rb
159
- - lib/rucoa/yard_string_document_loader.rb
164
+ - lib/rucoa/yard.rb
165
+ - lib/rucoa/yard/definitions_loader.rb
166
+ - lib/rucoa/yard/method_definition_mapper.rb
160
167
  - rucoa.gemspec
161
168
  homepage: https://github.com/r7kamura/rucoa
162
169
  licenses:
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Rucoa
4
- module DefinitionBuilders
5
- autoload :RbsConstantDefinitionBuilder, 'rucoa/definition_builders/rbs_constant_definition_builder'
6
- autoload :RbsMethodDefinitionBuilder, 'rucoa/definition_builders/rbs_method_definition_builder'
7
- autoload :YardMethodDefinitionBuilder, 'rucoa/definition_builders/yard_method_definition_builder'
8
- end
9
- end
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rbs'
4
-
5
- module Rucoa
6
- class RbsDocumentLoader
7
- class << self
8
- def call
9
- new.call
10
- end
11
- end
12
-
13
- # @return [Array<Rucoa::Definitions::Base>]
14
- def call
15
- declarations.flat_map do |declaration|
16
- case declaration
17
- when ::RBS::AST::Declarations::Constant
18
- [
19
- DefinitionBuilders::RbsConstantDefinitionBuilder.call(declaration: declaration)
20
- ]
21
- when ::RBS::AST::Declarations::Class, ::RBS::AST::Declarations::Module
22
- declaration.members.grep(::RBS::AST::Members::MethodDefinition).map do |method_definition|
23
- DefinitionBuilders::RbsMethodDefinitionBuilder.call(
24
- declaration: declaration,
25
- method_definition: method_definition
26
- )
27
- end
28
- else
29
- []
30
- end
31
- end
32
- end
33
-
34
- private
35
-
36
- # @return [Array<RBS::AST::Declarations::Base>]
37
- def declarations
38
- ::RBS::Environment.from_loader(
39
- ::RBS::EnvironmentLoader.new
40
- ).resolve_type_names.declarations
41
- end
42
- end
43
- end
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rubocop'
4
-
5
- module Rucoa
6
- class RubocopAutocorrector < ::RuboCop::Runner
7
- class << self
8
- # @param source [Rucoa::Source]
9
- # @return [String]
10
- def call(source:)
11
- new(source: source).call
12
- end
13
- end
14
-
15
- # @param source [Rucoa::Source]
16
- def initialize(source:)
17
- @source = source
18
- super(
19
- ::RuboCop::Options.new.parse(
20
- %w[
21
- --stderr
22
- --force-exclusion
23
- --format RuboCop::Formatter::BaseFormatter
24
- -A
25
- ]
26
- ).first,
27
- ::RuboCop::ConfigStore.new
28
- )
29
- end
30
-
31
- # @return [String]
32
- def call
33
- @options[:stdin] = @source.content
34
- run([@source.path || 'untitled'])
35
- @options[:stdin]
36
- end
37
- end
38
- end
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'pathname'
4
-
5
- module Rucoa
6
- class RubocopConfigurationChecker
7
- class << self
8
- # @return [Boolean]
9
- def call
10
- new.call
11
- end
12
- end
13
-
14
- # @return [Boolean]
15
- def call
16
- rubocop_configured_for_current_directory?
17
- end
18
-
19
- private
20
-
21
- # @return [Boolean]
22
- def rubocop_configured_for_current_directory?
23
- each_current_and_ancestor_pathname.any? do |pathname|
24
- pathname.join('.rubocop.yml').exist?
25
- end
26
- end
27
-
28
- # @return [Enumerable<Pathname>]
29
- def each_current_and_ancestor_pathname
30
- return to_enum(__method__) unless block_given?
31
-
32
- pathname = ::Pathname.pwd
33
- loop do
34
- yield pathname
35
- break if pathname.root?
36
-
37
- pathname = pathname.parent
38
- end
39
- self
40
- end
41
- end
42
- end
@@ -1,48 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rubocop'
4
-
5
- module Rucoa
6
- class RubocopInvestigator < ::RuboCop::Runner
7
- class << self
8
- # @param source [Rucoa::Source]
9
- # @return [Array<RuboCop::Cop::Offense>]
10
- def call(source:)
11
- new(source: source).call
12
- end
13
- end
14
-
15
- # @param source [Rucoa::Source]
16
- def initialize(source:)
17
- @source = source
18
- @offenses = []
19
- super(
20
- ::RuboCop::Options.new.parse(
21
- %w[
22
- --stderr
23
- --force-exclusion
24
- --format RuboCop::Formatter::BaseFormatter
25
- ]
26
- ).first,
27
- ::RuboCop::ConfigStore.new
28
- )
29
- end
30
-
31
- # @return [Array<RuboCop::Cop::Offense>]
32
- def call
33
- @options[:stdin] = @source.content
34
- run([@source.path || 'untitled'])
35
- @offenses
36
- end
37
-
38
- private
39
-
40
- # @param file [String]
41
- # @param offenses [Array<RuboCop::Cop::Offense>]
42
- # @return [void]
43
- def file_finished(file, offenses)
44
- @offenses = offenses
45
- super
46
- end
47
- end
48
- end
@@ -1,47 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'logger'
4
- require 'yard'
5
-
6
- module Rucoa
7
- class YardGlobDocumentLoader
8
- class << self
9
- # @param globs [Array<String>]
10
- # @return [Array<Rucoa::Definitions::Base>]
11
- def call(globs:)
12
- new(
13
- globs: globs
14
- ).call
15
- end
16
- end
17
-
18
- # @param globs [String]
19
- def initialize(globs:)
20
- @globs = globs
21
- end
22
-
23
- # @return [Array<Rucoa::Definitions::Base>]
24
- def call
25
- code_objects.filter_map do |code_object|
26
- case code_object
27
- when ::YARD::CodeObjects::MethodObject
28
- DefinitionBuilders::YardMethodDefinitionBuilder.call(
29
- code_object: code_object,
30
- path: code_object.file
31
- )
32
- end
33
- end
34
- end
35
-
36
- private
37
-
38
- # @return [Array<YARD::CodeObjects::Base>]
39
- def code_objects
40
- ::YARD::Logger.instance.enter_level(::Logger::FATAL) do
41
- ::YARD::Registry.clear
42
- ::YARD.parse(@globs)
43
- ::YARD::Registry.all
44
- end
45
- end
46
- end
47
- end
@@ -1,70 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'logger'
4
- require 'yard'
5
-
6
- module Rucoa
7
- class YardStringDocumentLoader
8
- class << self
9
- # @param content [String]
10
- # @return [Array<Rucoa::Definitions::Base>]
11
- # @example returns method definitions from Ruby source code
12
- # content = <<~RUBY
13
- # class Foo
14
- # # Return given argument as an Integer.
15
- # # @param bar [String]
16
- # # @return [Integer]
17
- # def foo(bar)
18
- # bar.to_i
19
- # end
20
- # end
21
- # RUBY
22
- # definitions = Rucoa::YardStringDocumentLoader.call(
23
- # content: content,
24
- # path: '/path/to/foo.rb'
25
- # )
26
- # expect(definitions.size).to eq(1)
27
- # expect(definitions.first.full_qualified_name).to eq('Foo#foo')
28
- # expect(definitions.first.source_path).to eq('/path/to/foo.rb')
29
- # expect(definitions.first.description).to eq('Return given argument as an Integer.')
30
- # expect(definitions.first.return_types).to eq(%w[Integer])
31
- def call(content:, path:)
32
- new(
33
- content: content,
34
- path: path
35
- ).call
36
- end
37
- end
38
-
39
- # @param content [String]
40
- # @param path [String]
41
- def initialize(content:, path:)
42
- @content = content
43
- @path = path
44
- end
45
-
46
- # @return [Array<Rucoa::Definitions::Base>]
47
- def call
48
- code_objects.filter_map do |code_object|
49
- case code_object
50
- when ::YARD::CodeObjects::MethodObject
51
- DefinitionBuilders::YardMethodDefinitionBuilder.call(
52
- code_object: code_object,
53
- path: @path
54
- )
55
- end
56
- end
57
- end
58
-
59
- private
60
-
61
- # @return [Array<YARD::CodeObjects::Base>]
62
- def code_objects
63
- ::YARD::Logger.instance.enter_level(::Logger::FATAL) do
64
- ::YARD::Registry.clear
65
- ::YARD.parse_string(@content)
66
- ::YARD::Registry.all
67
- end
68
- end
69
- end
70
- end