solargraph 0.58.3 → 0.59.0.dev.1

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 (201) 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 -38
  5. data/.github/workflows/rspec.yml +45 -13
  6. data/.github/workflows/typecheck.yml +2 -2
  7. data/.gitignore +0 -1
  8. data/.rubocop_todo.yml +27 -49
  9. data/CHANGELOG.md +1 -10
  10. data/README.md +3 -3
  11. data/Rakefile +1 -0
  12. data/lib/solargraph/api_map/cache.rb +3 -3
  13. data/lib/solargraph/api_map/constants.rb +13 -3
  14. data/lib/solargraph/api_map/index.rb +22 -11
  15. data/lib/solargraph/api_map/source_to_yard.rb +13 -1
  16. data/lib/solargraph/api_map/store.rb +11 -8
  17. data/lib/solargraph/api_map.rb +105 -50
  18. data/lib/solargraph/bench.rb +45 -45
  19. data/lib/solargraph/complex_type/conformance.rb +176 -0
  20. data/lib/solargraph/complex_type/type_methods.rb +16 -2
  21. data/lib/solargraph/complex_type/unique_type.rb +170 -20
  22. data/lib/solargraph/complex_type.rb +119 -14
  23. data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -61
  24. data/lib/solargraph/convention/data_definition/data_definition_node.rb +3 -1
  25. data/lib/solargraph/convention/data_definition.rb +4 -1
  26. data/lib/solargraph/convention/gemfile.rb +15 -15
  27. data/lib/solargraph/convention/gemspec.rb +23 -23
  28. data/lib/solargraph/convention/rakefile.rb +17 -17
  29. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +1 -0
  30. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +1 -0
  31. data/lib/solargraph/convention/struct_definition.rb +5 -1
  32. data/lib/solargraph/convention.rb +78 -78
  33. data/lib/solargraph/converters/dd.rb +17 -17
  34. data/lib/solargraph/converters/dl.rb +15 -15
  35. data/lib/solargraph/converters/dt.rb +15 -15
  36. data/lib/solargraph/converters/misc.rb +1 -1
  37. data/lib/solargraph/diagnostics/require_not_found.rb +1 -0
  38. data/lib/solargraph/diagnostics/rubocop.rb +1 -0
  39. data/lib/solargraph/diagnostics/rubocop_helpers.rb +2 -0
  40. data/lib/solargraph/diagnostics/type_check.rb +1 -0
  41. data/lib/solargraph/diagnostics/update_errors.rb +41 -41
  42. data/lib/solargraph/doc_map.rb +134 -373
  43. data/lib/solargraph/equality.rb +1 -1
  44. data/lib/solargraph/gem_pins.rb +14 -15
  45. data/lib/solargraph/language_server/error_codes.rb +20 -20
  46. data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
  47. data/lib/solargraph/language_server/host/dispatch.rb +1 -0
  48. data/lib/solargraph/language_server/host/message_worker.rb +2 -1
  49. data/lib/solargraph/language_server/host/sources.rb +1 -0
  50. data/lib/solargraph/language_server/host.rb +6 -1
  51. data/lib/solargraph/language_server/message/base.rb +97 -97
  52. data/lib/solargraph/language_server/message/client/register_capability.rb +15 -15
  53. data/lib/solargraph/language_server/message/completion_item/resolve.rb +60 -60
  54. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +2 -7
  55. data/lib/solargraph/language_server/message/extended/document.rb +1 -0
  56. data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
  57. data/lib/solargraph/language_server/message/extended/download_core.rb +19 -19
  58. data/lib/solargraph/language_server/message/extended/search.rb +20 -20
  59. data/lib/solargraph/language_server/message/initialize.rb +191 -191
  60. data/lib/solargraph/language_server/message/text_document/completion.rb +2 -0
  61. data/lib/solargraph/language_server/message/text_document/definition.rb +2 -0
  62. data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -16
  63. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +2 -0
  64. data/lib/solargraph/language_server/message/text_document/formatting.rb +2 -0
  65. data/lib/solargraph/language_server/message/text_document/hover.rb +2 -0
  66. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -11
  67. data/lib/solargraph/language_server/message/text_document/references.rb +16 -16
  68. data/lib/solargraph/language_server/message/text_document/rename.rb +19 -19
  69. data/lib/solargraph/language_server/message/text_document/signature_help.rb +1 -0
  70. data/lib/solargraph/language_server/message/text_document/type_definition.rb +2 -0
  71. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +35 -35
  72. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +40 -40
  73. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +26 -26
  74. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +2 -0
  75. data/lib/solargraph/language_server/message.rb +94 -94
  76. data/lib/solargraph/language_server/request.rb +27 -27
  77. data/lib/solargraph/language_server/transport/data_reader.rb +74 -74
  78. data/lib/solargraph/language_server/uri_helpers.rb +49 -49
  79. data/lib/solargraph/library.rb +59 -13
  80. data/lib/solargraph/location.rb +9 -4
  81. data/lib/solargraph/logging.rb +21 -1
  82. data/lib/solargraph/page.rb +92 -92
  83. data/lib/solargraph/parser/comment_ripper.rb +7 -0
  84. data/lib/solargraph/parser/flow_sensitive_typing.rb +330 -102
  85. data/lib/solargraph/parser/node_processor/base.rb +32 -2
  86. data/lib/solargraph/parser/node_processor.rb +7 -6
  87. data/lib/solargraph/parser/parser_gem/class_methods.rb +28 -10
  88. data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -19
  89. data/lib/solargraph/parser/parser_gem/node_chainer.rb +31 -6
  90. data/lib/solargraph/parser/parser_gem/node_methods.rb +27 -7
  91. data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +4 -4
  92. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +2 -0
  93. data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +9 -0
  94. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +11 -11
  95. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +7 -0
  96. data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +37 -37
  97. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +36 -6
  98. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +3 -2
  99. data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +1 -0
  100. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +3 -1
  101. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +2 -2
  102. data/lib/solargraph/parser/parser_gem/node_processors/or_node.rb +22 -0
  103. data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +1 -1
  104. data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +2 -1
  105. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +1 -0
  106. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +12 -7
  107. data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -29
  108. data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +23 -0
  109. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +5 -1
  110. data/lib/solargraph/parser/parser_gem/node_processors.rb +4 -0
  111. data/lib/solargraph/parser/parser_gem.rb +12 -12
  112. data/lib/solargraph/parser/region.rb +9 -3
  113. data/lib/solargraph/parser/snippet.rb +1 -1
  114. data/lib/solargraph/parser.rb +23 -23
  115. data/lib/solargraph/pin/base.rb +53 -21
  116. data/lib/solargraph/pin/base_variable.rb +312 -20
  117. data/lib/solargraph/pin/block.rb +26 -4
  118. data/lib/solargraph/pin/breakable.rb +5 -1
  119. data/lib/solargraph/pin/callable.rb +50 -3
  120. data/lib/solargraph/pin/closure.rb +2 -6
  121. data/lib/solargraph/pin/common.rb +20 -5
  122. data/lib/solargraph/pin/compound_statement.rb +55 -0
  123. data/lib/solargraph/pin/constant.rb +45 -45
  124. data/lib/solargraph/pin/conversions.rb +2 -1
  125. data/lib/solargraph/pin/delegated_method.rb +15 -4
  126. data/lib/solargraph/pin/documenting.rb +1 -0
  127. data/lib/solargraph/pin/instance_variable.rb +5 -1
  128. data/lib/solargraph/pin/keyword.rb +0 -4
  129. data/lib/solargraph/pin/local_variable.rb +13 -57
  130. data/lib/solargraph/pin/method.rb +90 -42
  131. data/lib/solargraph/pin/method_alias.rb +8 -0
  132. data/lib/solargraph/pin/namespace.rb +7 -1
  133. data/lib/solargraph/pin/parameter.rb +76 -13
  134. data/lib/solargraph/pin/proxy_type.rb +2 -1
  135. data/lib/solargraph/pin/reference/override.rb +1 -1
  136. data/lib/solargraph/pin/reference/superclass.rb +2 -0
  137. data/lib/solargraph/pin/reference.rb +2 -0
  138. data/lib/solargraph/pin/search.rb +1 -0
  139. data/lib/solargraph/pin/signature.rb +8 -0
  140. data/lib/solargraph/pin/symbol.rb +1 -1
  141. data/lib/solargraph/pin/until.rb +1 -1
  142. data/lib/solargraph/pin/while.rb +1 -1
  143. data/lib/solargraph/pin.rb +2 -0
  144. data/lib/solargraph/pin_cache.rb +477 -57
  145. data/lib/solargraph/position.rb +12 -26
  146. data/lib/solargraph/range.rb +6 -6
  147. data/lib/solargraph/rbs_map/conversions.rb +33 -10
  148. data/lib/solargraph/rbs_map/core_fills.rb +84 -84
  149. data/lib/solargraph/rbs_map/core_map.rb +24 -17
  150. data/lib/solargraph/rbs_map/stdlib_map.rb +34 -5
  151. data/lib/solargraph/rbs_map.rb +74 -20
  152. data/lib/solargraph/server_methods.rb +16 -16
  153. data/lib/solargraph/shell.rb +73 -39
  154. data/lib/solargraph/source/chain/array.rb +37 -37
  155. data/lib/solargraph/source/chain/call.rb +52 -17
  156. data/lib/solargraph/source/chain/class_variable.rb +13 -13
  157. data/lib/solargraph/source/chain/constant.rb +2 -0
  158. data/lib/solargraph/source/chain/global_variable.rb +13 -13
  159. data/lib/solargraph/source/chain/hash.rb +1 -0
  160. data/lib/solargraph/source/chain/if.rb +1 -0
  161. data/lib/solargraph/source/chain/instance_variable.rb +22 -1
  162. data/lib/solargraph/source/chain/link.rb +109 -109
  163. data/lib/solargraph/source/chain/literal.rb +5 -0
  164. data/lib/solargraph/source/chain/or.rb +9 -1
  165. data/lib/solargraph/source/chain/q_call.rb +11 -11
  166. data/lib/solargraph/source/chain/variable.rb +13 -13
  167. data/lib/solargraph/source/chain/z_super.rb +30 -30
  168. data/lib/solargraph/source/chain.rb +25 -22
  169. data/lib/solargraph/source/change.rb +9 -2
  170. data/lib/solargraph/source/cursor.rb +7 -1
  171. data/lib/solargraph/source/source_chainer.rb +13 -3
  172. data/lib/solargraph/source/updater.rb +4 -0
  173. data/lib/solargraph/source.rb +33 -7
  174. data/lib/solargraph/source_map/clip.rb +13 -2
  175. data/lib/solargraph/source_map/data.rb +4 -1
  176. data/lib/solargraph/source_map/mapper.rb +24 -1
  177. data/lib/solargraph/source_map.rb +14 -6
  178. data/lib/solargraph/type_checker/problem.rb +3 -1
  179. data/lib/solargraph/type_checker/rules.rb +75 -2
  180. data/lib/solargraph/type_checker.rb +111 -30
  181. data/lib/solargraph/version.rb +1 -1
  182. data/lib/solargraph/workspace/config.rb +3 -1
  183. data/lib/solargraph/workspace/gemspecs.rb +367 -0
  184. data/lib/solargraph/workspace/require_paths.rb +1 -0
  185. data/lib/solargraph/workspace.rb +158 -16
  186. data/lib/solargraph/yard_map/helpers.rb +2 -1
  187. data/lib/solargraph/yard_map/mapper/to_method.rb +5 -1
  188. data/lib/solargraph/yard_map/mapper/to_namespace.rb +1 -0
  189. data/lib/solargraph/yard_map/mapper.rb +5 -0
  190. data/lib/solargraph/yard_tags.rb +20 -20
  191. data/lib/solargraph/yardoc.rb +33 -23
  192. data/lib/solargraph.rb +24 -3
  193. data/rbs/fills/rubygems/0/dependency.rbs +193 -0
  194. data/rbs/fills/tuple/tuple.rbs +28 -0
  195. data/rbs/shims/ast/0/node.rbs +1 -1
  196. data/rbs/shims/diff-lcs/1.5/diff-lcs.rbs +11 -0
  197. data/solargraph.gemspec +2 -1
  198. metadata +12 -7
  199. data/lib/solargraph/type_checker/checks.rb +0 -124
  200. data/lib/solargraph/type_checker/param_def.rb +0 -37
  201. data/lib/solargraph/yard_map/to_method.rb +0 -89
@@ -1,32 +1,32 @@
1
- # frozen_string_literal: true
2
-
3
- require 'open3'
4
-
5
- module Solargraph
6
- module LanguageServer
7
- module Message
8
- module Extended
9
- # Update YARD documentation for installed gems. If the `rebuild`
10
- # parameter is true, rebuild existing yardocs.
11
- #
12
- class DocumentGems < Base
13
- def process
14
- cmd = [host.command_path, 'gems']
15
- cmd.push '--rebuild' if params['rebuild']
16
- o, s = Open3.capture2(*cmd)
17
- if s != 0
18
- host.show_message "An error occurred while building gem documentation.", LanguageServer::MessageTypes::ERROR
19
- set_result({
20
- status: 'err'
21
- })
22
- else
23
- set_result({
24
- status: 'ok'
25
- })
26
- end
27
- end
28
- end
29
- end
30
- end
31
- end
32
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'open3'
4
+
5
+ module Solargraph
6
+ module LanguageServer
7
+ module Message
8
+ module Extended
9
+ # Update YARD documentation for installed gems. If the `rebuild`
10
+ # parameter is true, rebuild existing yardocs.
11
+ #
12
+ class DocumentGems < Base
13
+ def process
14
+ cmd = [host.command_path, 'gems']
15
+ cmd.push '--rebuild' if params['rebuild']
16
+ o, s = Open3.capture2(*cmd)
17
+ if s != 0
18
+ host.show_message "An error occurred while building gem documentation.", LanguageServer::MessageTypes::ERROR
19
+ set_result({
20
+ status: 'err'
21
+ })
22
+ else
23
+ set_result({
24
+ status: 'ok'
25
+ })
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,19 +1,19 @@
1
- # frozen_string_literal: true
2
-
3
- require 'open3'
4
-
5
- module Solargraph
6
- module LanguageServer
7
- module Message
8
- module Extended
9
- # Update core Ruby documentation.
10
- #
11
- class DownloadCore < Base
12
- def process
13
- host.show_message "Downloading cores is deprecated. Solargraph currently uses RBS for core and stdlib documentation", LanguageServer::MessageTypes::INFO
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'open3'
4
+
5
+ module Solargraph
6
+ module LanguageServer
7
+ module Message
8
+ module Extended
9
+ # Update core Ruby documentation.
10
+ #
11
+ class DownloadCore < Base
12
+ def process
13
+ host.show_message "Downloading cores is deprecated. Solargraph currently uses RBS for core and stdlib documentation", LanguageServer::MessageTypes::INFO
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,20 +1,20 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- module Message
6
- module Extended
7
- class Search < Base
8
- def process
9
- results = host.search(params['query'])
10
- page = Solargraph::Page.new(host.options['viewsPath'])
11
- content = page.render('search', layout: true, locals: {query: params['query'], results: results})
12
- set_result(
13
- content: content
14
- )
15
- end
16
- end
17
- end
18
- end
19
- end
20
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ module Extended
7
+ class Search < Base
8
+ def process
9
+ results = host.search(params['query'])
10
+ page = Solargraph::Page.new(host.options['viewsPath'])
11
+ content = page.render('search', layout: true, locals: {query: params['query'], results: results})
12
+ set_result(
13
+ content: content
14
+ )
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -1,191 +1,191 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- module Message
6
- class Initialize < Base
7
- def process
8
- host.configure params['initializationOptions']
9
- host.client_capabilities = params['capabilities']
10
- if support_workspace_folders?
11
- host.prepare_folders params['workspaceFolders']
12
- elsif params['rootUri']
13
- host.prepare UriHelpers.uri_to_file(params['rootUri'])
14
- else
15
- host.prepare params['rootPath']
16
- end
17
- result = {
18
- capabilities: {
19
- textDocumentSync: 2, # @todo What should this be?
20
- workspace: {
21
- workspaceFolders: {
22
- supported: true,
23
- changeNotifications: true
24
- }
25
- }
26
- }
27
- }
28
- # FIXME: lsp default is utf-16, may have different position
29
- result[:capabilities][:positionEncoding] = "utf-32" if params.dig("capabilities", "general", "positionEncodings")&.include?("utf-32")
30
- result[:capabilities].merge! static_completion unless dynamic_registration_for?('textDocument', 'completion')
31
- result[:capabilities].merge! static_signature_help unless dynamic_registration_for?('textDocument', 'signatureHelp')
32
- # result[:capabilities].merge! static_on_type_formatting unless dynamic_registration_for?('textDocument', 'onTypeFormatting')
33
- result[:capabilities].merge! static_hover unless dynamic_registration_for?('textDocument', 'hover')
34
- result[:capabilities].merge! static_document_formatting unless dynamic_registration_for?('textDocument', 'formatting')
35
- result[:capabilities].merge! static_document_symbols unless dynamic_registration_for?('textDocument', 'documentSymbol')
36
- result[:capabilities].merge! static_definitions unless dynamic_registration_for?('textDocument', 'definition')
37
- result[:capabilities].merge! static_type_definitions unless dynamic_registration_for?('textDocument', 'typeDefinition')
38
- result[:capabilities].merge! static_rename unless dynamic_registration_for?('textDocument', 'rename')
39
- result[:capabilities].merge! static_references unless dynamic_registration_for?('textDocument', 'references')
40
- result[:capabilities].merge! static_workspace_symbols unless dynamic_registration_for?('workspace', 'symbol')
41
- result[:capabilities].merge! static_folding_range unless dynamic_registration_for?('textDocument', 'foldingRange')
42
- result[:capabilities].merge! static_highlights unless dynamic_registration_for?('textDocument', 'documentHighlight')
43
- # @todo Temporarily disabled
44
- # result[:capabilities].merge! static_code_action unless dynamic_registration_for?('textDocument', 'codeAction')
45
- set_result result
46
- end
47
-
48
- private
49
-
50
- # @todo '?' methods should type like RBS 'boolish' rather than a strict true or false
51
- # @sg-ignore
52
- def support_workspace_folders?
53
- params['capabilities'] &&
54
- params['capabilities']['workspace'] &&
55
- params['capabilities']['workspace']['workspaceFolders'] &&
56
- params['workspaceFolders']
57
- end
58
-
59
- # @return [Hash{Symbol => undefined}]
60
- def static_completion
61
- return {} unless host.options['completion']
62
- {
63
- completionProvider: {
64
- resolveProvider: true,
65
- triggerCharacters: ['.', ':', '@']
66
- }
67
- }
68
- end
69
-
70
- # @return [Hash{Symbol => BasicObject}]
71
- def static_code_action
72
- {
73
- codeActionProvider: true,
74
- codeActionKinds: ["quickfix"]
75
- }
76
- end
77
-
78
- # @return [Hash{Symbol => BasicObject}]
79
- def static_signature_help
80
- {
81
- signatureHelpProvider: {
82
- triggerCharacters: ['(', ',']
83
- }
84
- }
85
- end
86
-
87
- # @return [Hash{Symbol => Hash{Symbol => String, Array<String>}}]
88
- def static_on_type_formatting
89
- {
90
- documentOnTypeFormattingProvider: {
91
- firstTriggerCharacter: '{',
92
- moreTriggerCharacter: ['(']
93
- }
94
- }
95
- end
96
-
97
- # @return [Hash{Symbol => Boolean}]
98
- def static_hover
99
- return {} unless host.options['hover']
100
- {
101
- hoverProvider: true
102
- }
103
- end
104
-
105
- # @return [Hash{Symbol => Boolean}]
106
- def static_document_formatting
107
- return {} unless host.options['formatting']
108
- {
109
- documentFormattingProvider: true
110
- }
111
- end
112
-
113
- # @return [Hash{Symbol => Boolean}]
114
- def static_document_symbols
115
- return {} unless host.options['symbols']
116
- {
117
- documentSymbolProvider: true
118
- }
119
- end
120
-
121
- # @return [Hash{Symbol => Boolean}]
122
- def static_workspace_symbols
123
- {
124
- workspaceSymbolProvider: true
125
- }
126
- end
127
-
128
- # @return [Hash{Symbol => Boolean}]
129
- def static_definitions
130
- return {} unless host.options['definitions']
131
- {
132
- definitionProvider: true
133
- }
134
- end
135
-
136
- # @return [Hash{Symbol => Boolean}]
137
- def static_type_definitions
138
- return {} unless host.options['typeDefinitions']
139
- {
140
- typeDefinitionProvider: true
141
- }
142
- end
143
-
144
- # @return [Hash{Symbol => Hash{Symbol => Boolean}}]
145
- def static_rename
146
- {
147
- renameProvider: {prepareProvider: true}
148
- }
149
- end
150
-
151
-
152
- # @return [Hash{Symbol => Boolean}]
153
- def static_references
154
- return {} unless host.options['references']
155
- {
156
- referencesProvider: true
157
- }
158
- end
159
-
160
- # @return [Hash{Symbol => Boolean}]
161
- def static_folding_range
162
- return {} unless host.options['folding']
163
- {
164
- foldingRangeProvider: true
165
- }
166
- end
167
-
168
- # @return [Hash{Symbol => Boolean}]
169
- def static_highlights
170
- {
171
- documentHighlightProvider: true
172
- }
173
- end
174
-
175
- # @param section [String]
176
- # @param capability [String]
177
- # @todo Need support for RBS' boolish "type", which doesn't
178
- # enforce strict true/false-ness
179
- # @sg-ignore
180
- def dynamic_registration_for? section, capability
181
- result = (params['capabilities'] &&
182
- params['capabilities'][section] &&
183
- params['capabilities'][section][capability] &&
184
- params['capabilities'][section][capability]['dynamicRegistration'])
185
- host.allow_registration("#{section}/#{capability}") if result
186
- result
187
- end
188
- end
189
- end
190
- end
191
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ module Message
6
+ class Initialize < Base
7
+ def process
8
+ host.configure params['initializationOptions']
9
+ host.client_capabilities = params['capabilities']
10
+ if support_workspace_folders?
11
+ host.prepare_folders params['workspaceFolders']
12
+ elsif params['rootUri']
13
+ host.prepare UriHelpers.uri_to_file(params['rootUri'])
14
+ else
15
+ host.prepare params['rootPath']
16
+ end
17
+ result = {
18
+ capabilities: {
19
+ textDocumentSync: 2, # @todo What should this be?
20
+ workspace: {
21
+ workspaceFolders: {
22
+ supported: true,
23
+ changeNotifications: true
24
+ }
25
+ }
26
+ }
27
+ }
28
+ # FIXME: lsp default is utf-16, may have different position
29
+ result[:capabilities][:positionEncoding] = "utf-32" if params.dig("capabilities", "general", "positionEncodings")&.include?("utf-32")
30
+ result[:capabilities].merge! static_completion unless dynamic_registration_for?('textDocument', 'completion')
31
+ result[:capabilities].merge! static_signature_help unless dynamic_registration_for?('textDocument', 'signatureHelp')
32
+ # result[:capabilities].merge! static_on_type_formatting unless dynamic_registration_for?('textDocument', 'onTypeFormatting')
33
+ result[:capabilities].merge! static_hover unless dynamic_registration_for?('textDocument', 'hover')
34
+ result[:capabilities].merge! static_document_formatting unless dynamic_registration_for?('textDocument', 'formatting')
35
+ result[:capabilities].merge! static_document_symbols unless dynamic_registration_for?('textDocument', 'documentSymbol')
36
+ result[:capabilities].merge! static_definitions unless dynamic_registration_for?('textDocument', 'definition')
37
+ result[:capabilities].merge! static_type_definitions unless dynamic_registration_for?('textDocument', 'typeDefinition')
38
+ result[:capabilities].merge! static_rename unless dynamic_registration_for?('textDocument', 'rename')
39
+ result[:capabilities].merge! static_references unless dynamic_registration_for?('textDocument', 'references')
40
+ result[:capabilities].merge! static_workspace_symbols unless dynamic_registration_for?('workspace', 'symbol')
41
+ result[:capabilities].merge! static_folding_range unless dynamic_registration_for?('textDocument', 'foldingRange')
42
+ result[:capabilities].merge! static_highlights unless dynamic_registration_for?('textDocument', 'documentHighlight')
43
+ # @todo Temporarily disabled
44
+ # result[:capabilities].merge! static_code_action unless dynamic_registration_for?('textDocument', 'codeAction')
45
+ set_result result
46
+ end
47
+
48
+ private
49
+
50
+ # @todo '?' methods should type like RBS 'boolish' rather than a strict true or false
51
+ # @sg-ignore
52
+ def support_workspace_folders?
53
+ params['capabilities'] &&
54
+ params['capabilities']['workspace'] &&
55
+ params['capabilities']['workspace']['workspaceFolders'] &&
56
+ params['workspaceFolders']
57
+ end
58
+
59
+ # @return [Hash{Symbol => undefined}]
60
+ def static_completion
61
+ return {} unless host.options['completion']
62
+ {
63
+ completionProvider: {
64
+ resolveProvider: true,
65
+ triggerCharacters: ['.', ':', '@']
66
+ }
67
+ }
68
+ end
69
+
70
+ # @return [Hash{Symbol => BasicObject}]
71
+ def static_code_action
72
+ {
73
+ codeActionProvider: true,
74
+ codeActionKinds: ["quickfix"]
75
+ }
76
+ end
77
+
78
+ # @return [Hash{Symbol => BasicObject}]
79
+ def static_signature_help
80
+ {
81
+ signatureHelpProvider: {
82
+ triggerCharacters: ['(', ',']
83
+ }
84
+ }
85
+ end
86
+
87
+ # @return [Hash{Symbol => Hash{Symbol => String, Array<String>}}]
88
+ def static_on_type_formatting
89
+ {
90
+ documentOnTypeFormattingProvider: {
91
+ firstTriggerCharacter: '{',
92
+ moreTriggerCharacter: ['(']
93
+ }
94
+ }
95
+ end
96
+
97
+ # @return [Hash{Symbol => Boolean}]
98
+ def static_hover
99
+ return {} unless host.options['hover']
100
+ {
101
+ hoverProvider: true
102
+ }
103
+ end
104
+
105
+ # @return [Hash{Symbol => Boolean}]
106
+ def static_document_formatting
107
+ return {} unless host.options['formatting']
108
+ {
109
+ documentFormattingProvider: true
110
+ }
111
+ end
112
+
113
+ # @return [Hash{Symbol => Boolean}]
114
+ def static_document_symbols
115
+ return {} unless host.options['symbols']
116
+ {
117
+ documentSymbolProvider: true
118
+ }
119
+ end
120
+
121
+ # @return [Hash{Symbol => Boolean}]
122
+ def static_workspace_symbols
123
+ {
124
+ workspaceSymbolProvider: true
125
+ }
126
+ end
127
+
128
+ # @return [Hash{Symbol => Boolean}]
129
+ def static_definitions
130
+ return {} unless host.options['definitions']
131
+ {
132
+ definitionProvider: true
133
+ }
134
+ end
135
+
136
+ # @return [Hash{Symbol => Boolean}]
137
+ def static_type_definitions
138
+ return {} unless host.options['typeDefinitions']
139
+ {
140
+ typeDefinitionProvider: true
141
+ }
142
+ end
143
+
144
+ # @return [Hash{Symbol => Hash{Symbol => Boolean}}]
145
+ def static_rename
146
+ {
147
+ renameProvider: {prepareProvider: true}
148
+ }
149
+ end
150
+
151
+
152
+ # @return [Hash{Symbol => Boolean}]
153
+ def static_references
154
+ return {} unless host.options['references']
155
+ {
156
+ referencesProvider: true
157
+ }
158
+ end
159
+
160
+ # @return [Hash{Symbol => Boolean}]
161
+ def static_folding_range
162
+ return {} unless host.options['folding']
163
+ {
164
+ foldingRangeProvider: true
165
+ }
166
+ end
167
+
168
+ # @return [Hash{Symbol => Boolean}]
169
+ def static_highlights
170
+ {
171
+ documentHighlightProvider: true
172
+ }
173
+ end
174
+
175
+ # @param section [String]
176
+ # @param capability [String]
177
+ # @todo Need support for RBS' boolish "type", which doesn't
178
+ # enforce strict true/false-ness
179
+ # @sg-ignore
180
+ def dynamic_registration_for? section, capability
181
+ result = (params['capabilities'] &&
182
+ params['capabilities'][section] &&
183
+ params['capabilities'][section][capability] &&
184
+ params['capabilities'][section][capability]['dynamicRegistration'])
185
+ host.allow_registration("#{section}/#{capability}") if result
186
+ result
187
+ end
188
+ end
189
+ end
190
+ end
191
+ end
@@ -15,6 +15,7 @@ module Solargraph
15
15
  items = []
16
16
  last_context = nil
17
17
  idx = -1
18
+ # @sg-ignore Need to add nil check here
18
19
  completion.pins.each do |pin|
19
20
  idx += 1 if last_context != pin.context
20
21
  items.push pin.completion_item.merge({
@@ -37,6 +38,7 @@ module Solargraph
37
38
  end
38
39
  rescue FileNotFoundError => e
39
40
  Logging.logger.warn "[#{e.class}] #{e.message}"
41
+ # @sg-ignore Need to add nil check here
40
42
  Logging.logger.warn e.backtrace.join("\n")
41
43
  set_result empty_result
42
44
  end
@@ -13,7 +13,9 @@ module Solargraph::LanguageServer::Message::TextDocument
13
13
  # @return [Array<Hash>, nil]
14
14
  def code_location
15
15
  suggestions = host.definitions_at(params['textDocument']['uri'], @line, @column)
16
+ # @sg-ignore Need to add nil check here
16
17
  return nil if suggestions.empty?
18
+ # @sg-ignore Need to add nil check here
17
19
  suggestions.reject { |pin| pin.best_location.nil? || pin.best_location.filename.nil? }.map do |pin|
18
20
  {
19
21
  uri: file_to_uri(pin.best_location.filename),
@@ -1,16 +1,16 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph::LanguageServer::Message::TextDocument
4
- class DocumentHighlight < Base
5
- def process
6
- locs = host.references_from(params['textDocument']['uri'], params['position']['line'], params['position']['character'], strip: true, only: true)
7
- result = locs.map do |loc|
8
- {
9
- range: loc.range.to_hash,
10
- kind: 1
11
- }
12
- end
13
- set_result result
14
- end
15
- end
16
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph::LanguageServer::Message::TextDocument
4
+ class DocumentHighlight < Base
5
+ def process
6
+ locs = host.references_from(params['textDocument']['uri'], params['position']['line'], params['position']['character'], strip: true, only: true)
7
+ result = locs.map do |loc|
8
+ {
9
+ range: loc.range.to_hash,
10
+ kind: 1
11
+ }
12
+ end
13
+ set_result result
14
+ end
15
+ end
16
+ end
@@ -13,7 +13,9 @@ class Solargraph::LanguageServer::Message::TextDocument::DocumentSymbol < Solarg
13
13
  containerName: pin.namespace,
14
14
  kind: pin.symbol_kind,
15
15
  location: {
16
+ # @sg-ignore Need to add nil check here
16
17
  uri: file_to_uri(pin.best_location.filename),
18
+ # @sg-ignore Need to add nil check here
17
19
  range: pin.best_location.range.to_hash
18
20
  },
19
21
  deprecated: pin.deprecated?
@@ -98,9 +98,11 @@ module Solargraph
98
98
  end
99
99
 
100
100
  # @param value [Array, String]
101
+ #
101
102
  # @return [String, nil]
102
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,6 +11,7 @@ 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
@@ -31,6 +32,7 @@ module Solargraph
31
32
  )
32
33
  rescue FileNotFoundError => e
33
34
  Logging.logger.warn "[#{e.class}] #{e.message}"
35
+ # @sg-ignore Need to add nil check here
34
36
  Logging.logger.warn e.backtrace.join("\n")
35
37
  set_result nil
36
38
  end
@@ -1,11 +1,11 @@
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::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