solargraph 0.58.2 → 0.59.0.dev.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 (203) hide show
  1. checksums.yaml +4 -4
  2. data/.envrc +3 -0
  3. data/.github/workflows/linting.yml +4 -5
  4. data/.github/workflows/plugins.yml +41 -34
  5. data/.github/workflows/rspec.yml +44 -23
  6. data/.github/workflows/typecheck.yml +2 -2
  7. data/.rubocop.yml +32 -5
  8. data/.rubocop_todo.yml +50 -966
  9. data/Gemfile +3 -1
  10. data/README.md +3 -3
  11. data/Rakefile +26 -23
  12. data/bin/solargraph +2 -1
  13. data/lib/solargraph/api_map/cache.rb +3 -3
  14. data/lib/solargraph/api_map/constants.rb +13 -3
  15. data/lib/solargraph/api_map/index.rb +23 -18
  16. data/lib/solargraph/api_map/source_to_yard.rb +22 -9
  17. data/lib/solargraph/api_map/store.rb +33 -28
  18. data/lib/solargraph/api_map.rb +150 -82
  19. data/lib/solargraph/bench.rb +44 -45
  20. data/lib/solargraph/complex_type/conformance.rb +176 -0
  21. data/lib/solargraph/complex_type/type_methods.rb +28 -17
  22. data/lib/solargraph/complex_type/unique_type.rb +218 -57
  23. data/lib/solargraph/complex_type.rb +170 -57
  24. data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -61
  25. data/lib/solargraph/convention/data_definition/data_definition_node.rb +7 -5
  26. data/lib/solargraph/convention/data_definition.rb +5 -2
  27. data/lib/solargraph/convention/gemfile.rb +15 -15
  28. data/lib/solargraph/convention/gemspec.rb +23 -23
  29. data/lib/solargraph/convention/rakefile.rb +17 -17
  30. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +2 -1
  31. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +4 -3
  32. data/lib/solargraph/convention/struct_definition.rb +8 -4
  33. data/lib/solargraph/convention.rb +78 -78
  34. data/lib/solargraph/converters/dd.rb +19 -17
  35. data/lib/solargraph/converters/dl.rb +17 -15
  36. data/lib/solargraph/converters/dt.rb +17 -15
  37. data/lib/solargraph/converters/misc.rb +3 -1
  38. data/lib/solargraph/diagnostics/require_not_found.rb +1 -0
  39. data/lib/solargraph/diagnostics/rubocop.rb +11 -10
  40. data/lib/solargraph/diagnostics/rubocop_helpers.rb +5 -3
  41. data/lib/solargraph/diagnostics/type_check.rb +11 -10
  42. data/lib/solargraph/diagnostics/update_errors.rb +37 -41
  43. data/lib/solargraph/doc_map.rb +133 -373
  44. data/lib/solargraph/equality.rb +4 -4
  45. data/lib/solargraph/gem_pins.rb +21 -20
  46. data/lib/solargraph/language_server/error_codes.rb +20 -20
  47. data/lib/solargraph/language_server/host/diagnoser.rb +1 -1
  48. data/lib/solargraph/language_server/host/dispatch.rb +3 -3
  49. data/lib/solargraph/language_server/host/message_worker.rb +4 -3
  50. data/lib/solargraph/language_server/host/sources.rb +2 -1
  51. data/lib/solargraph/language_server/host.rb +30 -22
  52. data/lib/solargraph/language_server/message/base.rb +97 -97
  53. data/lib/solargraph/language_server/message/client/register_capability.rb +13 -15
  54. data/lib/solargraph/language_server/message/completion_item/resolve.rb +58 -60
  55. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +12 -18
  56. data/lib/solargraph/language_server/message/extended/document.rb +1 -0
  57. data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
  58. data/lib/solargraph/language_server/message/extended/download_core.rb +20 -19
  59. data/lib/solargraph/language_server/message/extended/search.rb +20 -20
  60. data/lib/solargraph/language_server/message/initialize.rb +197 -191
  61. data/lib/solargraph/language_server/message/text_document/completion.rb +10 -8
  62. data/lib/solargraph/language_server/message/text_document/definition.rb +41 -32
  63. data/lib/solargraph/language_server/message/text_document/document_highlight.rb +23 -16
  64. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +29 -19
  65. data/lib/solargraph/language_server/message/text_document/formatting.rb +8 -6
  66. data/lib/solargraph/language_server/message/text_document/hover.rb +5 -5
  67. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +18 -11
  68. data/lib/solargraph/language_server/message/text_document/references.rb +23 -16
  69. data/lib/solargraph/language_server/message/text_document/rename.rb +26 -19
  70. data/lib/solargraph/language_server/message/text_document/signature_help.rb +3 -2
  71. data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -17
  72. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +41 -35
  73. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +48 -40
  74. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +32 -26
  75. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +27 -17
  76. data/lib/solargraph/language_server/message.rb +94 -94
  77. data/lib/solargraph/language_server/request.rb +29 -27
  78. data/lib/solargraph/language_server/transport/data_reader.rb +72 -74
  79. data/lib/solargraph/language_server/uri_helpers.rb +49 -49
  80. data/lib/solargraph/library.rb +85 -44
  81. data/lib/solargraph/location.rb +17 -14
  82. data/lib/solargraph/logging.rb +24 -4
  83. data/lib/solargraph/page.rb +92 -92
  84. data/lib/solargraph/parser/comment_ripper.rb +19 -4
  85. data/lib/solargraph/parser/flow_sensitive_typing.rb +326 -108
  86. data/lib/solargraph/parser/node_processor/base.rb +34 -4
  87. data/lib/solargraph/parser/node_processor.rb +8 -7
  88. data/lib/solargraph/parser/parser_gem/class_methods.rb +32 -14
  89. data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -19
  90. data/lib/solargraph/parser/parser_gem/node_chainer.rb +50 -25
  91. data/lib/solargraph/parser/parser_gem/node_methods.rb +91 -70
  92. data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +4 -4
  93. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +13 -11
  94. data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +9 -0
  95. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +12 -12
  96. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +10 -3
  97. data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +38 -37
  98. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +36 -6
  99. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +5 -3
  100. data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +1 -0
  101. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +3 -1
  102. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +3 -3
  103. data/lib/solargraph/parser/parser_gem/node_processors/or_node.rb +22 -0
  104. data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +1 -1
  105. data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +2 -1
  106. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +4 -5
  107. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +124 -113
  108. data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -29
  109. data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +23 -0
  110. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +6 -2
  111. data/lib/solargraph/parser/parser_gem/node_processors.rb +4 -0
  112. data/lib/solargraph/parser/parser_gem.rb +14 -12
  113. data/lib/solargraph/parser/region.rb +9 -3
  114. data/lib/solargraph/parser/snippet.rb +3 -1
  115. data/lib/solargraph/parser.rb +25 -23
  116. data/lib/solargraph/pin/base.rb +126 -80
  117. data/lib/solargraph/pin/base_variable.rb +273 -24
  118. data/lib/solargraph/pin/block.rb +29 -6
  119. data/lib/solargraph/pin/breakable.rb +7 -1
  120. data/lib/solargraph/pin/callable.rb +65 -21
  121. data/lib/solargraph/pin/closure.rb +7 -10
  122. data/lib/solargraph/pin/common.rb +24 -6
  123. data/lib/solargraph/pin/compound_statement.rb +55 -0
  124. data/lib/solargraph/pin/constant.rb +43 -45
  125. data/lib/solargraph/pin/conversions.rb +10 -4
  126. data/lib/solargraph/pin/delegated_method.rb +19 -8
  127. data/lib/solargraph/pin/documenting.rb +4 -2
  128. data/lib/solargraph/pin/instance_variable.rb +5 -1
  129. data/lib/solargraph/pin/keyword.rb +0 -4
  130. data/lib/solargraph/pin/local_variable.rb +15 -59
  131. data/lib/solargraph/pin/method.rb +153 -104
  132. data/lib/solargraph/pin/method_alias.rb +8 -0
  133. data/lib/solargraph/pin/namespace.rb +19 -12
  134. data/lib/solargraph/pin/parameter.rb +100 -36
  135. data/lib/solargraph/pin/proxy_type.rb +4 -1
  136. data/lib/solargraph/pin/reference/override.rb +1 -1
  137. data/lib/solargraph/pin/reference/superclass.rb +2 -0
  138. data/lib/solargraph/pin/reference.rb +19 -0
  139. data/lib/solargraph/pin/search.rb +3 -2
  140. data/lib/solargraph/pin/signature.rb +15 -12
  141. data/lib/solargraph/pin/symbol.rb +2 -1
  142. data/lib/solargraph/pin/until.rb +2 -4
  143. data/lib/solargraph/pin/while.rb +2 -4
  144. data/lib/solargraph/pin.rb +2 -0
  145. data/lib/solargraph/pin_cache.rb +490 -73
  146. data/lib/solargraph/position.rb +14 -10
  147. data/lib/solargraph/range.rb +16 -15
  148. data/lib/solargraph/rbs_map/conversions.rb +343 -214
  149. data/lib/solargraph/rbs_map/core_fills.rb +91 -84
  150. data/lib/solargraph/rbs_map/core_map.rb +24 -17
  151. data/lib/solargraph/rbs_map/stdlib_map.rb +33 -5
  152. data/lib/solargraph/rbs_map.rb +77 -32
  153. data/lib/solargraph/server_methods.rb +16 -16
  154. data/lib/solargraph/shell.rb +128 -73
  155. data/lib/solargraph/source/chain/array.rb +39 -37
  156. data/lib/solargraph/source/chain/call.rb +96 -56
  157. data/lib/solargraph/source/chain/class_variable.rb +13 -13
  158. data/lib/solargraph/source/chain/constant.rb +5 -1
  159. data/lib/solargraph/source/chain/global_variable.rb +13 -13
  160. data/lib/solargraph/source/chain/hash.rb +8 -5
  161. data/lib/solargraph/source/chain/if.rb +12 -10
  162. data/lib/solargraph/source/chain/instance_variable.rb +24 -1
  163. data/lib/solargraph/source/chain/link.rb +99 -109
  164. data/lib/solargraph/source/chain/literal.rb +9 -6
  165. data/lib/solargraph/source/chain/or.rb +10 -4
  166. data/lib/solargraph/source/chain/q_call.rb +13 -11
  167. data/lib/solargraph/source/chain/variable.rb +15 -13
  168. data/lib/solargraph/source/chain/z_super.rb +28 -30
  169. data/lib/solargraph/source/chain.rb +49 -38
  170. data/lib/solargraph/source/change.rb +12 -5
  171. data/lib/solargraph/source/cursor.rb +23 -17
  172. data/lib/solargraph/source/encoding_fixes.rb +6 -7
  173. data/lib/solargraph/source/source_chainer.rb +56 -32
  174. data/lib/solargraph/source/updater.rb +5 -1
  175. data/lib/solargraph/source.rb +59 -35
  176. data/lib/solargraph/source_map/clip.rb +48 -29
  177. data/lib/solargraph/source_map/data.rb +4 -1
  178. data/lib/solargraph/source_map/mapper.rb +71 -42
  179. data/lib/solargraph/source_map.rb +21 -9
  180. data/lib/solargraph/type_checker/problem.rb +3 -1
  181. data/lib/solargraph/type_checker/rules.rb +81 -8
  182. data/lib/solargraph/type_checker.rb +195 -120
  183. data/lib/solargraph/version.rb +1 -1
  184. data/lib/solargraph/workspace/config.rb +13 -10
  185. data/lib/solargraph/workspace/gemspecs.rb +367 -0
  186. data/lib/solargraph/workspace/require_paths.rb +1 -0
  187. data/lib/solargraph/workspace.rb +149 -30
  188. data/lib/solargraph/yard_map/helpers.rb +8 -3
  189. data/lib/solargraph/yard_map/mapper/to_method.rb +13 -7
  190. data/lib/solargraph/yard_map/mapper/to_namespace.rb +2 -1
  191. data/lib/solargraph/yard_map/mapper.rb +13 -8
  192. data/lib/solargraph/yard_tags.rb +20 -20
  193. data/lib/solargraph/yardoc.rb +33 -23
  194. data/lib/solargraph.rb +29 -8
  195. data/rbs/fills/rubygems/0/dependency.rbs +193 -0
  196. data/rbs/fills/tuple/tuple.rbs +28 -0
  197. data/rbs/shims/ast/0/node.rbs +1 -1
  198. data/rbs/shims/diff-lcs/1.5/diff-lcs.rbs +11 -0
  199. data/solargraph.gemspec +36 -34
  200. metadata +38 -33
  201. data/lib/solargraph/type_checker/checks.rb +0 -124
  202. data/lib/solargraph/type_checker/param_def.rb +0 -37
  203. data/lib/solargraph/yard_map/to_method.rb +0 -89
@@ -43,7 +43,7 @@ module Solargraph
43
43
 
44
44
  # @param corrections [String]
45
45
  # @return [void]
46
- def log_corrections(corrections)
46
+ def log_corrections corrections
47
47
  corrections = corrections&.strip
48
48
  return if corrections&.empty?
49
49
 
@@ -56,7 +56,7 @@ module Solargraph
56
56
 
57
57
  # @param file_uri [String]
58
58
  # @return [Hash{String => undefined}]
59
- def config_for(file_uri)
59
+ def config_for file_uri
60
60
  conf = host.formatter_config(file_uri)
61
61
  return {} unless conf.is_a?(Hash)
62
62
 
@@ -71,10 +71,10 @@ module Solargraph
71
71
  args = [
72
72
  config['cops'] == 'all' ? '-A' : '-a',
73
73
  '--cache', 'false',
74
- '--format', formatter_class(config).name,
74
+ '--format', formatter_class(config).name
75
75
  ]
76
76
 
77
- ['except', 'only'].each do |arg|
77
+ %w[except only].each do |arg|
78
78
  cops = cop_list(config[arg])
79
79
  args += ["--#{arg}", cops] if cops
80
80
  end
@@ -86,7 +86,7 @@ module Solargraph
86
86
  # @param config [Hash{String => String}]
87
87
  # @sg-ignore
88
88
  # @return [Class<RuboCop::Formatter::BaseFormatter>]
89
- def formatter_class(config)
89
+ def formatter_class config
90
90
  if self.class.const_defined?('BlankRubocopFormatter')
91
91
  # @sg-ignore
92
92
  BlankRubocopFormatter
@@ -98,9 +98,11 @@ module Solargraph
98
98
  end
99
99
 
100
100
  # @param value [Array, String]
101
+ #
101
102
  # @return [String, nil]
102
- def cop_list(value)
103
+ def cop_list value
103
104
  # @type [String]
105
+ # @sg-ignore Translate to something flow sensitive typing understands
104
106
  value = value.join(',') if value.respond_to?(:join)
105
107
  return nil if value == '' || !value.is_a?(String)
106
108
  value
@@ -11,12 +11,11 @@ module Solargraph
11
11
  contents = []
12
12
  suggestions = host.definitions_at(params['textDocument']['uri'], line, col)
13
13
  last_link = nil
14
+ # @sg-ignore Need to add nil check here
14
15
  suggestions.each do |pin|
15
16
  parts = []
16
17
  this_link = host.options['enablePages'] ? pin.link_documentation : pin.text_documentation
17
- if !this_link.nil? && this_link != last_link
18
- parts.push this_link
19
- end
18
+ parts.push this_link if !this_link.nil? && this_link != last_link
20
19
  parts.push "`#{pin.detail}`" unless pin.is_a?(Pin::Namespace) || pin.detail.nil?
21
20
  parts.push pin.documentation unless pin.documentation.nil? || pin.documentation.empty?
22
21
  unless parts.empty?
@@ -31,6 +30,7 @@ module Solargraph
31
30
  )
32
31
  rescue FileNotFoundError => e
33
32
  Logging.logger.warn "[#{e.class}] #{e.message}"
33
+ # @sg-ignore Need to add nil check here
34
34
  Logging.logger.warn e.backtrace.join("\n")
35
35
  set_result nil
36
36
  end
@@ -41,8 +41,8 @@ module Solargraph
41
41
  # @return [Hash{Symbol => Hash{Symbol => String}}, nil]
42
42
  def contents_or_nil contents
43
43
  stripped = contents
44
- .map(&:strip)
45
- .reject { |c| c.empty? }
44
+ .map(&:strip)
45
+ .reject(&:empty?)
46
46
  return nil if stripped.empty?
47
47
  {
48
48
  contents: {
@@ -1,11 +1,18 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph::LanguageServer::Message::TextDocument
4
- class PrepareRename < Base
5
- def process
6
- line = params['position']['line']
7
- col = params['position']['character']
8
- set_result host.sources.find(params['textDocument']['uri']).cursor_at(Solargraph::Position.new(line, col)).range.to_hash
9
- end
10
- end
11
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ module TextDocument
7
+ class PrepareRename < Base
8
+ def process
9
+ line = params['position']['line']
10
+ col = params['position']['character']
11
+ set_result host.sources.find(params['textDocument']['uri']).cursor_at(Solargraph::Position.new(line,
12
+ col)).range.to_hash
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,16 +1,23 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph::LanguageServer::Message::TextDocument
4
- class References < Base
5
- def process
6
- locs = host.references_from(params['textDocument']['uri'], params['position']['line'], params['position']['character'])
7
- result = locs.map do |loc|
8
- {
9
- uri: file_to_uri(loc.filename),
10
- range: loc.range.to_hash
11
- }
12
- end
13
- set_result result
14
- end
15
- end
16
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ module TextDocument
7
+ class References < Base
8
+ def process
9
+ locs = host.references_from(params['textDocument']['uri'], params['position']['line'],
10
+ params['position']['character'])
11
+ result = locs.map do |loc|
12
+ {
13
+ uri: file_to_uri(loc.filename),
14
+ range: loc.range.to_hash
15
+ }
16
+ end
17
+ set_result result
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,19 +1,26 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph::LanguageServer::Message::TextDocument
4
- class Rename < Base
5
- def process
6
- locs = host.references_from(params['textDocument']['uri'], params['position']['line'], params['position']['character'], strip: true)
7
- changes = {}
8
- locs.each do |loc|
9
- uri = file_to_uri(loc.filename)
10
- changes[uri] ||= []
11
- changes[uri].push({
12
- range: loc.range.to_hash,
13
- newText: params['newName']
14
- })
15
- end
16
- set_result changes: changes
17
- end
18
- end
19
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ module TextDocument
7
+ class Rename < Base
8
+ def process
9
+ locs = host.references_from(params['textDocument']['uri'], params['position']['line'],
10
+ params['position']['character'], strip: true)
11
+ changes = {}
12
+ locs.each do |loc|
13
+ uri = file_to_uri(loc.filename)
14
+ changes[uri] ||= []
15
+ changes[uri].push({
16
+ range: loc.range.to_hash,
17
+ newText: params['newName']
18
+ })
19
+ end
20
+ set_result changes: changes
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -10,10 +10,11 @@ module Solargraph
10
10
  col = params['position']['character']
11
11
  suggestions = host.signatures_at(params['textDocument']['uri'], line, col)
12
12
  set_result({
13
- signatures: suggestions.flat_map { |pin| pin.signature_help }
14
- })
13
+ signatures: suggestions.flat_map(&:signature_help)
14
+ })
15
15
  rescue FileNotFoundError => e
16
16
  Logging.logger.warn "[#{e.class}] #{e.message}"
17
+ # @sg-ignore Need to add nil check here
17
18
  Logging.logger.warn e.backtrace.join("\n")
18
19
  set_result nil
19
20
  end
@@ -1,24 +1,32 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Solargraph::LanguageServer::Message::TextDocument
4
- class TypeDefinition < Base
5
- def process
6
- @line = params['position']['line']
7
- @column = params['position']['character']
8
- set_result(code_location || [])
9
- end
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ module TextDocument
7
+ class TypeDefinition < Base
8
+ def process
9
+ @line = params['position']['line']
10
+ @column = params['position']['character']
11
+ set_result(code_location || [])
12
+ end
10
13
 
11
- private
14
+ private
12
15
 
13
- # @return [Array<Hash>, nil]
14
- def code_location
15
- suggestions = host.type_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
- }
16
+ # @return [Array<Hash>, nil]
17
+ def code_location
18
+ suggestions = host.type_definitions_at(params['textDocument']['uri'], @line, @column)
19
+ # @sg-ignore Need to add nil check here
20
+ return nil if suggestions.empty?
21
+ # @sg-ignore Need to add nil check here
22
+ suggestions.reject { |pin| pin.best_location.nil? || pin.best_location.filename.nil? }.map do |pin|
23
+ {
24
+ uri: file_to_uri(pin.best_location.filename),
25
+ range: pin.best_location.range.to_hash
26
+ }
27
+ end
28
+ end
29
+ end
22
30
  end
23
31
  end
24
32
  end
@@ -1,35 +1,41 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph::LanguageServer::Message::Workspace
4
- class DidChangeConfiguration < Solargraph::LanguageServer::Message::Base
5
- def process
6
- return unless params['settings']
7
- update = params['settings']['solargraph']
8
- host.configure update
9
- register_from_options
10
- end
11
-
12
- private
13
-
14
- # @return [void]
15
- def register_from_options
16
- Solargraph.logger.debug "Registering capabilities from options: #{host.options.inspect}"
17
- # @type [Array<String>]
18
- y = []
19
- # @type [Array<String>]
20
- n = []
21
- (host.options['completion'] ? y : n).push('textDocument/completion')
22
- (host.options['hover'] ? y : n).push('textDocument/hover', 'textDocument/signatureHelp')
23
- (host.options['autoformat'] ? y : n).push('textDocument/onTypeFormatting')
24
- (host.options['formatting'] ? y : n).push('textDocument/formatting')
25
- (host.options['symbols'] ? y : n).push('textDocument/documentSymbol', 'workspace/symbol')
26
- (host.options['definitions'] ? y : n).push('textDocument/definition')
27
- (host.options['typeDefinitions'] ? y : n).push('textDocument/typeDefinition')
28
- (host.options['references'] ? y : n).push('textDocument/references')
29
- (host.options['folding'] ? y : n).push('textDocument/folding')
30
- (host.options['highlights'] ? y : n).push('textDocument/documentHighlight')
31
- host.register_capabilities y
32
- host.unregister_capabilities n
33
- end
34
- end
35
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ module Workspace
7
+ class DidChangeConfiguration < Solargraph::LanguageServer::Message::Base
8
+ def process
9
+ return unless params['settings']
10
+ update = params['settings']['solargraph']
11
+ host.configure update
12
+ register_from_options
13
+ end
14
+
15
+ private
16
+
17
+ # @return [void]
18
+ def register_from_options
19
+ Solargraph.logger.debug "Registering capabilities from options: #{host.options.inspect}"
20
+ # @type [Array<String>]
21
+ y = []
22
+ # @type [Array<String>]
23
+ n = []
24
+ (host.options['completion'] ? y : n).push('textDocument/completion')
25
+ (host.options['hover'] ? y : n).push('textDocument/hover', 'textDocument/signatureHelp')
26
+ (host.options['autoformat'] ? y : n).push('textDocument/onTypeFormatting')
27
+ (host.options['formatting'] ? y : n).push('textDocument/formatting')
28
+ (host.options['symbols'] ? y : n).push('textDocument/documentSymbol', 'workspace/symbol')
29
+ (host.options['definitions'] ? y : n).push('textDocument/definition')
30
+ (host.options['typeDefinitions'] ? y : n).push('textDocument/typeDefinition')
31
+ (host.options['references'] ? y : n).push('textDocument/references')
32
+ (host.options['folding'] ? y : n).push('textDocument/folding')
33
+ (host.options['highlights'] ? y : n).push('textDocument/documentHighlight')
34
+ host.register_capabilities y
35
+ host.unregister_capabilities n
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -1,40 +1,48 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph::LanguageServer::Message::Workspace
4
- class DidChangeWatchedFiles < Solargraph::LanguageServer::Message::Base
5
- CREATED = 1
6
- CHANGED = 2
7
- DELETED = 3
8
-
9
- include Solargraph::LanguageServer::UriHelpers
10
-
11
- def process
12
- need_catalog = false
13
- to_create = []
14
- to_delete = []
15
-
16
- # @param change [Hash]
17
- params['changes'].each do |change|
18
- if change['type'] == CREATED
19
- to_create << change['uri']
20
- need_catalog = true
21
- elsif change['type'] == CHANGED
22
- next if host.open?(change['uri'])
23
- to_create << change['uri']
24
- need_catalog = true
25
- elsif change['type'] == DELETED
26
- to_delete << change['uri']
27
- need_catalog = true
28
- else
29
- set_error Solargraph::LanguageServer::ErrorCodes::INVALID_PARAMS, "Unknown change type ##{change['type']} for #{uri_to_file(change['uri'])}"
30
- end
31
- end
32
-
33
- host.create *to_create
34
- host.delete *to_delete
35
-
36
- # Force host to catalog libraries after file changes (see castwide/solargraph#139)
37
- host.catalog if need_catalog
38
- end
39
- end
40
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ module Workspace
7
+ class DidChangeWatchedFiles < Solargraph::LanguageServer::Message::Base
8
+ CREATED = 1
9
+ CHANGED = 2
10
+ DELETED = 3
11
+
12
+ include Solargraph::LanguageServer::UriHelpers
13
+
14
+ def process
15
+ need_catalog = false
16
+ to_create = []
17
+ to_delete = []
18
+
19
+ # @param change [Hash]
20
+ params['changes'].each do |change|
21
+ case change['type']
22
+ when CREATED
23
+ to_create << change['uri']
24
+ need_catalog = true
25
+ when CHANGED
26
+ next if host.open?(change['uri'])
27
+ to_create << change['uri']
28
+ need_catalog = true
29
+ when DELETED
30
+ to_delete << change['uri']
31
+ need_catalog = true
32
+ else
33
+ set_error Solargraph::LanguageServer::ErrorCodes::INVALID_PARAMS,
34
+ "Unknown change type ##{change['type']} for #{uri_to_file(change['uri'])}"
35
+ end
36
+ end
37
+
38
+ host.create(*to_create)
39
+ host.delete(*to_delete)
40
+
41
+ # Force host to catalog libraries after file changes (see castwide/solargraph#139)
42
+ host.catalog if need_catalog
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -1,26 +1,32 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph::LanguageServer::Message::Workspace
4
- class DidChangeWorkspaceFolders < Solargraph::LanguageServer::Message::Base
5
- def process
6
- add_folders
7
- remove_folders
8
- end
9
-
10
- private
11
-
12
- # @return [void]
13
- def add_folders
14
- return unless params['event'] && params['event']['added']
15
- host.prepare_folders params['event']['added']
16
- end
17
-
18
- # @return [void]
19
- def remove_folders
20
- return unless params['event'] && params['event']['removed']
21
- params['event']['removed'].each do |folder|
22
- host.remove_folders params['event']['removed']
23
- end
24
- end
25
- end
26
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ module Workspace
7
+ class DidChangeWorkspaceFolders < Solargraph::LanguageServer::Message::Base
8
+ def process
9
+ add_folders
10
+ remove_folders
11
+ end
12
+
13
+ private
14
+
15
+ # @return [void]
16
+ def add_folders
17
+ return unless params['event'] && params['event']['added']
18
+ host.prepare_folders params['event']['added']
19
+ end
20
+
21
+ # @return [void]
22
+ def remove_folders
23
+ return unless params['event'] && params['event']['removed']
24
+ params['event']['removed'].each do |_folder|
25
+ host.remove_folders params['event']['removed']
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,23 +1,33 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Solargraph::LanguageServer::Message::Workspace::WorkspaceSymbol < Solargraph::LanguageServer::Message::Base
4
- include Solargraph::LanguageServer::UriHelpers
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ module Workspace
7
+ class WorkspaceSymbol < Solargraph::LanguageServer::Message::Base
8
+ include Solargraph::LanguageServer::UriHelpers
5
9
 
6
- def process
7
- pins = host.query_symbols(params['query'])
8
- info = pins.map do |pin|
9
- uri = file_to_uri(pin.best_location.filename)
10
- {
11
- name: pin.path,
12
- containerName: pin.namespace,
13
- kind: pin.symbol_kind,
14
- location: {
15
- uri: uri,
16
- range: pin.best_location.range.to_hash
17
- },
18
- deprecated: pin.deprecated?
19
- }
10
+ def process
11
+ pins = host.query_symbols(params['query'])
12
+ info = pins.map do |pin|
13
+ # @sg-ignore Need to add nil check here
14
+ uri = file_to_uri(pin.best_location.filename)
15
+ {
16
+ name: pin.path,
17
+ containerName: pin.namespace,
18
+ kind: pin.symbol_kind,
19
+ location: {
20
+ uri: uri,
21
+ # @sg-ignore Need to add nil check here
22
+ range: pin.best_location.range.to_hash
23
+ },
24
+ deprecated: pin.deprecated?
25
+ }
26
+ end
27
+ set_result info
28
+ end
29
+ end
30
+ end
20
31
  end
21
- set_result info
22
32
  end
23
33
  end