solargraph 0.58.1 → 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 (147) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +7 -1
  4. data/lib/solargraph/api_map/cache.rb +110 -110
  5. data/lib/solargraph/api_map/constants.rb +279 -279
  6. data/lib/solargraph/api_map/index.rb +193 -193
  7. data/lib/solargraph/api_map/source_to_yard.rb +97 -97
  8. data/lib/solargraph/api_map/store.rb +384 -384
  9. data/lib/solargraph/api_map.rb +945 -945
  10. data/lib/solargraph/complex_type/type_methods.rb +228 -228
  11. data/lib/solargraph/complex_type/unique_type.rb +482 -482
  12. data/lib/solargraph/complex_type.rb +444 -444
  13. data/lib/solargraph/convention/data_definition/data_definition_node.rb +91 -91
  14. data/lib/solargraph/convention/data_definition.rb +105 -105
  15. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +61 -61
  16. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +102 -102
  17. data/lib/solargraph/convention/struct_definition.rb +164 -164
  18. data/lib/solargraph/diagnostics/require_not_found.rb +53 -53
  19. data/lib/solargraph/diagnostics/rubocop.rb +118 -118
  20. data/lib/solargraph/diagnostics/rubocop_helpers.rb +68 -68
  21. data/lib/solargraph/diagnostics/type_check.rb +55 -55
  22. data/lib/solargraph/doc_map.rb +439 -439
  23. data/lib/solargraph/equality.rb +34 -34
  24. data/lib/solargraph/gem_pins.rb +98 -98
  25. data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
  26. data/lib/solargraph/language_server/host/dispatch.rb +130 -130
  27. data/lib/solargraph/language_server/host/message_worker.rb +112 -112
  28. data/lib/solargraph/language_server/host/sources.rb +99 -99
  29. data/lib/solargraph/language_server/host.rb +878 -878
  30. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +114 -114
  31. data/lib/solargraph/language_server/message/extended/document.rb +23 -23
  32. data/lib/solargraph/language_server/message/text_document/completion.rb +56 -56
  33. data/lib/solargraph/language_server/message/text_document/definition.rb +40 -40
  34. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +26 -26
  35. data/lib/solargraph/language_server/message/text_document/formatting.rb +148 -148
  36. data/lib/solargraph/language_server/message/text_document/hover.rb +58 -58
  37. data/lib/solargraph/language_server/message/text_document/signature_help.rb +24 -24
  38. data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -25
  39. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
  40. data/lib/solargraph/library.rb +683 -683
  41. data/lib/solargraph/location.rb +82 -82
  42. data/lib/solargraph/logging.rb +37 -37
  43. data/lib/solargraph/parser/comment_ripper.rb +69 -69
  44. data/lib/solargraph/parser/flow_sensitive_typing.rb +255 -255
  45. data/lib/solargraph/parser/node_processor/base.rb +92 -92
  46. data/lib/solargraph/parser/node_processor.rb +62 -62
  47. data/lib/solargraph/parser/parser_gem/class_methods.rb +149 -149
  48. data/lib/solargraph/parser/parser_gem/node_chainer.rb +166 -166
  49. data/lib/solargraph/parser/parser_gem/node_methods.rb +486 -486
  50. data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -22
  51. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +59 -59
  52. data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +15 -15
  53. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +46 -46
  54. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +53 -53
  55. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +23 -23
  56. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +40 -40
  57. data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +29 -29
  58. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +59 -59
  59. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -98
  60. data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -17
  61. data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +38 -38
  62. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +52 -52
  63. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +291 -291
  64. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +29 -29
  65. data/lib/solargraph/parser/parser_gem/node_processors.rb +70 -70
  66. data/lib/solargraph/parser/region.rb +69 -69
  67. data/lib/solargraph/parser/snippet.rb +17 -17
  68. data/lib/solargraph/pin/base.rb +729 -729
  69. data/lib/solargraph/pin/base_variable.rb +126 -126
  70. data/lib/solargraph/pin/block.rb +104 -104
  71. data/lib/solargraph/pin/breakable.rb +9 -9
  72. data/lib/solargraph/pin/callable.rb +231 -231
  73. data/lib/solargraph/pin/closure.rb +72 -72
  74. data/lib/solargraph/pin/common.rb +79 -79
  75. data/lib/solargraph/pin/conversions.rb +123 -123
  76. data/lib/solargraph/pin/delegated_method.rb +120 -120
  77. data/lib/solargraph/pin/documenting.rb +114 -114
  78. data/lib/solargraph/pin/instance_variable.rb +34 -34
  79. data/lib/solargraph/pin/keyword.rb +20 -20
  80. data/lib/solargraph/pin/local_variable.rb +75 -75
  81. data/lib/solargraph/pin/method.rb +672 -672
  82. data/lib/solargraph/pin/method_alias.rb +34 -34
  83. data/lib/solargraph/pin/namespace.rb +115 -115
  84. data/lib/solargraph/pin/parameter.rb +275 -275
  85. data/lib/solargraph/pin/proxy_type.rb +39 -39
  86. data/lib/solargraph/pin/reference/override.rb +47 -47
  87. data/lib/solargraph/pin/reference/superclass.rb +15 -15
  88. data/lib/solargraph/pin/reference.rb +39 -39
  89. data/lib/solargraph/pin/search.rb +61 -61
  90. data/lib/solargraph/pin/signature.rb +61 -61
  91. data/lib/solargraph/pin/symbol.rb +53 -53
  92. data/lib/solargraph/pin/until.rb +18 -18
  93. data/lib/solargraph/pin/while.rb +18 -18
  94. data/lib/solargraph/pin.rb +44 -44
  95. data/lib/solargraph/pin_cache.rb +245 -245
  96. data/lib/solargraph/position.rb +132 -119
  97. data/lib/solargraph/range.rb +112 -112
  98. data/lib/solargraph/rbs_map/conversions.rb +823 -823
  99. data/lib/solargraph/rbs_map/core_map.rb +58 -58
  100. data/lib/solargraph/rbs_map/stdlib_map.rb +43 -43
  101. data/lib/solargraph/rbs_map.rb +163 -163
  102. data/lib/solargraph/shell.rb +352 -352
  103. data/lib/solargraph/source/chain/call.rb +337 -337
  104. data/lib/solargraph/source/chain/constant.rb +26 -26
  105. data/lib/solargraph/source/chain/hash.rb +34 -34
  106. data/lib/solargraph/source/chain/if.rb +28 -28
  107. data/lib/solargraph/source/chain/instance_variable.rb +13 -13
  108. data/lib/solargraph/source/chain/literal.rb +48 -48
  109. data/lib/solargraph/source/chain/or.rb +23 -23
  110. data/lib/solargraph/source/chain.rb +291 -291
  111. data/lib/solargraph/source/change.rb +82 -82
  112. data/lib/solargraph/source/cursor.rb +166 -166
  113. data/lib/solargraph/source/source_chainer.rb +194 -194
  114. data/lib/solargraph/source/updater.rb +55 -55
  115. data/lib/solargraph/source.rb +498 -498
  116. data/lib/solargraph/source_map/clip.rb +226 -226
  117. data/lib/solargraph/source_map/data.rb +34 -34
  118. data/lib/solargraph/source_map/mapper.rb +259 -259
  119. data/lib/solargraph/source_map.rb +212 -212
  120. data/lib/solargraph/type_checker/checks.rb +124 -124
  121. data/lib/solargraph/type_checker/param_def.rb +37 -37
  122. data/lib/solargraph/type_checker/problem.rb +32 -32
  123. data/lib/solargraph/type_checker/rules.rb +84 -84
  124. data/lib/solargraph/type_checker.rb +814 -814
  125. data/lib/solargraph/version.rb +1 -1
  126. data/lib/solargraph/workspace/config.rb +255 -255
  127. data/lib/solargraph/workspace/require_paths.rb +97 -97
  128. data/lib/solargraph/workspace.rb +220 -220
  129. data/lib/solargraph/yard_map/helpers.rb +44 -44
  130. data/lib/solargraph/yard_map/mapper/to_method.rb +130 -130
  131. data/lib/solargraph/yard_map/mapper/to_namespace.rb +31 -31
  132. data/lib/solargraph/yard_map/mapper.rb +79 -79
  133. data/lib/solargraph/yard_map/to_method.rb +89 -89
  134. data/lib/solargraph/yardoc.rb +87 -87
  135. data/lib/solargraph.rb +105 -105
  136. data/rbs_collection.yaml +1 -1
  137. metadata +12 -12
  138. /data/{sig → rbs}/shims/ast/0/node.rbs +0 -0
  139. /data/{sig → rbs}/shims/ast/2.4/.rbs_meta.yaml +0 -0
  140. /data/{sig → rbs}/shims/ast/2.4/ast.rbs +0 -0
  141. /data/{sig → rbs}/shims/parser/3.2.0.1/builders/default.rbs +0 -0
  142. /data/{sig → rbs}/shims/parser/3.2.0.1/manifest.yaml +0 -0
  143. /data/{sig → rbs}/shims/parser/3.2.0.1/parser.rbs +0 -0
  144. /data/{sig → rbs}/shims/parser/3.2.0.1/polyfill.rbs +0 -0
  145. /data/{sig → rbs}/shims/thor/1.2.0.1/.rbs_meta.yaml +0 -0
  146. /data/{sig → rbs}/shims/thor/1.2.0.1/manifest.yaml +0 -0
  147. /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