rucoa 0.4.0 → 0.6.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 (60) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/Gemfile +1 -0
  4. data/Gemfile.lock +12 -2
  5. data/README.md +47 -17
  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/cli.rb +3 -2
  12. data/lib/rucoa/configuration.rb +111 -32
  13. data/lib/rucoa/definition_archiver.rb +29 -0
  14. data/lib/rucoa/definition_builders/rbs_constant_definition_builder.rb +44 -0
  15. data/lib/rucoa/definition_builders/rbs_method_definition_builder.rb +106 -0
  16. data/lib/rucoa/definition_builders/yard_method_definition_builder.rb +218 -0
  17. data/lib/rucoa/definition_builders.rb +9 -0
  18. data/lib/rucoa/definition_store.rb +63 -0
  19. data/lib/rucoa/definitions/base.rb +12 -0
  20. data/lib/rucoa/definitions/constant_definition.rb +51 -0
  21. data/lib/rucoa/definitions/method_definition.rb +126 -0
  22. data/lib/rucoa/definitions/method_parameter_definition.rb +30 -0
  23. data/lib/rucoa/definitions.rb +9 -0
  24. data/lib/rucoa/handlers/base.rb +8 -0
  25. data/lib/rucoa/handlers/exit_handler.rb +11 -0
  26. data/lib/rucoa/handlers/initialize_handler.rb +13 -0
  27. data/lib/rucoa/handlers/initialized_handler.rb +10 -0
  28. data/lib/rucoa/handlers/shutdown_handler.rb +12 -0
  29. data/lib/rucoa/handlers/text_document_completion_handler.rb +216 -0
  30. data/lib/rucoa/handlers/text_document_did_change_handler.rb +1 -20
  31. data/lib/rucoa/handlers/text_document_did_open_handler.rb +11 -4
  32. data/lib/rucoa/handlers/text_document_document_symbol_handler.rb +5 -4
  33. data/lib/rucoa/handlers/text_document_hover_handler.rb +76 -0
  34. data/lib/rucoa/handlers/text_document_range_formatting_handler.rb +1 -1
  35. data/lib/rucoa/handlers/text_document_selection_range_handler.rb +3 -3
  36. data/lib/rucoa/handlers/text_document_signature_help_handler.rb +68 -0
  37. data/lib/rucoa/handlers.rb +5 -0
  38. data/lib/rucoa/node_inspector.rb +111 -0
  39. data/lib/rucoa/nodes/base.rb +30 -0
  40. data/lib/rucoa/nodes/def_node.rb +59 -0
  41. data/lib/rucoa/nodes/lvar_node.rb +25 -0
  42. data/lib/rucoa/nodes/send_node.rb +43 -0
  43. data/lib/rucoa/nodes.rb +1 -0
  44. data/lib/rucoa/parser_builder.rb +1 -0
  45. data/lib/rucoa/position.rb +14 -3
  46. data/lib/rucoa/range.rb +64 -14
  47. data/lib/rucoa/rbs_document_loader.rb +43 -0
  48. data/lib/rucoa/rubocop_autocorrector.rb +1 -1
  49. data/lib/rucoa/rubocop_investigator.rb +1 -1
  50. data/lib/rucoa/server.rb +63 -13
  51. data/lib/rucoa/source.rb +59 -4
  52. data/lib/rucoa/source_store.rb +6 -10
  53. data/lib/rucoa/types/method_type.rb +23 -0
  54. data/lib/rucoa/types.rb +7 -0
  55. data/lib/rucoa/version.rb +1 -1
  56. data/lib/rucoa/yard_glob_document_loader.rb +47 -0
  57. data/lib/rucoa/yard_string_document_loader.rb +70 -0
  58. data/lib/rucoa.rb +9 -0
  59. data/rucoa.gemspec +2 -0
  60. metadata +58 -2
@@ -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
data/lib/rucoa.rb CHANGED
@@ -5,21 +5,30 @@ require_relative 'rucoa/version'
5
5
  module Rucoa
6
6
  autoload :Cli, 'rucoa/cli'
7
7
  autoload :Configuration, 'rucoa/configuration'
8
+ autoload :DefinitionArchiver, 'rucoa/definition_archiver'
9
+ autoload :DefinitionBuilders, 'rucoa/definition_builders'
10
+ autoload :Definitions, 'rucoa/definitions'
11
+ autoload :DefinitionStore, 'rucoa/definition_store'
8
12
  autoload :Errors, 'rucoa/errors'
9
13
  autoload :HandlerConcerns, 'rucoa/handler_concerns'
10
14
  autoload :Handlers, 'rucoa/handlers'
11
15
  autoload :MessageReader, 'rucoa/message_reader'
12
16
  autoload :MessageWriter, 'rucoa/message_writer'
13
17
  autoload :NodeConcerns, 'rucoa/node_concerns'
18
+ autoload :NodeInspector, 'rucoa/node_inspector'
14
19
  autoload :Nodes, 'rucoa/nodes'
15
20
  autoload :Parser, 'rucoa/parser'
16
21
  autoload :ParserBuilder, 'rucoa/parser_builder'
17
22
  autoload :Position, 'rucoa/position'
18
23
  autoload :Range, 'rucoa/range'
24
+ autoload :RbsDocumentLoader, 'rucoa/rbs_document_loader'
19
25
  autoload :RubocopAutocorrector, 'rucoa/rubocop_autocorrector'
20
26
  autoload :RubocopConfigurationChecker, 'rucoa/rubocop_configuration_checker'
21
27
  autoload :RubocopInvestigator, 'rucoa/rubocop_investigator'
22
28
  autoload :Server, 'rucoa/server'
23
29
  autoload :Source, 'rucoa/source'
24
30
  autoload :SourceStore, 'rucoa/source_store'
31
+ autoload :Types, 'rucoa/types'
32
+ autoload :YardGlobDocumentLoader, 'rucoa/yard_glob_document_loader'
33
+ autoload :YardStringDocumentLoader, 'rucoa/yard_string_document_loader'
25
34
  end
data/rucoa.gemspec CHANGED
@@ -28,5 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.require_paths = ['lib']
29
29
 
30
30
  spec.add_dependency 'parser'
31
+ spec.add_dependency 'rbs'
31
32
  spec.add_dependency 'rubocop'
33
+ spec.add_dependency 'yard'
32
34
  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.4.0
4
+ version: 0.6.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-08 00:00:00.000000000 Z
11
+ date: 2022-09-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rbs
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rubocop
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +52,20 @@ dependencies:
38
52
  - - ">="
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: yard
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
41
69
  description:
42
70
  email:
43
71
  - r7kamura@gmail.com
@@ -54,30 +82,52 @@ files:
54
82
  - LICENSE.txt
55
83
  - README.md
56
84
  - Rakefile
85
+ - data/definitions_ruby_3_1
57
86
  - exe/rucoa
87
+ - images/diagnostics.gif
88
+ - images/document-formatting.gif
89
+ - images/document-symbol.gif
90
+ - images/selection-ranges.gif
58
91
  - lib/rucoa.rb
59
92
  - lib/rucoa/cli.rb
60
93
  - lib/rucoa/configuration.rb
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
+ - lib/rucoa/definition_store.rb
100
+ - lib/rucoa/definitions.rb
101
+ - lib/rucoa/definitions/base.rb
102
+ - lib/rucoa/definitions/constant_definition.rb
103
+ - lib/rucoa/definitions/method_definition.rb
104
+ - lib/rucoa/definitions/method_parameter_definition.rb
61
105
  - lib/rucoa/errors.rb
62
106
  - lib/rucoa/handler_concerns.rb
63
107
  - lib/rucoa/handler_concerns/configuration_requestable.rb
64
108
  - lib/rucoa/handler_concerns/diagnostics_publishable.rb
65
109
  - lib/rucoa/handlers.rb
66
110
  - lib/rucoa/handlers/base.rb
111
+ - lib/rucoa/handlers/exit_handler.rb
67
112
  - lib/rucoa/handlers/initialize_handler.rb
68
113
  - lib/rucoa/handlers/initialized_handler.rb
114
+ - lib/rucoa/handlers/shutdown_handler.rb
69
115
  - lib/rucoa/handlers/text_document_code_action_handler.rb
116
+ - lib/rucoa/handlers/text_document_completion_handler.rb
70
117
  - lib/rucoa/handlers/text_document_did_change_handler.rb
71
118
  - lib/rucoa/handlers/text_document_did_open_handler.rb
72
119
  - lib/rucoa/handlers/text_document_document_symbol_handler.rb
73
120
  - lib/rucoa/handlers/text_document_formatting_handler.rb
121
+ - lib/rucoa/handlers/text_document_hover_handler.rb
74
122
  - lib/rucoa/handlers/text_document_range_formatting_handler.rb
75
123
  - lib/rucoa/handlers/text_document_selection_range_handler.rb
124
+ - lib/rucoa/handlers/text_document_signature_help_handler.rb
76
125
  - lib/rucoa/handlers/workspace_did_change_configuration_handler.rb
77
126
  - lib/rucoa/message_reader.rb
78
127
  - lib/rucoa/message_writer.rb
79
128
  - lib/rucoa/node_concerns.rb
80
129
  - lib/rucoa/node_concerns/name_full_qualifiable.rb
130
+ - lib/rucoa/node_inspector.rb
81
131
  - lib/rucoa/nodes.rb
82
132
  - lib/rucoa/nodes/base.rb
83
133
  - lib/rucoa/nodes/casgn_node.rb
@@ -85,6 +135,7 @@ files:
85
135
  - lib/rucoa/nodes/const_node.rb
86
136
  - lib/rucoa/nodes/def_node.rb
87
137
  - lib/rucoa/nodes/defs_node.rb
138
+ - lib/rucoa/nodes/lvar_node.rb
88
139
  - lib/rucoa/nodes/module_node.rb
89
140
  - lib/rucoa/nodes/sclass_node.rb
90
141
  - lib/rucoa/nodes/send_node.rb
@@ -94,13 +145,18 @@ files:
94
145
  - lib/rucoa/parser_builder.rb
95
146
  - lib/rucoa/position.rb
96
147
  - lib/rucoa/range.rb
148
+ - lib/rucoa/rbs_document_loader.rb
97
149
  - lib/rucoa/rubocop_autocorrector.rb
98
150
  - lib/rucoa/rubocop_configuration_checker.rb
99
151
  - lib/rucoa/rubocop_investigator.rb
100
152
  - lib/rucoa/server.rb
101
153
  - lib/rucoa/source.rb
102
154
  - lib/rucoa/source_store.rb
155
+ - lib/rucoa/types.rb
156
+ - lib/rucoa/types/method_type.rb
103
157
  - lib/rucoa/version.rb
158
+ - lib/rucoa/yard_glob_document_loader.rb
159
+ - lib/rucoa/yard_string_document_loader.rb
104
160
  - rucoa.gemspec
105
161
  homepage: https://github.com/r7kamura/rucoa
106
162
  licenses: