rucoa 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/Gemfile +1 -0
  4. data/Gemfile.lock +11 -2
  5. data/README.md +36 -5
  6. data/data/definitions_ruby_3_1 +0 -0
  7. data/images/diagnostics.gif +0 -0
  8. data/images/document-formatting.gif +0 -0
  9. data/images/document-symbol.gif +0 -0
  10. data/images/selection-ranges.gif +0 -0
  11. data/lib/rucoa/configuration.rb +58 -32
  12. data/lib/rucoa/definition_archiver.rb +29 -0
  13. data/lib/rucoa/definition_builders/rbs_constant_definition_builder.rb +44 -0
  14. data/lib/rucoa/definition_builders/rbs_method_definition_builder.rb +106 -0
  15. data/lib/rucoa/definition_builders/yard_method_definition_builder.rb +191 -0
  16. data/lib/rucoa/definition_builders.rb +9 -0
  17. data/lib/rucoa/definition_store.rb +63 -0
  18. data/lib/rucoa/definitions/base.rb +12 -0
  19. data/lib/rucoa/definitions/constant_definition.rb +51 -0
  20. data/lib/rucoa/definitions/method_definition.rb +126 -0
  21. data/lib/rucoa/definitions/method_parameter_definition.rb +30 -0
  22. data/lib/rucoa/definitions.rb +9 -0
  23. data/lib/rucoa/handlers/base.rb +8 -0
  24. data/lib/rucoa/handlers/exit_handler.rb +11 -0
  25. data/lib/rucoa/handlers/initialize_handler.rb +6 -0
  26. data/lib/rucoa/handlers/initialized_handler.rb +10 -0
  27. data/lib/rucoa/handlers/shutdown_handler.rb +12 -0
  28. data/lib/rucoa/handlers/text_document_did_change_handler.rb +1 -20
  29. data/lib/rucoa/handlers/text_document_did_open_handler.rb +11 -4
  30. data/lib/rucoa/handlers/text_document_document_symbol_handler.rb +1 -1
  31. data/lib/rucoa/handlers/text_document_range_formatting_handler.rb +1 -1
  32. data/lib/rucoa/handlers/text_document_signature_help_handler.rb +68 -0
  33. data/lib/rucoa/handlers.rb +3 -0
  34. data/lib/rucoa/node_inspector.rb +109 -0
  35. data/lib/rucoa/nodes/base.rb +30 -0
  36. data/lib/rucoa/nodes/def_node.rb +59 -0
  37. data/lib/rucoa/nodes/lvar_node.rb +25 -0
  38. data/lib/rucoa/nodes/send_node.rb +43 -0
  39. data/lib/rucoa/nodes.rb +1 -0
  40. data/lib/rucoa/parser_builder.rb +1 -0
  41. data/lib/rucoa/range.rb +64 -14
  42. data/lib/rucoa/rbs_document_loader.rb +43 -0
  43. data/lib/rucoa/rubocop_autocorrector.rb +1 -1
  44. data/lib/rucoa/rubocop_investigator.rb +1 -1
  45. data/lib/rucoa/server.rb +19 -1
  46. data/lib/rucoa/source.rb +54 -4
  47. data/lib/rucoa/source_store.rb +6 -10
  48. data/lib/rucoa/types/method_type.rb +23 -0
  49. data/lib/rucoa/types.rb +7 -0
  50. data/lib/rucoa/version.rb +1 -1
  51. data/lib/rucoa/yard_glob_document_loader.rb +47 -0
  52. data/lib/rucoa/yard_string_document_loader.rb +70 -0
  53. data/lib/rucoa.rb +9 -0
  54. data/rucoa.gemspec +1 -0
  55. metadata +42 -2
@@ -4,9 +4,68 @@ module Rucoa
4
4
  module Nodes
5
5
  class DefNode < Base
6
6
  # @return [String]
7
+ # @example returns method name
8
+ # node = Rucoa::Source.new(
9
+ # content: <<~RUBY
10
+ # module Foo
11
+ # class Bar
12
+ # def baz
13
+ # end
14
+ # end
15
+ # end
16
+ # RUBY
17
+ # ).node_at(
18
+ # Rucoa::Position.new(
19
+ # column: 4,
20
+ # line: 3
21
+ # )
22
+ # )
23
+ # expect(node.name).to eq('baz')
7
24
  def name
8
25
  children[0].to_s
9
26
  end
27
+
28
+ # @return [String]
29
+ # @example returns full qualified name
30
+ # node = Rucoa::Source.new(
31
+ # content: <<~RUBY
32
+ # module Foo
33
+ # class Bar
34
+ # def baz
35
+ # end
36
+ # end
37
+ # end
38
+ # RUBY
39
+ # ).node_at(
40
+ # Rucoa::Position.new(
41
+ # column: 4,
42
+ # line: 3
43
+ # )
44
+ # )
45
+ # expect(node.full_qualified_name).to eq('Foo::Bar#baz')
46
+ def full_qualified_name
47
+ [
48
+ namespace,
49
+ method_marker,
50
+ name
51
+ ].join
52
+ end
53
+
54
+ private
55
+
56
+ # @return [String]
57
+ def method_marker
58
+ if singleton?
59
+ '.'
60
+ else
61
+ '#'
62
+ end
63
+ end
64
+
65
+ # @return [Boolean]
66
+ def singleton?
67
+ each_ancestor(:sclass).any?
68
+ end
10
69
  end
11
70
  end
12
71
  end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rucoa
4
+ module Nodes
5
+ class LvarNode < Base
6
+ # @return [String]
7
+ # @example returns local variable name
8
+ # node = Rucoa::Source.new(
9
+ # content: <<~RUBY
10
+ # foo = 1
11
+ # foo
12
+ # RUBY
13
+ # ).node_at(
14
+ # Rucoa::Position.new(
15
+ # column: 2,
16
+ # line: 2
17
+ # )
18
+ # )
19
+ # expect(node.name).to eq('foo')
20
+ def name
21
+ children[0].to_s
22
+ end
23
+ end
24
+ end
25
+ end
@@ -4,14 +4,57 @@ module Rucoa
4
4
  module Nodes
5
5
  class SendNode < Base
6
6
  # @return [Array<Rucoa::Nodes::Base>]
7
+ # @example returns arguments
8
+ # node = Rucoa::Parser.call(
9
+ # <<~RUBY
10
+ # foo(bar, baz)
11
+ # RUBY
12
+ # )
13
+ # expect(node.arguments.map(&:name)).to eq(
14
+ # %w[
15
+ # bar
16
+ # baz
17
+ # ]
18
+ # )
7
19
  def arguments
8
20
  children[2..]
9
21
  end
10
22
 
11
23
  # @return [String]
24
+ # @example returns method name
25
+ # node = Rucoa::Parser.call(
26
+ # <<~RUBY
27
+ # foo(bar, baz)
28
+ # RUBY
29
+ # )
30
+ # expect(node.name).to eq('foo')
12
31
  def name
13
32
  children[1].to_s
14
33
  end
34
+
35
+ # @return [Rucoa::Nodes::Base, nil]
36
+ # @example returns nil for receiver-less method call
37
+ # node = Rucoa::Parser.call(
38
+ # <<~RUBY
39
+ # foo(bar, baz)
40
+ # RUBY
41
+ # )
42
+ # expect(node.receiver).to be_nil
43
+ # @example returns receiver
44
+ # node = Rucoa::Source.new(
45
+ # content: <<~RUBY
46
+ # foo.bar
47
+ # RUBY
48
+ # ).node_at(
49
+ # Rucoa::Position.new(
50
+ # column: 4,
51
+ # line: 1
52
+ # )
53
+ # )
54
+ # expect(node.receiver).to be_a(Rucoa::Nodes::SendNode)
55
+ def receiver
56
+ children[0]
57
+ end
15
58
  end
16
59
  end
17
60
  end
data/lib/rucoa/nodes.rb CHANGED
@@ -8,6 +8,7 @@ module Rucoa
8
8
  autoload :ConstNode, 'rucoa/nodes/const_node'
9
9
  autoload :DefNode, 'rucoa/nodes/def_node'
10
10
  autoload :DefsNode, 'rucoa/nodes/defs_node'
11
+ autoload :LvarNode, 'rucoa/nodes/lvar_node'
11
12
  autoload :ModuleNode, 'rucoa/nodes/module_node'
12
13
  autoload :SclassNode, 'rucoa/nodes/sclass_node'
13
14
  autoload :SendNode, 'rucoa/nodes/send_node'
@@ -10,6 +10,7 @@ module Rucoa
10
10
  const: Nodes::ConstNode,
11
11
  def: Nodes::DefNode,
12
12
  defs: Nodes::DefsNode,
13
+ lvar: Nodes::LvarNode,
13
14
  module: Nodes::ModuleNode,
14
15
  sclass: Nodes::SclassNode,
15
16
  send: Nodes::SendNode,
data/lib/rucoa/range.rb CHANGED
@@ -30,28 +30,85 @@ module Rucoa
30
30
 
31
31
  # @param beginning [Rucoa::Position]
32
32
  # @param ending [Ruoca::Position]
33
- # @param exclude_end [Boolean]
34
- def initialize(beginning, ending, exclude_end: true)
33
+ # @param including_ending [Boolean]
34
+ def initialize(beginning, ending, including_ending: true)
35
35
  @beginning = beginning
36
36
  @ending = ending
37
- @exclude_end = exclude_end
37
+ @including_ending = including_ending
38
38
  end
39
39
 
40
40
  # @param range [Rucoa::Range]
41
41
  # @return [Boolean]
42
- def contains?(range)
43
- copy = with_including_end
44
- copy.include?(range.beginning) && copy.include?(range.ending)
42
+ # @example returns true when the range is contained in self
43
+ # range = Rucoa::Range.new(
44
+ # Rucoa::Position.new(
45
+ # column: 0,
46
+ # line: 0
47
+ # ),
48
+ # Rucoa::Position.new(
49
+ # column: 0,
50
+ # line: 2
51
+ # )
52
+ # )
53
+ # expect(range).to contain(
54
+ # Rucoa::Range.new(
55
+ # Rucoa::Position.new(
56
+ # column: 0,
57
+ # line: 0
58
+ # ),
59
+ # Rucoa::Position.new(
60
+ # column: 0,
61
+ # line: 0
62
+ # )
63
+ # )
64
+ # )
65
+ def contain?(range)
66
+ include?(range.beginning) && include?(range.ending)
45
67
  end
46
68
 
47
69
  # @param position [Rucoa::Position]
48
70
  # @return [Boolean]
71
+ # @example returns true when the position is included in self
72
+ # range = Rucoa::Range.new(
73
+ # Rucoa::Position.new(
74
+ # column: 0,
75
+ # line: 0
76
+ # ),
77
+ # Rucoa::Position.new(
78
+ # column: 0,
79
+ # line: 2
80
+ # )
81
+ # )
82
+ # expect(range).to include(
83
+ # Rucoa::Position.new(
84
+ # column: 0,
85
+ # line: 0
86
+ # )
87
+ # )
88
+ # expect(range).to include(
89
+ # Rucoa::Position.new(
90
+ # column: 0,
91
+ # line: 1
92
+ # )
93
+ # )
94
+ # expect(range).to include(
95
+ # Rucoa::Position.new(
96
+ # column: 0,
97
+ # line: 2
98
+ # )
99
+ # )
100
+ # expect(range).not_to include(
101
+ # Rucoa::Position.new(
102
+ # column: 0,
103
+ # line: 3
104
+ # )
105
+ # )
49
106
  def include?(position)
50
107
  return false if position.line > @ending.line
51
108
  return false if position.line < @beginning.line
52
109
  return false if position.column < @beginning.column
53
110
  return false if position.column > @ending.column
54
- return false if position.column == @ending.column && @exclude_end
111
+ return false if position.column == @ending.column && !@including_ending
55
112
 
56
113
  true
57
114
  end
@@ -63,12 +120,5 @@ module Rucoa
63
120
  start: @beginning.to_vscode_position
64
121
  }
65
122
  end
66
-
67
- private
68
-
69
- # @return [Rucoa::Range]
70
- def with_including_end
71
- self.class.new(@beginning, @ending, exclude_end: false)
72
- end
73
123
  end
74
124
  end
@@ -0,0 +1,43 @@
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
@@ -31,7 +31,7 @@ module Rucoa
31
31
  # @return [String]
32
32
  def call
33
33
  @options[:stdin] = @source.content
34
- run([@source.path])
34
+ run([@source.path || 'untitled'])
35
35
  @options[:stdin]
36
36
  end
37
37
  end
@@ -31,7 +31,7 @@ module Rucoa
31
31
  # @return [Array<RuboCop::Cop::Offense>]
32
32
  def call
33
33
  @options[:stdin] = @source.content
34
- run([@source.path])
34
+ run([@source.path || 'untitled'])
35
35
  @offenses
36
36
  end
37
37
 
data/lib/rucoa/server.rb CHANGED
@@ -4,8 +4,10 @@ module Rucoa
4
4
  class Server
5
5
  # @return [Hash{String => Class}]
6
6
  METHOD_TO_HANDLER_MAP = {
7
+ 'exit' => Handlers::ExitHandler,
7
8
  'initialize' => Handlers::InitializeHandler,
8
9
  'initialized' => Handlers::InitializedHandler,
10
+ 'shutdown' => Handlers::ShutdownHandler,
9
11
  'textDocument/codeAction' => Handlers::TextDocumentCodeActionHandler,
10
12
  'textDocument/didChange' => Handlers::TextDocumentDidChangeHandler,
11
13
  'textDocument/didOpen' => Handlers::TextDocumentDidOpenHandler,
@@ -13,13 +15,20 @@ module Rucoa
13
15
  'textDocument/formatting' => Handlers::TextDocumentFormattingHandler,
14
16
  'textDocument/rangeFormatting' => Handlers::TextDocumentRangeFormattingHandler,
15
17
  'textDocument/selectionRange' => Handlers::TextDocumentSelectionRangeHandler,
18
+ 'textDocument/signatureHelp' => Handlers::TextDocumentSignatureHelpHandler,
16
19
  'workspace/didChangeConfiguration' => Handlers::WorkspaceDidChangeConfigurationHandler
17
20
  }.freeze
18
21
  private_constant :METHOD_TO_HANDLER_MAP
19
22
 
23
+ # @return [Boolean]
24
+ attr_accessor :shutting_down
25
+
20
26
  # @return [Rucoa::Configuration]
21
27
  attr_reader :configuration
22
28
 
29
+ # @return [Rucoa::DefinitionStore]
30
+ attr_reader :definition_store
31
+
23
32
  # @return [Rucoa::SourceStore]
24
33
  attr_reader :source_store
25
34
 
@@ -29,10 +38,14 @@ module Rucoa
29
38
  @reader = MessageReader.new(input)
30
39
  @writer = MessageWriter.new(output)
31
40
 
41
+ @client_response_handlers = {}
32
42
  @configuration = Configuration.new
33
43
  @server_request_id = 0
34
- @client_response_handlers = {}
44
+ @shutting_down = false
35
45
  @source_store = SourceStore.new
46
+
47
+ @definition_store = DefinitionStore.new
48
+ @definition_store.definitions += DefinitionArchiver.load
36
49
  end
37
50
 
38
51
  # @return [void]
@@ -42,6 +55,11 @@ module Rucoa
42
55
  end
43
56
  end
44
57
 
58
+ # @return [void]
59
+ def finish
60
+ exit(0)
61
+ end
62
+
45
63
  # @yieldparam response [Hash]
46
64
  # @param message [Hash]
47
65
  # @return [void]
data/lib/rucoa/source.rb CHANGED
@@ -6,13 +6,59 @@ module Rucoa
6
6
  attr_reader :content
7
7
 
8
8
  # @return [String]
9
- attr_reader :path
9
+ attr_reader :uri
10
10
 
11
11
  # @param content [String]
12
- # @param path [String, nil]
13
- def initialize(content:, path: nil)
12
+ # @param uri [String, nil]
13
+ def initialize(content:, uri: nil)
14
14
  @content = content
15
- @path = path
15
+ @uri = uri
16
+ end
17
+
18
+ # @return [Array<Rucoa::Definition::Base>]
19
+ # @example returns definitions from given source
20
+ # content = <<~RUBY
21
+ # class Foo
22
+ # def bar
23
+ # end
24
+ # end
25
+ # RUBY
26
+ # source = Rucoa::Source.new(
27
+ # content: content,
28
+ # uri: 'file:///path/to/foo.rb'
29
+ # )
30
+ # expect(source.definitions).to match(
31
+ # [
32
+ # a_kind_of(Rucoa::Definitions::MethodDefinition)
33
+ # ]
34
+ # )
35
+ def definitions
36
+ @definitions ||= YardStringDocumentLoader.call(
37
+ content: @content,
38
+ path: path
39
+ )
40
+ end
41
+
42
+ # @return [String, nil]
43
+ # @example returns path from given VSCode URI
44
+ # source = Rucoa::Source.new(
45
+ # content: '',
46
+ # uri: 'file:///path/to/foo.rb'
47
+ # )
48
+ # expect(source.path).to eq('/path/to/foo.rb')
49
+ # @example returns nil for untitled URI
50
+ # source = Rucoa::Source.new(
51
+ # content: '',
52
+ # uri: 'untitled:Untitled-1'
53
+ # )
54
+ # expect(source.path).to be_nil
55
+ def path
56
+ return unless @uri
57
+
58
+ path = ::URI.parse(@uri).path
59
+ return unless path
60
+
61
+ ::CGI.unescape(path)
16
62
  end
17
63
 
18
64
  # @param position [Rucoa::Position]
@@ -21,11 +67,15 @@ module Rucoa
21
67
  root_and_descendant_nodes.reverse.find do |node|
22
68
  node.include_position?(position)
23
69
  end
70
+ rescue ::Parser::SyntaxError
71
+ nil
24
72
  end
25
73
 
26
74
  # @return [Rucoa::Nodes::Base, nil]
27
75
  def root_node
28
76
  @root_node ||= Parser.call(@content)
77
+ rescue ::Parser::SyntaxError
78
+ nil
29
79
  end
30
80
 
31
81
  private
@@ -9,22 +9,18 @@ module Rucoa
9
9
  @data = {}
10
10
  end
11
11
 
12
+ # @param source [Rucoa::Source]
13
+ # @return [void]
14
+ def update(source)
15
+ @data[source.uri] = source
16
+ end
17
+
12
18
  # @param uri [String]
13
19
  # @return [String, nil]
14
20
  def get(uri)
15
21
  @data[uri]
16
22
  end
17
23
 
18
- # @param uri [String]
19
- # @param content [String]
20
- # @return [void]
21
- def set(uri, content)
22
- @data[uri] = Source.new(
23
- content: content,
24
- path: path_from_uri(uri)
25
- )
26
- end
27
-
28
24
  # @yieldparam uri [String]
29
25
  # @return [Enumerable<String>]
30
26
  def each_uri(&block)
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rucoa
4
+ module Types
5
+ class MethodType
6
+ # @return [String]
7
+ attr_reader :parameters_string
8
+
9
+ # @return [String]
10
+ attr_reader :return_type
11
+
12
+ # @param parameters_string [String]
13
+ # @param return_type [String]
14
+ def initialize(
15
+ parameters_string:,
16
+ return_type:
17
+ )
18
+ @parameters_string = parameters_string
19
+ @return_type = return_type
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rucoa
4
+ module Types
5
+ autoload :MethodType, 'rucoa/types/method_type'
6
+ end
7
+ 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.4.0'
4
+ VERSION = '0.5.0'
5
5
  end
@@ -0,0 +1,47 @@
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
@@ -0,0 +1,70 @@
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