rucoa 0.4.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
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: