solargraph 0.56.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 (191) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +2 -0
  3. data/.github/workflows/linting.yml +127 -0
  4. data/.github/workflows/plugins.yml +183 -7
  5. data/.github/workflows/rspec.yml +55 -5
  6. data/.github/workflows/typecheck.yml +6 -3
  7. data/.gitignore +6 -0
  8. data/.overcommit.yml +72 -0
  9. data/.rspec +1 -0
  10. data/.rubocop.yml +66 -0
  11. data/.rubocop_todo.yml +1279 -0
  12. data/.yardopts +1 -0
  13. data/CHANGELOG.md +92 -1
  14. data/README.md +8 -4
  15. data/Rakefile +125 -13
  16. data/bin/solargraph +3 -0
  17. data/lib/solargraph/api_map/cache.rb +110 -109
  18. data/lib/solargraph/api_map/constants.rb +279 -0
  19. data/lib/solargraph/api_map/index.rb +193 -175
  20. data/lib/solargraph/api_map/source_to_yard.rb +97 -88
  21. data/lib/solargraph/api_map/store.rb +384 -266
  22. data/lib/solargraph/api_map.rb +945 -973
  23. data/lib/solargraph/bench.rb +1 -0
  24. data/lib/solargraph/complex_type/type_methods.rb +228 -222
  25. data/lib/solargraph/complex_type/unique_type.rb +482 -475
  26. data/lib/solargraph/complex_type.rb +444 -423
  27. data/lib/solargraph/convention/active_support_concern.rb +111 -0
  28. data/lib/solargraph/convention/base.rb +17 -0
  29. data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -0
  30. data/lib/solargraph/convention/data_definition/data_definition_node.rb +91 -0
  31. data/lib/solargraph/convention/data_definition.rb +105 -0
  32. data/lib/solargraph/convention/gemspec.rb +3 -2
  33. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +61 -60
  34. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +102 -100
  35. data/lib/solargraph/convention/struct_definition.rb +164 -101
  36. data/lib/solargraph/convention.rb +32 -2
  37. data/lib/solargraph/diagnostics/require_not_found.rb +53 -53
  38. data/lib/solargraph/diagnostics/rubocop.rb +118 -113
  39. data/lib/solargraph/diagnostics/rubocop_helpers.rb +68 -66
  40. data/lib/solargraph/diagnostics/type_check.rb +55 -55
  41. data/lib/solargraph/doc_map.rb +439 -405
  42. data/lib/solargraph/environ.rb +9 -2
  43. data/lib/solargraph/equality.rb +34 -33
  44. data/lib/solargraph/gem_pins.rb +98 -88
  45. data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
  46. data/lib/solargraph/language_server/host/dispatch.rb +130 -128
  47. data/lib/solargraph/language_server/host/message_worker.rb +112 -109
  48. data/lib/solargraph/language_server/host/sources.rb +99 -99
  49. data/lib/solargraph/language_server/host.rb +878 -871
  50. data/lib/solargraph/language_server/message/base.rb +2 -1
  51. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +114 -114
  52. data/lib/solargraph/language_server/message/extended/document.rb +23 -23
  53. data/lib/solargraph/language_server/message/text_document/completion.rb +56 -56
  54. data/lib/solargraph/language_server/message/text_document/definition.rb +40 -38
  55. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +26 -26
  56. data/lib/solargraph/language_server/message/text_document/formatting.rb +148 -131
  57. data/lib/solargraph/language_server/message/text_document/hover.rb +58 -58
  58. data/lib/solargraph/language_server/message/text_document/signature_help.rb +24 -24
  59. data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -24
  60. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +2 -0
  61. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
  62. data/lib/solargraph/language_server/progress.rb +8 -0
  63. data/lib/solargraph/language_server/request.rb +4 -1
  64. data/lib/solargraph/library.rb +683 -666
  65. data/lib/solargraph/location.rb +82 -79
  66. data/lib/solargraph/logging.rb +37 -28
  67. data/lib/solargraph/page.rb +3 -0
  68. data/lib/solargraph/parser/comment_ripper.rb +69 -62
  69. data/lib/solargraph/parser/flow_sensitive_typing.rb +255 -227
  70. data/lib/solargraph/parser/node_processor/base.rb +92 -87
  71. data/lib/solargraph/parser/node_processor.rb +62 -46
  72. data/lib/solargraph/parser/parser_gem/class_methods.rb +149 -159
  73. data/lib/solargraph/parser/parser_gem/flawed_builder.rb +1 -0
  74. data/lib/solargraph/parser/parser_gem/node_chainer.rb +166 -164
  75. data/lib/solargraph/parser/parser_gem/node_methods.rb +486 -497
  76. data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -21
  77. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +59 -59
  78. data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +15 -15
  79. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +46 -45
  80. data/lib/solargraph/parser/parser_gem/node_processors/casgn_node.rb +1 -21
  81. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +53 -53
  82. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +23 -21
  83. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +40 -40
  84. data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +29 -29
  85. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +59 -53
  86. data/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb +0 -22
  87. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -41
  88. data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -16
  89. data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +38 -37
  90. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +52 -43
  91. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +291 -271
  92. data/lib/solargraph/parser/parser_gem/node_processors/sym_node.rb +1 -0
  93. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +29 -29
  94. data/lib/solargraph/parser/parser_gem/node_processors.rb +70 -66
  95. data/lib/solargraph/parser/region.rb +69 -66
  96. data/lib/solargraph/parser/snippet.rb +17 -15
  97. data/lib/solargraph/pin/base.rb +729 -651
  98. data/lib/solargraph/pin/base_variable.rb +126 -125
  99. data/lib/solargraph/pin/block.rb +104 -103
  100. data/lib/solargraph/pin/breakable.rb +9 -9
  101. data/lib/solargraph/pin/callable.rb +231 -218
  102. data/lib/solargraph/pin/closure.rb +72 -74
  103. data/lib/solargraph/pin/common.rb +79 -75
  104. data/lib/solargraph/pin/constant.rb +2 -0
  105. data/lib/solargraph/pin/conversions.rb +123 -123
  106. data/lib/solargraph/pin/delegated_method.rb +120 -120
  107. data/lib/solargraph/pin/documenting.rb +114 -114
  108. data/lib/solargraph/pin/instance_variable.rb +34 -34
  109. data/lib/solargraph/pin/keyword.rb +20 -20
  110. data/lib/solargraph/pin/local_variable.rb +75 -76
  111. data/lib/solargraph/pin/method.rb +672 -651
  112. data/lib/solargraph/pin/method_alias.rb +34 -31
  113. data/lib/solargraph/pin/namespace.rb +115 -115
  114. data/lib/solargraph/pin/parameter.rb +275 -261
  115. data/lib/solargraph/pin/proxy_type.rb +39 -35
  116. data/lib/solargraph/pin/reference/override.rb +47 -33
  117. data/lib/solargraph/pin/reference/superclass.rb +15 -10
  118. data/lib/solargraph/pin/reference.rb +39 -22
  119. data/lib/solargraph/pin/search.rb +61 -56
  120. data/lib/solargraph/pin/signature.rb +61 -59
  121. data/lib/solargraph/pin/symbol.rb +53 -48
  122. data/lib/solargraph/pin/until.rb +18 -18
  123. data/lib/solargraph/pin/while.rb +18 -18
  124. data/lib/solargraph/pin.rb +44 -44
  125. data/lib/solargraph/pin_cache.rb +245 -185
  126. data/lib/solargraph/position.rb +132 -116
  127. data/lib/solargraph/range.rb +112 -107
  128. data/lib/solargraph/rbs_map/conversions.rb +823 -773
  129. data/lib/solargraph/rbs_map/core_fills.rb +18 -0
  130. data/lib/solargraph/rbs_map/core_map.rb +58 -51
  131. data/lib/solargraph/rbs_map/stdlib_map.rb +43 -43
  132. data/lib/solargraph/rbs_map.rb +163 -150
  133. data/lib/solargraph/shell.rb +352 -268
  134. data/lib/solargraph/source/chain/call.rb +337 -333
  135. data/lib/solargraph/source/chain/constant.rb +26 -89
  136. data/lib/solargraph/source/chain/hash.rb +34 -34
  137. data/lib/solargraph/source/chain/if.rb +28 -28
  138. data/lib/solargraph/source/chain/instance_variable.rb +13 -13
  139. data/lib/solargraph/source/chain/link.rb +11 -2
  140. data/lib/solargraph/source/chain/literal.rb +48 -48
  141. data/lib/solargraph/source/chain/or.rb +23 -23
  142. data/lib/solargraph/source/chain.rb +291 -282
  143. data/lib/solargraph/source/change.rb +82 -82
  144. data/lib/solargraph/source/cursor.rb +166 -167
  145. data/lib/solargraph/source/encoding_fixes.rb +23 -23
  146. data/lib/solargraph/source/source_chainer.rb +194 -194
  147. data/lib/solargraph/source/updater.rb +55 -55
  148. data/lib/solargraph/source.rb +498 -495
  149. data/lib/solargraph/source_map/clip.rb +226 -234
  150. data/lib/solargraph/source_map/data.rb +34 -30
  151. data/lib/solargraph/source_map/mapper.rb +259 -259
  152. data/lib/solargraph/source_map.rb +212 -200
  153. data/lib/solargraph/type_checker/checks.rb +124 -124
  154. data/lib/solargraph/type_checker/param_def.rb +37 -35
  155. data/lib/solargraph/type_checker/problem.rb +32 -32
  156. data/lib/solargraph/type_checker/rules.rb +84 -62
  157. data/lib/solargraph/type_checker.rb +814 -699
  158. data/lib/solargraph/version.rb +5 -5
  159. data/lib/solargraph/workspace/config.rb +255 -239
  160. data/lib/solargraph/workspace/require_paths.rb +97 -0
  161. data/lib/solargraph/workspace.rb +220 -249
  162. data/lib/solargraph/yard_map/helpers.rb +44 -16
  163. data/lib/solargraph/yard_map/mapper/to_constant.rb +5 -5
  164. data/lib/solargraph/yard_map/mapper/to_method.rb +130 -134
  165. data/lib/solargraph/yard_map/mapper/to_namespace.rb +31 -30
  166. data/lib/solargraph/yard_map/mapper.rb +79 -79
  167. data/lib/solargraph/yard_map/to_method.rb +89 -88
  168. data/lib/solargraph/yardoc.rb +87 -49
  169. data/lib/solargraph.rb +105 -90
  170. data/rbs/fills/bundler/0/bundler.rbs +4271 -0
  171. data/rbs/fills/open3/0/open3.rbs +172 -0
  172. data/rbs/fills/rubygems/0/basic_specification.rbs +326 -0
  173. data/rbs/fills/rubygems/0/errors.rbs +364 -0
  174. data/rbs/fills/rubygems/0/spec_fetcher.rbs +107 -0
  175. data/rbs/fills/rubygems/0/specification.rbs +1753 -0
  176. data/rbs/fills/{tuple.rbs → tuple/tuple.rbs} +2 -3
  177. data/rbs/shims/ast/0/node.rbs +5 -0
  178. data/rbs/shims/ast/2.4/.rbs_meta.yaml +9 -0
  179. data/rbs/shims/ast/2.4/ast.rbs +73 -0
  180. data/rbs/shims/parser/3.2.0.1/builders/default.rbs +195 -0
  181. data/rbs/shims/parser/3.2.0.1/manifest.yaml +7 -0
  182. data/rbs/shims/parser/3.2.0.1/parser.rbs +201 -0
  183. data/rbs/shims/parser/3.2.0.1/polyfill.rbs +4 -0
  184. data/rbs/shims/thor/1.2.0.1/.rbs_meta.yaml +9 -0
  185. data/rbs/shims/thor/1.2.0.1/manifest.yaml +7 -0
  186. data/rbs/shims/thor/1.2.0.1/thor.rbs +17 -0
  187. data/rbs_collection.yaml +4 -4
  188. data/solargraph.gemspec +26 -5
  189. metadata +187 -15
  190. data/lib/.rubocop.yml +0 -22
  191. data/lib/solargraph/parser/node_methods.rb +0 -97
@@ -16,7 +16,7 @@ module Solargraph
16
16
  # @return [String]
17
17
  attr_reader :method
18
18
 
19
- # @return [Hash{String => Array<undefined>, Hash{String => undefined}, String, Integer}]
19
+ # @return [Hash{String => undefined}]
20
20
  attr_reader :params
21
21
 
22
22
  # @return [Hash, Array, nil]
@@ -79,6 +79,7 @@ module Solargraph
79
79
 
80
80
  private
81
81
 
82
+ # @return [void]
82
83
  def accept_or_cancel
83
84
  if host.cancel?(id)
84
85
  # https://microsoft.github.io/language-server-protocol/specifications/specification-current/#cancelRequest
@@ -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
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,38 +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
- def code_location
14
- suggestions = host.definitions_at(params['textDocument']['uri'], @line, @column)
15
- return nil if suggestions.empty?
16
- suggestions.reject { |pin| pin.best_location.nil? || pin.best_location.filename.nil? }.map do |pin|
17
- {
18
- uri: file_to_uri(pin.best_location.filename),
19
- range: pin.best_location.range.to_hash
20
- }
21
- end
22
- end
23
-
24
- def require_location
25
- # @todo Terrible hack
26
- lib = host.library_for(params['textDocument']['uri'])
27
- rloc = Solargraph::Location.new(uri_to_file(params['textDocument']['uri']), Solargraph::Range.from_to(@line, @column, @line, @column))
28
- dloc = lib.locate_ref(rloc)
29
- return nil if dloc.nil?
30
- [
31
- {
32
- uri: file_to_uri(dloc.filename),
33
- range: dloc.range.to_hash
34
- }
35
- ]
36
- end
37
- end
38
- 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