solargraph 0.58.3 → 0.59.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 (229) hide show
  1. checksums.yaml +4 -4
  2. data/.envrc +3 -0
  3. data/.github/workflows/linting.yml +12 -5
  4. data/.github/workflows/plugins.yml +54 -34
  5. data/.github/workflows/rspec.yml +15 -28
  6. data/.github/workflows/typecheck.yml +6 -3
  7. data/.rubocop.yml +38 -6
  8. data/.rubocop_todo.yml +53 -966
  9. data/CHANGELOG.md +24 -0
  10. data/Gemfile +3 -1
  11. data/README.md +3 -3
  12. data/Rakefile +26 -23
  13. data/bin/solargraph +2 -1
  14. data/lib/solargraph/api_map/cache.rb +3 -3
  15. data/lib/solargraph/api_map/constants.rb +12 -3
  16. data/lib/solargraph/api_map/index.rb +29 -18
  17. data/lib/solargraph/api_map/source_to_yard.rb +22 -9
  18. data/lib/solargraph/api_map/store.rb +40 -30
  19. data/lib/solargraph/api_map.rb +160 -78
  20. data/lib/solargraph/bench.rb +2 -3
  21. data/lib/solargraph/complex_type/conformance.rb +176 -0
  22. data/lib/solargraph/complex_type/type_methods.rb +31 -18
  23. data/lib/solargraph/complex_type/unique_type.rb +221 -63
  24. data/lib/solargraph/complex_type.rb +173 -59
  25. data/lib/solargraph/convention/active_support_concern.rb +111 -111
  26. data/lib/solargraph/convention/base.rb +50 -50
  27. data/lib/solargraph/convention/data_definition/data_assignment_node.rb +1 -1
  28. data/lib/solargraph/convention/data_definition/data_definition_node.rb +7 -5
  29. data/lib/solargraph/convention/data_definition.rb +5 -2
  30. data/lib/solargraph/convention/gemfile.rb +1 -1
  31. data/lib/solargraph/convention/gemspec.rb +1 -1
  32. data/lib/solargraph/convention/rakefile.rb +1 -1
  33. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +2 -1
  34. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +4 -3
  35. data/lib/solargraph/convention/struct_definition.rb +8 -4
  36. data/lib/solargraph/convention.rb +2 -2
  37. data/lib/solargraph/converters/dd.rb +2 -0
  38. data/lib/solargraph/converters/dl.rb +2 -0
  39. data/lib/solargraph/converters/dt.rb +2 -0
  40. data/lib/solargraph/converters/misc.rb +2 -0
  41. data/lib/solargraph/diagnostics/require_not_found.rb +1 -0
  42. data/lib/solargraph/diagnostics/rubocop.rb +11 -10
  43. data/lib/solargraph/diagnostics/rubocop_helpers.rb +5 -3
  44. data/lib/solargraph/diagnostics/type_check.rb +11 -10
  45. data/lib/solargraph/diagnostics/update_errors.rb +4 -8
  46. data/lib/solargraph/diagnostics.rb +55 -55
  47. data/lib/solargraph/doc_map.rb +38 -39
  48. data/lib/solargraph/environ.rb +52 -52
  49. data/lib/solargraph/equality.rb +4 -4
  50. data/lib/solargraph/gem_pins.rb +4 -15
  51. data/lib/solargraph/language_server/error_codes.rb +10 -10
  52. data/lib/solargraph/language_server/host/diagnoser.rb +1 -1
  53. data/lib/solargraph/language_server/host/dispatch.rb +3 -3
  54. data/lib/solargraph/language_server/host/message_worker.rb +4 -3
  55. data/lib/solargraph/language_server/host/sources.rb +2 -1
  56. data/lib/solargraph/language_server/host.rb +35 -28
  57. data/lib/solargraph/language_server/message/base.rb +1 -1
  58. data/lib/solargraph/language_server/message/client/register_capability.rb +1 -3
  59. data/lib/solargraph/language_server/message/completion_item/resolve.rb +6 -8
  60. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +12 -18
  61. data/lib/solargraph/language_server/message/extended/document.rb +1 -0
  62. data/lib/solargraph/language_server/message/extended/document_gems.rb +7 -7
  63. data/lib/solargraph/language_server/message/extended/download_core.rb +2 -1
  64. data/lib/solargraph/language_server/message/extended/environment.rb +25 -25
  65. data/lib/solargraph/language_server/message/extended/search.rb +1 -1
  66. data/lib/solargraph/language_server/message/initialize.rb +20 -14
  67. data/lib/solargraph/language_server/message/initialized.rb +28 -28
  68. data/lib/solargraph/language_server/message/text_document/completion.rb +10 -8
  69. data/lib/solargraph/language_server/message/text_document/definition.rb +41 -32
  70. data/lib/solargraph/language_server/message/text_document/document_highlight.rb +17 -10
  71. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +29 -19
  72. data/lib/solargraph/language_server/message/text_document/formatting.rb +8 -6
  73. data/lib/solargraph/language_server/message/text_document/hover.rb +5 -5
  74. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +13 -6
  75. data/lib/solargraph/language_server/message/text_document/references.rb +17 -10
  76. data/lib/solargraph/language_server/message/text_document/rename.rb +20 -13
  77. data/lib/solargraph/language_server/message/text_document/signature_help.rb +3 -2
  78. data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -17
  79. data/lib/solargraph/language_server/message/text_document.rb +28 -28
  80. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +34 -28
  81. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +38 -30
  82. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +23 -17
  83. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +27 -17
  84. data/lib/solargraph/language_server/message.rb +1 -1
  85. data/lib/solargraph/language_server/progress.rb +143 -143
  86. data/lib/solargraph/language_server/request.rb +4 -2
  87. data/lib/solargraph/language_server/transport/adapter.rb +68 -68
  88. data/lib/solargraph/language_server/transport/data_reader.rb +11 -13
  89. data/lib/solargraph/language_server/uri_helpers.rb +2 -2
  90. data/lib/solargraph/language_server.rb +20 -20
  91. data/lib/solargraph/library.rb +57 -38
  92. data/lib/solargraph/location.rb +17 -14
  93. data/lib/solargraph/logging.rb +22 -4
  94. data/lib/solargraph/page.rb +1 -1
  95. data/lib/solargraph/parser/comment_ripper.rb +19 -4
  96. data/lib/solargraph/parser/flow_sensitive_typing.rb +324 -108
  97. data/lib/solargraph/parser/node_processor/base.rb +34 -4
  98. data/lib/solargraph/parser/node_processor.rb +8 -7
  99. data/lib/solargraph/parser/parser_gem/class_methods.rb +30 -14
  100. data/lib/solargraph/parser/parser_gem/flawed_builder.rb +1 -1
  101. data/lib/solargraph/parser/parser_gem/node_chainer.rb +51 -25
  102. data/lib/solargraph/parser/parser_gem/node_methods.rb +181 -73
  103. data/lib/solargraph/parser/parser_gem/node_processors/alias_node.rb +24 -24
  104. data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +4 -4
  105. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +13 -11
  106. data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +9 -0
  107. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +11 -12
  108. data/lib/solargraph/parser/parser_gem/node_processors/casgn_node.rb +36 -36
  109. data/lib/solargraph/parser/parser_gem/node_processors/cvasgn_node.rb +24 -24
  110. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +10 -3
  111. data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +9 -8
  112. data/lib/solargraph/parser/parser_gem/node_processors/gvasgn_node.rb +24 -24
  113. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +36 -6
  114. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +5 -3
  115. data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +1 -0
  116. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +3 -1
  117. data/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb +40 -40
  118. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +3 -3
  119. data/lib/solargraph/parser/parser_gem/node_processors/or_node.rb +22 -0
  120. data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +1 -1
  121. data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +2 -1
  122. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +4 -5
  123. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +124 -113
  124. data/lib/solargraph/parser/parser_gem/node_processors/sym_node.rb +20 -20
  125. data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +1 -1
  126. data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +23 -0
  127. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +6 -2
  128. data/lib/solargraph/parser/parser_gem/node_processors.rb +4 -0
  129. data/lib/solargraph/parser/parser_gem.rb +2 -0
  130. data/lib/solargraph/parser/region.rb +9 -3
  131. data/lib/solargraph/parser/snippet.rb +3 -1
  132. data/lib/solargraph/parser.rb +2 -0
  133. data/lib/solargraph/pin/base.rb +126 -82
  134. data/lib/solargraph/pin/base_variable.rb +273 -24
  135. data/lib/solargraph/pin/block.rb +29 -6
  136. data/lib/solargraph/pin/breakable.rb +7 -1
  137. data/lib/solargraph/pin/callable.rb +65 -21
  138. data/lib/solargraph/pin/closure.rb +7 -10
  139. data/lib/solargraph/pin/common.rb +24 -6
  140. data/lib/solargraph/pin/compound_statement.rb +55 -0
  141. data/lib/solargraph/pin/constant.rb +3 -5
  142. data/lib/solargraph/pin/conversions.rb +10 -4
  143. data/lib/solargraph/pin/delegated_method.rb +19 -8
  144. data/lib/solargraph/pin/documenting.rb +4 -2
  145. data/lib/solargraph/pin/instance_variable.rb +5 -1
  146. data/lib/solargraph/pin/keyword.rb +0 -4
  147. data/lib/solargraph/pin/local_variable.rb +15 -59
  148. data/lib/solargraph/pin/method.rb +158 -104
  149. data/lib/solargraph/pin/method_alias.rb +8 -0
  150. data/lib/solargraph/pin/namespace.rb +19 -12
  151. data/lib/solargraph/pin/parameter.rb +102 -36
  152. data/lib/solargraph/pin/proxy_type.rb +4 -1
  153. data/lib/solargraph/pin/reference/override.rb +1 -1
  154. data/lib/solargraph/pin/reference/require.rb +14 -14
  155. data/lib/solargraph/pin/reference/superclass.rb +2 -0
  156. data/lib/solargraph/pin/reference/type_alias.rb +16 -0
  157. data/lib/solargraph/pin/reference.rb +20 -0
  158. data/lib/solargraph/pin/search.rb +8 -7
  159. data/lib/solargraph/pin/signature.rb +15 -12
  160. data/lib/solargraph/pin/singleton.rb +11 -11
  161. data/lib/solargraph/pin/symbol.rb +2 -1
  162. data/lib/solargraph/pin/until.rb +2 -4
  163. data/lib/solargraph/pin/while.rb +2 -4
  164. data/lib/solargraph/pin.rb +2 -0
  165. data/lib/solargraph/pin_cache.rb +22 -19
  166. data/lib/solargraph/position.rb +17 -10
  167. data/lib/solargraph/range.rb +16 -15
  168. data/lib/solargraph/rbs_map/conversions.rb +367 -231
  169. data/lib/solargraph/rbs_map/core_fills.rb +18 -11
  170. data/lib/solargraph/rbs_map/core_map.rb +24 -17
  171. data/lib/solargraph/rbs_map/stdlib_map.rb +33 -5
  172. data/lib/solargraph/rbs_map.rb +76 -32
  173. data/lib/solargraph/server_methods.rb +1 -1
  174. data/lib/solargraph/shell.rb +258 -66
  175. data/lib/solargraph/source/chain/array.rb +3 -12
  176. data/lib/solargraph/source/chain/block_symbol.rb +13 -13
  177. data/lib/solargraph/source/chain/block_variable.rb +13 -13
  178. data/lib/solargraph/source/chain/call.rb +96 -56
  179. data/lib/solargraph/source/chain/class_variable.rb +1 -1
  180. data/lib/solargraph/source/chain/constant.rb +5 -1
  181. data/lib/solargraph/source/chain/global_variable.rb +1 -1
  182. data/lib/solargraph/source/chain/hash.rb +8 -5
  183. data/lib/solargraph/source/chain/head.rb +19 -19
  184. data/lib/solargraph/source/chain/if.rb +12 -10
  185. data/lib/solargraph/source/chain/instance_variable.rb +24 -1
  186. data/lib/solargraph/source/chain/link.rb +12 -22
  187. data/lib/solargraph/source/chain/literal.rb +22 -15
  188. data/lib/solargraph/source/chain/or.rb +10 -4
  189. data/lib/solargraph/source/chain/q_call.rb +2 -0
  190. data/lib/solargraph/source/chain/variable.rb +3 -1
  191. data/lib/solargraph/source/chain/z_super.rb +1 -3
  192. data/lib/solargraph/source/chain.rb +51 -38
  193. data/lib/solargraph/source/change.rb +12 -5
  194. data/lib/solargraph/source/cursor.rb +33 -18
  195. data/lib/solargraph/source/encoding_fixes.rb +6 -7
  196. data/lib/solargraph/source/source_chainer.rb +56 -32
  197. data/lib/solargraph/source/updater.rb +5 -1
  198. data/lib/solargraph/source.rb +59 -35
  199. data/lib/solargraph/source_map/clip.rb +54 -30
  200. data/lib/solargraph/source_map/data.rb +4 -1
  201. data/lib/solargraph/source_map/mapper.rb +69 -42
  202. data/lib/solargraph/source_map.rb +21 -9
  203. data/lib/solargraph/type_checker/problem.rb +3 -1
  204. data/lib/solargraph/type_checker/rules.rb +81 -8
  205. data/lib/solargraph/type_checker.rb +196 -122
  206. data/lib/solargraph/version.rb +1 -1
  207. data/lib/solargraph/workspace/config.rb +14 -11
  208. data/lib/solargraph/workspace/gemspecs.rb +367 -0
  209. data/lib/solargraph/workspace/require_paths.rb +1 -0
  210. data/lib/solargraph/workspace.rb +50 -28
  211. data/lib/solargraph/yard_map/cache.rb +25 -25
  212. data/lib/solargraph/yard_map/helpers.rb +8 -3
  213. data/lib/solargraph/yard_map/mapper/to_constant.rb +28 -28
  214. data/lib/solargraph/yard_map/mapper/to_method.rb +13 -7
  215. data/lib/solargraph/yard_map/mapper/to_namespace.rb +2 -1
  216. data/lib/solargraph/yard_map/mapper.rb +13 -8
  217. data/lib/solargraph/yard_map.rb +17 -18
  218. data/lib/solargraph/yard_tags.rb +2 -2
  219. data/lib/solargraph/yardoc.rb +7 -4
  220. data/lib/solargraph.rb +33 -10
  221. data/rbs/fills/rubygems/0/dependency.rbs +193 -0
  222. data/rbs/shims/ast/0/node.rbs +1 -1
  223. data/rbs/shims/diff-lcs/1.5/diff-lcs.rbs +11 -0
  224. data/solargraph.gemspec +37 -35
  225. metadata +41 -42
  226. data/lib/solargraph/type_checker/checks.rb +0 -124
  227. data/lib/solargraph/type_checker/param_def.rb +0 -37
  228. data/lib/solargraph/yard_map/to_method.rb +0 -89
  229. data/rbs/fills/tuple/tuple.rbs +0 -149
@@ -1,5 +1,6 @@
1
1
  require 'yard-activesupport-concern'
2
2
  require 'fileutils'
3
+ require 'pathname' # @todo Required by RBS but not loaded in some use cases
3
4
  require 'rbs'
4
5
 
5
6
  module Solargraph
@@ -84,40 +85,40 @@ module Solargraph
84
85
 
85
86
  # @param gemspec [Gem::Specification]
86
87
  # @return [Array<Pin::Base>, nil]
87
- def deserialize_yard_gem(gemspec)
88
+ def deserialize_yard_gem gemspec
88
89
  load(yard_gem_path(gemspec))
89
90
  end
90
91
 
91
92
  # @param gemspec [Gem::Specification]
92
93
  # @param pins [Array<Pin::Base>]
93
94
  # @return [void]
94
- def serialize_yard_gem(gemspec, pins)
95
+ def serialize_yard_gem gemspec, pins
95
96
  save(yard_gem_path(gemspec), pins)
96
97
  end
97
98
 
98
99
  # @param gemspec [Gem::Specification]
99
100
  # @return [Boolean]
100
- def has_yard?(gemspec)
101
+ def has_yard? gemspec
101
102
  exist?(yard_gem_path(gemspec))
102
103
  end
103
104
 
104
105
  # @param gemspec [Gem::Specification]
105
106
  # @param hash [String, nil]
106
107
  # @return [String]
107
- def rbs_collection_path(gemspec, hash)
108
+ def rbs_collection_path gemspec, hash
108
109
  File.join(work_dir, 'rbs', "#{gemspec.name}-#{gemspec.version}-#{hash || 0}.ser")
109
110
  end
110
111
 
111
112
  # @param gemspec [Gem::Specification]
112
113
  # @return [String]
113
- def rbs_collection_path_prefix(gemspec)
114
+ def rbs_collection_path_prefix gemspec
114
115
  File.join(work_dir, 'rbs', "#{gemspec.name}-#{gemspec.version}-")
115
116
  end
116
117
 
117
118
  # @param gemspec [Gem::Specification]
118
119
  # @param hash [String, nil]
119
120
  # @return [Array<Pin::Base>, nil]
120
- def deserialize_rbs_collection_gem(gemspec, hash)
121
+ def deserialize_rbs_collection_gem gemspec, hash
121
122
  load(rbs_collection_path(gemspec, hash))
122
123
  end
123
124
 
@@ -125,20 +126,20 @@ module Solargraph
125
126
  # @param hash [String, nil]
126
127
  # @param pins [Array<Pin::Base>]n
127
128
  # @return [void]
128
- def serialize_rbs_collection_gem(gemspec, hash, pins)
129
+ def serialize_rbs_collection_gem gemspec, hash, pins
129
130
  save(rbs_collection_path(gemspec, hash), pins)
130
131
  end
131
132
 
132
133
  # @param gemspec [Gem::Specification]
133
134
  # @param hash [String, nil]
134
135
  # @return [String]
135
- def combined_path(gemspec, hash)
136
+ def combined_path gemspec, hash
136
137
  File.join(work_dir, 'combined', "#{gemspec.name}-#{gemspec.version}-#{hash || 0}.ser")
137
138
  end
138
139
 
139
140
  # @param gemspec [Gem::Specification]
140
141
  # @return [String]
141
- def combined_path_prefix(gemspec)
142
+ def combined_path_prefix gemspec
142
143
  File.join(work_dir, 'combined', "#{gemspec.name}-#{gemspec.version}-")
143
144
  end
144
145
 
@@ -146,7 +147,7 @@ module Solargraph
146
147
  # @param hash [String, nil]
147
148
  # @param pins [Array<Pin::Base>]
148
149
  # @return [void]
149
- def serialize_combined_gem(gemspec, hash, pins)
150
+ def serialize_combined_gem gemspec, hash, pins
150
151
  save(combined_path(gemspec, hash), pins)
151
152
  end
152
153
 
@@ -160,7 +161,7 @@ module Solargraph
160
161
  # @param gemspec [Gem::Specification]
161
162
  # @param hash [String, nil]
162
163
  # @return [Boolean]
163
- def has_rbs_collection?(gemspec, hash)
164
+ def has_rbs_collection? gemspec, hash
164
165
  exist?(rbs_collection_path(gemspec, hash))
165
166
  end
166
167
 
@@ -175,9 +176,9 @@ module Solargraph
175
176
  end
176
177
 
177
178
  # @param gemspec [Gem::Specification]
178
- # @param out [IO, nil]
179
+ # @param out [IO, StringIO, nil]
179
180
  # @return [void]
180
- def uncache_gem(gemspec, out: nil)
181
+ def uncache_gem gemspec, out: nil
181
182
  uncache(yardoc_path(gemspec), out: out)
182
183
  uncache_by_prefix(rbs_collection_path_prefix(gemspec), out: out)
183
184
  uncache(yard_gem_path(gemspec), out: out)
@@ -192,6 +193,7 @@ module Solargraph
192
193
  private
193
194
 
194
195
  # @param file [String]
196
+ # @sg-ignore Marshal.load returns Object; we know it's Array<Pin::Base>
195
197
  # @return [Array<Solargraph::Pin::Base>, nil]
196
198
  def load file
197
199
  return nil unless File.file?(file)
@@ -220,24 +222,25 @@ module Solargraph
220
222
 
221
223
  # @param path_segments [Array<String>]
222
224
  # @return [void]
225
+ # @param [Object, nil] out
223
226
  def uncache *path_segments, out: nil
224
227
  path = File.join(*path_segments)
225
- if File.exist?(path)
226
- FileUtils.rm_rf path, secure: true
227
- out.puts "Clearing pin cache in #{path}" unless out.nil?
228
- end
228
+ return unless File.exist?(path)
229
+ FileUtils.rm_rf path, secure: true
230
+ out&.puts "Clearing pin cache in #{path}"
229
231
  end
230
232
 
231
233
  # @return [void]
232
234
  # @param path_segments [Array<String>]
235
+ # @param [Object, nil] out
233
236
  def uncache_by_prefix *path_segments, out: nil
234
237
  path = File.join(*path_segments)
235
238
  glob = "#{path}*"
236
- out.puts "Clearing pin cache in #{glob}" unless out.nil?
239
+ out&.puts "Clearing pin cache in #{glob}"
237
240
  Dir.glob(glob).each do |file|
238
241
  next unless File.file?(file)
239
242
  FileUtils.rm_rf file, secure: true
240
- out.puts "Clearing pin cache in #{file}" unless out.nil?
243
+ out&.puts "Clearing pin cache in #{file}"
241
244
  end
242
245
  end
243
246
  end
@@ -21,13 +21,8 @@ module Solargraph
21
21
  @character = character
22
22
  end
23
23
 
24
- # @sg-ignore Fix "Not enough arguments to Module#protected"
25
- protected def equality_fields
26
- [line, character]
27
- end
28
-
29
24
  # @param other [Position]
30
- def <=>(other)
25
+ def <=> other
31
26
  return nil unless other.is_a?(Position)
32
27
  if line == other.line
33
28
  character <=> other.character
@@ -63,15 +58,18 @@ module Solargraph
63
58
  line = -1
64
59
  last_line_index = 0
65
60
 
61
+ # @sg-ignore Typechecker thinks `newline_index` inside of the assignment
62
+ # can be nil
66
63
  while (newline_index = text.index("\n", newline_index + 1)) && line <= position.line
67
64
  line += 1
68
65
  break if line == position.line
69
66
 
70
- line_length = newline_index - last_line_index
71
67
  last_line_index = newline_index
72
68
  end
73
69
 
74
- last_line_index += 1 if position.line > 0
70
+ last_line_index += 1 if position.line.positive?
71
+ # @sg-ignore `last_line_index` is always an Integer because `newline_index`
72
+ # is never nil inside the while block
75
73
  last_line_index + position.character
76
74
  end
77
75
 
@@ -101,12 +99,16 @@ module Solargraph
101
99
  character = offset
102
100
  newline_index = -1
103
101
 
102
+ # @sg-ignore Typechecker thinks `newline_index` inside of the assignment
103
+ # can be nil
104
104
  while (newline_index = text.index("\n", newline_index + 1)) && newline_index < offset
105
105
  line += 1
106
+ # @sg-ignore `newline_index` is always an Integer inside the while block
106
107
  character = offset - newline_index - 1
107
108
  end
108
- character = 0 if character.nil? and (cursor - offset).between?(0, 1)
109
+ character = 0 if character.nil? && (cursor - offset).between?(0, 1)
109
110
  raise InvalidOffsetError if character.nil?
111
+ # @sg-ignore flow sensitive typing needs to handle 'raise if'
110
112
  Position.new(line, character)
111
113
  end
112
114
 
@@ -125,8 +127,13 @@ module Solargraph
125
127
 
126
128
  def == other
127
129
  return false unless other.is_a?(Position)
128
- # @sg-ignore https://github.com/castwide/solargraph/pull/1114
129
130
  line == other.line and character == other.character
130
131
  end
132
+
133
+ protected
134
+
135
+ def equality_fields
136
+ [line, character]
137
+ end
131
138
  end
132
139
  end
@@ -19,20 +19,12 @@ module Solargraph
19
19
  @ending = ending
20
20
  end
21
21
 
22
- # @sg-ignore Fix "Not enough arguments to Module#protected"
23
- protected def equality_fields
24
- [start, ending]
25
- end
26
-
27
22
  # @param other [BasicObject]
28
- def <=>(other)
23
+ def <=> other
29
24
  return nil unless other.is_a?(Range)
30
- # @sg-ignore https://github.com/castwide/solargraph/pull/1114
31
25
  if start == other.start
32
- # @sg-ignore https://github.com/castwide/solargraph/pull/1114
33
26
  ending <=> other.ending
34
27
  else
35
- # @sg-ignore https://github.com/castwide/solargraph/pull/1114
36
28
  start <=> other.start
37
29
  end
38
30
  end
@@ -40,7 +32,7 @@ module Solargraph
40
32
  # Get a hash of the range. This representation is suitable for use in
41
33
  # the language server protocol.
42
34
  #
43
- # @return [Hash<Symbol, Position>]
35
+ # @return [Hash{Symbol => Position}]
44
36
  def to_hash
45
37
  {
46
38
  start: start.to_hash,
@@ -54,8 +46,11 @@ module Solargraph
54
46
  # @return [Boolean]
55
47
  def contain? position
56
48
  position = Position.normalize(position)
49
+ # @sg-ignore flow sensitive typing should be able to handle redefinition
57
50
  return false if position.line < start.line || position.line > ending.line
51
+ # @sg-ignore flow sensitive typing should be able to handle redefinition
58
52
  return false if position.line == start.line && position.character < start.character
53
+ # @sg-ignore flow sensitive typing should be able to handle redefinition
59
54
  return false if position.line == ending.line && position.character > ending.character
60
55
  true
61
56
  end
@@ -63,9 +58,11 @@ module Solargraph
63
58
  # True if the range contains the specified position and the position does not precede it.
64
59
  #
65
60
  # @param position [Position, Array(Integer, Integer)]
61
+ # @sg-ignore flow sensitive typing should be able to handle redefinition
66
62
  # @return [Boolean]
67
63
  def include? position
68
64
  position = Position.normalize(position)
65
+ # @sg-ignore flow sensitive typing should be able to handle redefinition
69
66
  contain?(position) && !(position.line == start.line && position.character == start.character)
70
67
  end
71
68
 
@@ -82,12 +79,11 @@ module Solargraph
82
79
 
83
80
  # Get a range from a node.
84
81
  #
85
- # @param node [Parser::AST::Node]
82
+ # @param node [::Parser::AST::Node]
86
83
  # @return [Range, nil]
87
84
  def self.from_node node
88
- if node&.loc && node.loc.expression
89
- from_expr(node.loc.expression)
90
- end
85
+ return unless node&.loc&.expression
86
+ from_expr(node.loc.expression)
91
87
  end
92
88
 
93
89
  # Get a range from a Parser range, usually found in
@@ -101,12 +97,17 @@ module Solargraph
101
97
 
102
98
  def == other
103
99
  return false unless other.is_a?(Range)
104
- # @sg-ignore https://github.com/castwide/solargraph/pull/1114
105
100
  start == other.start && ending == other.ending
106
101
  end
107
102
 
108
103
  def inspect
109
104
  "#<#{self.class} #{start.inspect} to #{ending.inspect}>"
110
105
  end
106
+
107
+ protected
108
+
109
+ def equality_fields
110
+ [start, ending]
111
+ end
111
112
  end
112
113
  end