solargraph 0.58.0 → 0.58.2

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 (150) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +2 -0
  3. data/.gitignore +1 -0
  4. data/CHANGELOG.md +9 -0
  5. data/bin/solargraph +8 -8
  6. data/lib/solargraph/api_map/cache.rb +110 -110
  7. data/lib/solargraph/api_map/constants.rb +279 -279
  8. data/lib/solargraph/api_map/index.rb +193 -193
  9. data/lib/solargraph/api_map/source_to_yard.rb +97 -97
  10. data/lib/solargraph/api_map/store.rb +384 -384
  11. data/lib/solargraph/api_map.rb +945 -945
  12. data/lib/solargraph/complex_type/type_methods.rb +228 -228
  13. data/lib/solargraph/complex_type/unique_type.rb +482 -482
  14. data/lib/solargraph/complex_type.rb +444 -444
  15. data/lib/solargraph/convention/data_definition/data_definition_node.rb +91 -91
  16. data/lib/solargraph/convention/data_definition.rb +105 -105
  17. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +61 -61
  18. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +102 -102
  19. data/lib/solargraph/convention/struct_definition.rb +164 -164
  20. data/lib/solargraph/diagnostics/require_not_found.rb +53 -53
  21. data/lib/solargraph/diagnostics/rubocop.rb +118 -118
  22. data/lib/solargraph/diagnostics/rubocop_helpers.rb +68 -68
  23. data/lib/solargraph/diagnostics/type_check.rb +55 -55
  24. data/lib/solargraph/doc_map.rb +439 -439
  25. data/lib/solargraph/equality.rb +34 -34
  26. data/lib/solargraph/gem_pins.rb +98 -98
  27. data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
  28. data/lib/solargraph/language_server/host/dispatch.rb +130 -130
  29. data/lib/solargraph/language_server/host/message_worker.rb +112 -112
  30. data/lib/solargraph/language_server/host/sources.rb +99 -99
  31. data/lib/solargraph/language_server/host.rb +878 -878
  32. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +114 -114
  33. data/lib/solargraph/language_server/message/extended/document.rb +23 -23
  34. data/lib/solargraph/language_server/message/text_document/completion.rb +56 -56
  35. data/lib/solargraph/language_server/message/text_document/definition.rb +40 -40
  36. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +26 -26
  37. data/lib/solargraph/language_server/message/text_document/formatting.rb +148 -148
  38. data/lib/solargraph/language_server/message/text_document/hover.rb +58 -58
  39. data/lib/solargraph/language_server/message/text_document/signature_help.rb +24 -24
  40. data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -25
  41. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
  42. data/lib/solargraph/library.rb +683 -683
  43. data/lib/solargraph/location.rb +82 -82
  44. data/lib/solargraph/logging.rb +37 -37
  45. data/lib/solargraph/parser/comment_ripper.rb +69 -69
  46. data/lib/solargraph/parser/flow_sensitive_typing.rb +255 -255
  47. data/lib/solargraph/parser/node_processor/base.rb +92 -92
  48. data/lib/solargraph/parser/node_processor.rb +62 -62
  49. data/lib/solargraph/parser/parser_gem/class_methods.rb +149 -149
  50. data/lib/solargraph/parser/parser_gem/node_chainer.rb +166 -166
  51. data/lib/solargraph/parser/parser_gem/node_methods.rb +486 -486
  52. data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -22
  53. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +59 -59
  54. data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +15 -15
  55. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +46 -46
  56. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +53 -53
  57. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +23 -23
  58. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +40 -40
  59. data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +29 -29
  60. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +59 -59
  61. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -98
  62. data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -17
  63. data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +38 -38
  64. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +52 -52
  65. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +291 -291
  66. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +29 -29
  67. data/lib/solargraph/parser/parser_gem/node_processors.rb +70 -70
  68. data/lib/solargraph/parser/region.rb +69 -69
  69. data/lib/solargraph/parser/snippet.rb +17 -17
  70. data/lib/solargraph/pin/base.rb +729 -729
  71. data/lib/solargraph/pin/base_variable.rb +126 -126
  72. data/lib/solargraph/pin/block.rb +104 -104
  73. data/lib/solargraph/pin/breakable.rb +9 -9
  74. data/lib/solargraph/pin/callable.rb +231 -231
  75. data/lib/solargraph/pin/closure.rb +72 -72
  76. data/lib/solargraph/pin/common.rb +79 -79
  77. data/lib/solargraph/pin/conversions.rb +123 -123
  78. data/lib/solargraph/pin/delegated_method.rb +120 -120
  79. data/lib/solargraph/pin/documenting.rb +114 -114
  80. data/lib/solargraph/pin/instance_variable.rb +34 -34
  81. data/lib/solargraph/pin/keyword.rb +20 -20
  82. data/lib/solargraph/pin/local_variable.rb +75 -75
  83. data/lib/solargraph/pin/method.rb +672 -672
  84. data/lib/solargraph/pin/method_alias.rb +34 -34
  85. data/lib/solargraph/pin/namespace.rb +115 -115
  86. data/lib/solargraph/pin/parameter.rb +275 -275
  87. data/lib/solargraph/pin/proxy_type.rb +39 -39
  88. data/lib/solargraph/pin/reference/override.rb +47 -47
  89. data/lib/solargraph/pin/reference/superclass.rb +15 -15
  90. data/lib/solargraph/pin/reference.rb +39 -39
  91. data/lib/solargraph/pin/search.rb +61 -61
  92. data/lib/solargraph/pin/signature.rb +61 -61
  93. data/lib/solargraph/pin/symbol.rb +53 -53
  94. data/lib/solargraph/pin/until.rb +18 -18
  95. data/lib/solargraph/pin/while.rb +18 -18
  96. data/lib/solargraph/pin.rb +44 -44
  97. data/lib/solargraph/pin_cache.rb +245 -245
  98. data/lib/solargraph/position.rb +132 -119
  99. data/lib/solargraph/range.rb +112 -112
  100. data/lib/solargraph/rbs_map/conversions.rb +823 -823
  101. data/lib/solargraph/rbs_map/core_map.rb +58 -58
  102. data/lib/solargraph/rbs_map/stdlib_map.rb +43 -43
  103. data/lib/solargraph/rbs_map.rb +163 -163
  104. data/lib/solargraph/shell.rb +352 -352
  105. data/lib/solargraph/source/chain/call.rb +337 -337
  106. data/lib/solargraph/source/chain/constant.rb +26 -26
  107. data/lib/solargraph/source/chain/hash.rb +34 -34
  108. data/lib/solargraph/source/chain/if.rb +28 -28
  109. data/lib/solargraph/source/chain/instance_variable.rb +13 -13
  110. data/lib/solargraph/source/chain/literal.rb +48 -48
  111. data/lib/solargraph/source/chain/or.rb +23 -23
  112. data/lib/solargraph/source/chain.rb +291 -291
  113. data/lib/solargraph/source/change.rb +82 -82
  114. data/lib/solargraph/source/cursor.rb +166 -166
  115. data/lib/solargraph/source/encoding_fixes.rb +23 -23
  116. data/lib/solargraph/source/source_chainer.rb +194 -194
  117. data/lib/solargraph/source/updater.rb +55 -55
  118. data/lib/solargraph/source.rb +498 -498
  119. data/lib/solargraph/source_map/clip.rb +226 -226
  120. data/lib/solargraph/source_map/data.rb +34 -34
  121. data/lib/solargraph/source_map/mapper.rb +259 -259
  122. data/lib/solargraph/source_map.rb +212 -212
  123. data/lib/solargraph/type_checker/checks.rb +124 -124
  124. data/lib/solargraph/type_checker/param_def.rb +37 -37
  125. data/lib/solargraph/type_checker/problem.rb +32 -32
  126. data/lib/solargraph/type_checker/rules.rb +84 -84
  127. data/lib/solargraph/type_checker.rb +814 -814
  128. data/lib/solargraph/version.rb +5 -5
  129. data/lib/solargraph/workspace/config.rb +255 -255
  130. data/lib/solargraph/workspace/require_paths.rb +97 -97
  131. data/lib/solargraph/workspace.rb +220 -220
  132. data/lib/solargraph/yard_map/helpers.rb +44 -44
  133. data/lib/solargraph/yard_map/mapper/to_method.rb +130 -130
  134. data/lib/solargraph/yard_map/mapper/to_namespace.rb +31 -31
  135. data/lib/solargraph/yard_map/mapper.rb +79 -79
  136. data/lib/solargraph/yard_map/to_method.rb +89 -89
  137. data/lib/solargraph/yardoc.rb +87 -87
  138. data/lib/solargraph.rb +105 -105
  139. data/rbs_collection.yaml +1 -1
  140. metadata +13 -12
  141. /data/{sig → rbs}/shims/ast/0/node.rbs +0 -0
  142. /data/{sig → rbs}/shims/ast/2.4/.rbs_meta.yaml +0 -0
  143. /data/{sig → rbs}/shims/ast/2.4/ast.rbs +0 -0
  144. /data/{sig → rbs}/shims/parser/3.2.0.1/builders/default.rbs +0 -0
  145. /data/{sig → rbs}/shims/parser/3.2.0.1/manifest.yaml +0 -0
  146. /data/{sig → rbs}/shims/parser/3.2.0.1/parser.rbs +0 -0
  147. /data/{sig → rbs}/shims/parser/3.2.0.1/polyfill.rbs +0 -0
  148. /data/{sig → rbs}/shims/thor/1.2.0.1/.rbs_meta.yaml +0 -0
  149. /data/{sig → rbs}/shims/thor/1.2.0.1/manifest.yaml +0 -0
  150. /data/{sig → rbs}/shims/thor/1.2.0.1/thor.rbs +0 -0
@@ -1,114 +1,114 @@
1
- # frozen_string_literal: true
2
-
3
-
4
- # @todo PR the RBS gem to add this
5
- # @!parse
6
- # module ::Gem
7
- # class SpecFetcher; end
8
- # end
9
-
10
- module Solargraph
11
- module LanguageServer
12
- module Message
13
- module Extended
14
- # Check if a more recent version of the Solargraph gem is available.
15
- # Notify the client when an update exists. If the `verbose` parameter
16
- # is true, notify the client when the gem is up to date.
17
- #
18
- class CheckGemVersion < Base
19
- # @return [Gem::SpecFetcher]
20
- def self.fetcher
21
- @fetcher ||= Gem::SpecFetcher.new
22
- end
23
-
24
- # @param obj [Gem::SpecFetcher]
25
- # @return [Gem::SpecFetcher]
26
- def self.fetcher= obj
27
- @fetcher = obj
28
- end
29
-
30
- GEM_ZERO = Gem::Version.new('0.0.0')
31
-
32
- # @param host [Solargraph::LanguageServer::Host]
33
- # @param request [Hash]
34
- # @param current [Gem::Version]
35
- # @param available [Gem::Version, nil]
36
- def initialize host, request, current: Gem::Version.new(Solargraph::VERSION), available: nil
37
- super(host, request)
38
- @current = current
39
- @available = available
40
- end
41
-
42
- def process
43
- if available > GEM_ZERO
44
- if available > current
45
- host.show_message_request "Solargraph gem version #{available} is available. (Current version: #{current})",
46
- LanguageServer::MessageTypes::INFO,
47
- ['Update now'] do |result|
48
- next unless result == 'Update now'
49
- cmd = if host.options['useBundler']
50
- 'bundle update solargraph'
51
- else
52
- 'gem update solargraph'
53
- end
54
- o, s = Open3.capture2(cmd)
55
- if s == 0
56
- host.show_message 'Successfully updated the Solargraph gem.', LanguageServer::MessageTypes::INFO
57
- host.send_notification '$/solargraph/restart', {}
58
- else
59
- host.show_message 'An error occurred while updating the gem.', LanguageServer::MessageTypes::ERROR
60
- end
61
- end
62
- elsif params['verbose']
63
- host.show_message "The Solargraph gem is up to date (version #{Solargraph::VERSION})."
64
- end
65
- elsif fetched?
66
- Solargraph::Logging.logger.warn error
67
- host.show_message(error, MessageTypes::ERROR) if params['verbose']
68
- end
69
- set_result({
70
- installed: current,
71
- available: available
72
- })
73
- end
74
-
75
- private
76
-
77
- # @return [Gem::Version]
78
- attr_reader :current
79
-
80
- # @return [Gem::Version]
81
- def available
82
- if !@available && !@fetched
83
- @fetched = true
84
- begin
85
- @available ||= begin
86
- # @sg-ignore Variable type could not be inferred for tuple
87
- # @type [Gem::Dependency, nil]
88
- tuple = CheckGemVersion.fetcher.search_for_dependency(Gem::Dependency.new('solargraph')).flatten.first
89
- if tuple.nil?
90
- @error = 'An error occurred fetching the gem data'
91
- GEM_ZERO
92
- else
93
- tuple.version
94
- end
95
- end
96
- rescue Errno::EADDRNOTAVAIL => e
97
- @error = "Unable to connect to gem source: #{e.message}"
98
- GEM_ZERO
99
- end
100
- end
101
- @available
102
- end
103
-
104
- def fetched?
105
- @fetched ||= false
106
- end
107
-
108
- # @return [String, nil]
109
- attr_reader :error
110
- end
111
- end
112
- end
113
- end
114
- end
1
+ # frozen_string_literal: true
2
+
3
+
4
+ # @todo PR the RBS gem to add this
5
+ # @!parse
6
+ # module ::Gem
7
+ # class SpecFetcher; end
8
+ # end
9
+
10
+ module Solargraph
11
+ module LanguageServer
12
+ module Message
13
+ module Extended
14
+ # Check if a more recent version of the Solargraph gem is available.
15
+ # Notify the client when an update exists. If the `verbose` parameter
16
+ # is true, notify the client when the gem is up to date.
17
+ #
18
+ class CheckGemVersion < Base
19
+ # @return [Gem::SpecFetcher]
20
+ def self.fetcher
21
+ @fetcher ||= Gem::SpecFetcher.new
22
+ end
23
+
24
+ # @param obj [Gem::SpecFetcher]
25
+ # @return [Gem::SpecFetcher]
26
+ def self.fetcher= obj
27
+ @fetcher = obj
28
+ end
29
+
30
+ GEM_ZERO = Gem::Version.new('0.0.0')
31
+
32
+ # @param host [Solargraph::LanguageServer::Host]
33
+ # @param request [Hash]
34
+ # @param current [Gem::Version]
35
+ # @param available [Gem::Version, nil]
36
+ def initialize host, request, current: Gem::Version.new(Solargraph::VERSION), available: nil
37
+ super(host, request)
38
+ @current = current
39
+ @available = available
40
+ end
41
+
42
+ def process
43
+ if available > GEM_ZERO
44
+ if available > current
45
+ host.show_message_request "Solargraph gem version #{available} is available. (Current version: #{current})",
46
+ LanguageServer::MessageTypes::INFO,
47
+ ['Update now'] do |result|
48
+ next unless result == 'Update now'
49
+ cmd = if host.options['useBundler']
50
+ 'bundle update solargraph'
51
+ else
52
+ 'gem update solargraph'
53
+ end
54
+ o, s = Open3.capture2(cmd)
55
+ if s == 0
56
+ host.show_message 'Successfully updated the Solargraph gem.', LanguageServer::MessageTypes::INFO
57
+ host.send_notification '$/solargraph/restart', {}
58
+ else
59
+ host.show_message 'An error occurred while updating the gem.', LanguageServer::MessageTypes::ERROR
60
+ end
61
+ end
62
+ elsif params['verbose']
63
+ host.show_message "The Solargraph gem is up to date (version #{Solargraph::VERSION})."
64
+ end
65
+ elsif fetched?
66
+ Solargraph::Logging.logger.warn error
67
+ host.show_message(error, MessageTypes::ERROR) if params['verbose']
68
+ end
69
+ set_result({
70
+ installed: current,
71
+ available: available
72
+ })
73
+ end
74
+
75
+ private
76
+
77
+ # @return [Gem::Version]
78
+ attr_reader :current
79
+
80
+ # @return [Gem::Version]
81
+ def available
82
+ if !@available && !@fetched
83
+ @fetched = true
84
+ begin
85
+ @available ||= begin
86
+ # @sg-ignore Variable type could not be inferred for tuple
87
+ # @type [Gem::Dependency, nil]
88
+ tuple = CheckGemVersion.fetcher.search_for_dependency(Gem::Dependency.new('solargraph')).flatten.first
89
+ if tuple.nil?
90
+ @error = 'An error occurred fetching the gem data'
91
+ GEM_ZERO
92
+ else
93
+ tuple.version
94
+ end
95
+ end
96
+ rescue Errno::EADDRNOTAVAIL => e
97
+ @error = "Unable to connect to gem source: #{e.message}"
98
+ GEM_ZERO
99
+ end
100
+ end
101
+ @available
102
+ end
103
+
104
+ def fetched?
105
+ @fetched ||= false
106
+ end
107
+
108
+ # @return [String, nil]
109
+ attr_reader :error
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
@@ -1,23 +1,23 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- module Message
6
- module Extended
7
- class Document < Base
8
- def process
9
- api_map, pins = host.document(params['query'])
10
- page = Solargraph::Page.new(host.options['viewsPath'])
11
- content = page.render('document', layout: true, locals: { api_map: api_map, pins: pins })
12
- set_result(
13
- content: content
14
- )
15
- rescue StandardError => e
16
- Solargraph.logger.warn "Error processing document: [#{e.class}] #{e.message}"
17
- Solargraph.logger.debug e.backtrace.join("\n")
18
- end
19
- end
20
- end
21
- end
22
- end
23
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ module Extended
7
+ class Document < Base
8
+ def process
9
+ api_map, pins = host.document(params['query'])
10
+ page = Solargraph::Page.new(host.options['viewsPath'])
11
+ content = page.render('document', layout: true, locals: { api_map: api_map, pins: pins })
12
+ set_result(
13
+ content: content
14
+ )
15
+ rescue StandardError => e
16
+ Solargraph.logger.warn "Error processing document: [#{e.class}] #{e.message}"
17
+ Solargraph.logger.debug e.backtrace.join("\n")
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,56 +1,56 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- module Message
6
- module TextDocument
7
- class Completion < Base
8
- def process
9
- return set_error(ErrorCodes::REQUEST_CANCELLED, "cancelled by so many request") if host.has_pending_completions?
10
-
11
- line = params['position']['line']
12
- col = params['position']['character']
13
- begin
14
- completion = host.completions_at(params['textDocument']['uri'], line, col)
15
- items = []
16
- last_context = nil
17
- idx = -1
18
- completion.pins.each do |pin|
19
- idx += 1 if last_context != pin.context
20
- items.push pin.completion_item.merge({
21
- textEdit: {
22
- range: completion.range.to_hash,
23
- newText: pin.name.sub(/=$/, ' = ').sub(/:$/, ': ')
24
- },
25
- sortText: "#{idx.to_s.rjust(4, '0')}#{pin.name}"
26
- })
27
- items.last[:data][:uri] = params['textDocument']['uri']
28
- last_context = pin.context
29
- end
30
- set_result(
31
- isIncomplete: false,
32
- items: items
33
- )
34
- rescue InvalidOffsetError => e
35
- Logging.logger.info "Completion ignored invalid offset: #{params['textDocument']['uri']}, line #{line}, character #{col}"
36
- set_result empty_result
37
- end
38
- rescue FileNotFoundError => e
39
- Logging.logger.warn "[#{e.class}] #{e.message}"
40
- Logging.logger.warn e.backtrace.join("\n")
41
- set_result empty_result
42
- end
43
-
44
- # @param incomplete [Boolean]
45
- # @return [Hash]
46
- def empty_result incomplete = false
47
- {
48
- isIncomplete: incomplete,
49
- items: []
50
- }
51
- end
52
- end
53
- end
54
- end
55
- end
56
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ module TextDocument
7
+ class Completion < Base
8
+ def process
9
+ return set_error(ErrorCodes::REQUEST_CANCELLED, "cancelled by so many request") if host.has_pending_completions?
10
+
11
+ line = params['position']['line']
12
+ col = params['position']['character']
13
+ begin
14
+ completion = host.completions_at(params['textDocument']['uri'], line, col)
15
+ items = []
16
+ last_context = nil
17
+ idx = -1
18
+ completion.pins.each do |pin|
19
+ idx += 1 if last_context != pin.context
20
+ items.push pin.completion_item.merge({
21
+ textEdit: {
22
+ range: completion.range.to_hash,
23
+ newText: pin.name.sub(/=$/, ' = ').sub(/:$/, ': ')
24
+ },
25
+ sortText: "#{idx.to_s.rjust(4, '0')}#{pin.name}"
26
+ })
27
+ items.last[:data][:uri] = params['textDocument']['uri']
28
+ last_context = pin.context
29
+ end
30
+ set_result(
31
+ isIncomplete: false,
32
+ items: items
33
+ )
34
+ rescue InvalidOffsetError => e
35
+ Logging.logger.info "Completion ignored invalid offset: #{params['textDocument']['uri']}, line #{line}, character #{col}"
36
+ set_result empty_result
37
+ end
38
+ rescue FileNotFoundError => e
39
+ Logging.logger.warn "[#{e.class}] #{e.message}"
40
+ Logging.logger.warn e.backtrace.join("\n")
41
+ set_result empty_result
42
+ end
43
+
44
+ # @param incomplete [Boolean]
45
+ # @return [Hash]
46
+ def empty_result incomplete = false
47
+ {
48
+ isIncomplete: incomplete,
49
+ items: []
50
+ }
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -1,40 +1,40 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph::LanguageServer::Message::TextDocument
4
- class Definition < Base
5
- def process
6
- @line = params['position']['line']
7
- @column = params['position']['character']
8
- set_result(code_location || require_location || [])
9
- end
10
-
11
- private
12
-
13
- # @return [Array<Hash>, nil]
14
- def code_location
15
- suggestions = host.definitions_at(params['textDocument']['uri'], @line, @column)
16
- return nil if suggestions.empty?
17
- suggestions.reject { |pin| pin.best_location.nil? || pin.best_location.filename.nil? }.map do |pin|
18
- {
19
- uri: file_to_uri(pin.best_location.filename),
20
- range: pin.best_location.range.to_hash
21
- }
22
- end
23
- end
24
-
25
- # @return [Array<Hash>, nil]
26
- def require_location
27
- # @todo Terrible hack
28
- lib = host.library_for(params['textDocument']['uri'])
29
- rloc = Solargraph::Location.new(uri_to_file(params['textDocument']['uri']), Solargraph::Range.from_to(@line, @column, @line, @column))
30
- dloc = lib.locate_ref(rloc)
31
- return nil if dloc.nil?
32
- [
33
- {
34
- uri: file_to_uri(dloc.filename),
35
- range: dloc.range.to_hash
36
- }
37
- ]
38
- end
39
- end
40
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph::LanguageServer::Message::TextDocument
4
+ class Definition < Base
5
+ def process
6
+ @line = params['position']['line']
7
+ @column = params['position']['character']
8
+ set_result(code_location || require_location || [])
9
+ end
10
+
11
+ private
12
+
13
+ # @return [Array<Hash>, nil]
14
+ def code_location
15
+ suggestions = host.definitions_at(params['textDocument']['uri'], @line, @column)
16
+ return nil if suggestions.empty?
17
+ suggestions.reject { |pin| pin.best_location.nil? || pin.best_location.filename.nil? }.map do |pin|
18
+ {
19
+ uri: file_to_uri(pin.best_location.filename),
20
+ range: pin.best_location.range.to_hash
21
+ }
22
+ end
23
+ end
24
+
25
+ # @return [Array<Hash>, nil]
26
+ def require_location
27
+ # @todo Terrible hack
28
+ lib = host.library_for(params['textDocument']['uri'])
29
+ rloc = Solargraph::Location.new(uri_to_file(params['textDocument']['uri']), Solargraph::Range.from_to(@line, @column, @line, @column))
30
+ dloc = lib.locate_ref(rloc)
31
+ return nil if dloc.nil?
32
+ [
33
+ {
34
+ uri: file_to_uri(dloc.filename),
35
+ range: dloc.range.to_hash
36
+ }
37
+ ]
38
+ end
39
+ end
40
+ end
@@ -1,26 +1,26 @@
1
- # frozen_string_literal: true
2
-
3
- class Solargraph::LanguageServer::Message::TextDocument::DocumentSymbol < Solargraph::LanguageServer::Message::Base
4
- include Solargraph::LanguageServer::UriHelpers
5
-
6
- def process
7
- pins = host.document_symbols params['textDocument']['uri']
8
- info = pins.map do |pin|
9
- next nil unless pin.best_location&.filename
10
-
11
- result = {
12
- name: pin.name,
13
- containerName: pin.namespace,
14
- kind: pin.symbol_kind,
15
- location: {
16
- uri: file_to_uri(pin.best_location.filename),
17
- range: pin.best_location.range.to_hash
18
- },
19
- deprecated: pin.deprecated?
20
- }
21
- result
22
- end.compact
23
-
24
- set_result info
25
- end
26
- end
1
+ # frozen_string_literal: true
2
+
3
+ class Solargraph::LanguageServer::Message::TextDocument::DocumentSymbol < Solargraph::LanguageServer::Message::Base
4
+ include Solargraph::LanguageServer::UriHelpers
5
+
6
+ def process
7
+ pins = host.document_symbols params['textDocument']['uri']
8
+ info = pins.map do |pin|
9
+ next nil unless pin.best_location&.filename
10
+
11
+ result = {
12
+ name: pin.name,
13
+ containerName: pin.namespace,
14
+ kind: pin.symbol_kind,
15
+ location: {
16
+ uri: file_to_uri(pin.best_location.filename),
17
+ range: pin.best_location.range.to_hash
18
+ },
19
+ deprecated: pin.deprecated?
20
+ }
21
+ result
22
+ end.compact
23
+
24
+ set_result info
25
+ end
26
+ end