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.
- checksums.yaml +4 -4
- data/.envrc +3 -0
- data/.github/workflows/linting.yml +12 -5
- data/.github/workflows/plugins.yml +54 -34
- data/.github/workflows/rspec.yml +15 -28
- data/.github/workflows/typecheck.yml +6 -3
- data/.rubocop.yml +38 -6
- data/.rubocop_todo.yml +53 -966
- data/CHANGELOG.md +24 -0
- data/Gemfile +3 -1
- data/README.md +3 -3
- data/Rakefile +26 -23
- data/bin/solargraph +2 -1
- data/lib/solargraph/api_map/cache.rb +3 -3
- data/lib/solargraph/api_map/constants.rb +12 -3
- data/lib/solargraph/api_map/index.rb +29 -18
- data/lib/solargraph/api_map/source_to_yard.rb +22 -9
- data/lib/solargraph/api_map/store.rb +40 -30
- data/lib/solargraph/api_map.rb +160 -78
- data/lib/solargraph/bench.rb +2 -3
- data/lib/solargraph/complex_type/conformance.rb +176 -0
- data/lib/solargraph/complex_type/type_methods.rb +31 -18
- data/lib/solargraph/complex_type/unique_type.rb +221 -63
- data/lib/solargraph/complex_type.rb +173 -59
- data/lib/solargraph/convention/active_support_concern.rb +111 -111
- data/lib/solargraph/convention/base.rb +50 -50
- data/lib/solargraph/convention/data_definition/data_assignment_node.rb +1 -1
- data/lib/solargraph/convention/data_definition/data_definition_node.rb +7 -5
- data/lib/solargraph/convention/data_definition.rb +5 -2
- data/lib/solargraph/convention/gemfile.rb +1 -1
- data/lib/solargraph/convention/gemspec.rb +1 -1
- data/lib/solargraph/convention/rakefile.rb +1 -1
- data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +2 -1
- data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +4 -3
- data/lib/solargraph/convention/struct_definition.rb +8 -4
- data/lib/solargraph/convention.rb +2 -2
- data/lib/solargraph/converters/dd.rb +2 -0
- data/lib/solargraph/converters/dl.rb +2 -0
- data/lib/solargraph/converters/dt.rb +2 -0
- data/lib/solargraph/converters/misc.rb +2 -0
- data/lib/solargraph/diagnostics/require_not_found.rb +1 -0
- data/lib/solargraph/diagnostics/rubocop.rb +11 -10
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +5 -3
- data/lib/solargraph/diagnostics/type_check.rb +11 -10
- data/lib/solargraph/diagnostics/update_errors.rb +4 -8
- data/lib/solargraph/diagnostics.rb +55 -55
- data/lib/solargraph/doc_map.rb +38 -39
- data/lib/solargraph/environ.rb +52 -52
- data/lib/solargraph/equality.rb +4 -4
- data/lib/solargraph/gem_pins.rb +4 -15
- data/lib/solargraph/language_server/error_codes.rb +10 -10
- data/lib/solargraph/language_server/host/diagnoser.rb +1 -1
- data/lib/solargraph/language_server/host/dispatch.rb +3 -3
- data/lib/solargraph/language_server/host/message_worker.rb +4 -3
- data/lib/solargraph/language_server/host/sources.rb +2 -1
- data/lib/solargraph/language_server/host.rb +35 -28
- data/lib/solargraph/language_server/message/base.rb +1 -1
- data/lib/solargraph/language_server/message/client/register_capability.rb +1 -3
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +6 -8
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +12 -18
- data/lib/solargraph/language_server/message/extended/document.rb +1 -0
- data/lib/solargraph/language_server/message/extended/document_gems.rb +7 -7
- data/lib/solargraph/language_server/message/extended/download_core.rb +2 -1
- data/lib/solargraph/language_server/message/extended/environment.rb +25 -25
- data/lib/solargraph/language_server/message/extended/search.rb +1 -1
- data/lib/solargraph/language_server/message/initialize.rb +20 -14
- data/lib/solargraph/language_server/message/initialized.rb +28 -28
- data/lib/solargraph/language_server/message/text_document/completion.rb +10 -8
- data/lib/solargraph/language_server/message/text_document/definition.rb +41 -32
- data/lib/solargraph/language_server/message/text_document/document_highlight.rb +17 -10
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +29 -19
- data/lib/solargraph/language_server/message/text_document/formatting.rb +8 -6
- data/lib/solargraph/language_server/message/text_document/hover.rb +5 -5
- data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +13 -6
- data/lib/solargraph/language_server/message/text_document/references.rb +17 -10
- data/lib/solargraph/language_server/message/text_document/rename.rb +20 -13
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +3 -2
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -17
- data/lib/solargraph/language_server/message/text_document.rb +28 -28
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +34 -28
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +38 -30
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +23 -17
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +27 -17
- data/lib/solargraph/language_server/message.rb +1 -1
- data/lib/solargraph/language_server/progress.rb +143 -143
- data/lib/solargraph/language_server/request.rb +4 -2
- data/lib/solargraph/language_server/transport/adapter.rb +68 -68
- data/lib/solargraph/language_server/transport/data_reader.rb +11 -13
- data/lib/solargraph/language_server/uri_helpers.rb +2 -2
- data/lib/solargraph/language_server.rb +20 -20
- data/lib/solargraph/library.rb +57 -38
- data/lib/solargraph/location.rb +17 -14
- data/lib/solargraph/logging.rb +22 -4
- data/lib/solargraph/page.rb +1 -1
- data/lib/solargraph/parser/comment_ripper.rb +19 -4
- data/lib/solargraph/parser/flow_sensitive_typing.rb +324 -108
- data/lib/solargraph/parser/node_processor/base.rb +34 -4
- data/lib/solargraph/parser/node_processor.rb +8 -7
- data/lib/solargraph/parser/parser_gem/class_methods.rb +30 -14
- data/lib/solargraph/parser/parser_gem/flawed_builder.rb +1 -1
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +51 -25
- data/lib/solargraph/parser/parser_gem/node_methods.rb +181 -73
- data/lib/solargraph/parser/parser_gem/node_processors/alias_node.rb +24 -24
- data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +4 -4
- data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +13 -11
- data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +9 -0
- data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +11 -12
- data/lib/solargraph/parser/parser_gem/node_processors/casgn_node.rb +36 -36
- data/lib/solargraph/parser/parser_gem/node_processors/cvasgn_node.rb +24 -24
- data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +10 -3
- data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +9 -8
- data/lib/solargraph/parser/parser_gem/node_processors/gvasgn_node.rb +24 -24
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +36 -6
- data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +5 -3
- data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +1 -0
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +3 -1
- data/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb +40 -40
- data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +3 -3
- data/lib/solargraph/parser/parser_gem/node_processors/or_node.rb +22 -0
- data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +1 -1
- data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +4 -5
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +124 -113
- data/lib/solargraph/parser/parser_gem/node_processors/sym_node.rb +20 -20
- data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +1 -1
- data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +23 -0
- data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +6 -2
- data/lib/solargraph/parser/parser_gem/node_processors.rb +4 -0
- data/lib/solargraph/parser/parser_gem.rb +2 -0
- data/lib/solargraph/parser/region.rb +9 -3
- data/lib/solargraph/parser/snippet.rb +3 -1
- data/lib/solargraph/parser.rb +2 -0
- data/lib/solargraph/pin/base.rb +126 -82
- data/lib/solargraph/pin/base_variable.rb +273 -24
- data/lib/solargraph/pin/block.rb +29 -6
- data/lib/solargraph/pin/breakable.rb +7 -1
- data/lib/solargraph/pin/callable.rb +65 -21
- data/lib/solargraph/pin/closure.rb +7 -10
- data/lib/solargraph/pin/common.rb +24 -6
- data/lib/solargraph/pin/compound_statement.rb +55 -0
- data/lib/solargraph/pin/constant.rb +3 -5
- data/lib/solargraph/pin/conversions.rb +10 -4
- data/lib/solargraph/pin/delegated_method.rb +19 -8
- data/lib/solargraph/pin/documenting.rb +4 -2
- data/lib/solargraph/pin/instance_variable.rb +5 -1
- data/lib/solargraph/pin/keyword.rb +0 -4
- data/lib/solargraph/pin/local_variable.rb +15 -59
- data/lib/solargraph/pin/method.rb +158 -104
- data/lib/solargraph/pin/method_alias.rb +8 -0
- data/lib/solargraph/pin/namespace.rb +19 -12
- data/lib/solargraph/pin/parameter.rb +102 -36
- data/lib/solargraph/pin/proxy_type.rb +4 -1
- data/lib/solargraph/pin/reference/override.rb +1 -1
- data/lib/solargraph/pin/reference/require.rb +14 -14
- data/lib/solargraph/pin/reference/superclass.rb +2 -0
- data/lib/solargraph/pin/reference/type_alias.rb +16 -0
- data/lib/solargraph/pin/reference.rb +20 -0
- data/lib/solargraph/pin/search.rb +8 -7
- data/lib/solargraph/pin/signature.rb +15 -12
- data/lib/solargraph/pin/singleton.rb +11 -11
- data/lib/solargraph/pin/symbol.rb +2 -1
- data/lib/solargraph/pin/until.rb +2 -4
- data/lib/solargraph/pin/while.rb +2 -4
- data/lib/solargraph/pin.rb +2 -0
- data/lib/solargraph/pin_cache.rb +22 -19
- data/lib/solargraph/position.rb +17 -10
- data/lib/solargraph/range.rb +16 -15
- data/lib/solargraph/rbs_map/conversions.rb +367 -231
- data/lib/solargraph/rbs_map/core_fills.rb +18 -11
- data/lib/solargraph/rbs_map/core_map.rb +24 -17
- data/lib/solargraph/rbs_map/stdlib_map.rb +33 -5
- data/lib/solargraph/rbs_map.rb +76 -32
- data/lib/solargraph/server_methods.rb +1 -1
- data/lib/solargraph/shell.rb +258 -66
- data/lib/solargraph/source/chain/array.rb +3 -12
- data/lib/solargraph/source/chain/block_symbol.rb +13 -13
- data/lib/solargraph/source/chain/block_variable.rb +13 -13
- data/lib/solargraph/source/chain/call.rb +96 -56
- data/lib/solargraph/source/chain/class_variable.rb +1 -1
- data/lib/solargraph/source/chain/constant.rb +5 -1
- data/lib/solargraph/source/chain/global_variable.rb +1 -1
- data/lib/solargraph/source/chain/hash.rb +8 -5
- data/lib/solargraph/source/chain/head.rb +19 -19
- data/lib/solargraph/source/chain/if.rb +12 -10
- data/lib/solargraph/source/chain/instance_variable.rb +24 -1
- data/lib/solargraph/source/chain/link.rb +12 -22
- data/lib/solargraph/source/chain/literal.rb +22 -15
- data/lib/solargraph/source/chain/or.rb +10 -4
- data/lib/solargraph/source/chain/q_call.rb +2 -0
- data/lib/solargraph/source/chain/variable.rb +3 -1
- data/lib/solargraph/source/chain/z_super.rb +1 -3
- data/lib/solargraph/source/chain.rb +51 -38
- data/lib/solargraph/source/change.rb +12 -5
- data/lib/solargraph/source/cursor.rb +33 -18
- data/lib/solargraph/source/encoding_fixes.rb +6 -7
- data/lib/solargraph/source/source_chainer.rb +56 -32
- data/lib/solargraph/source/updater.rb +5 -1
- data/lib/solargraph/source.rb +59 -35
- data/lib/solargraph/source_map/clip.rb +54 -30
- data/lib/solargraph/source_map/data.rb +4 -1
- data/lib/solargraph/source_map/mapper.rb +69 -42
- data/lib/solargraph/source_map.rb +21 -9
- data/lib/solargraph/type_checker/problem.rb +3 -1
- data/lib/solargraph/type_checker/rules.rb +81 -8
- data/lib/solargraph/type_checker.rb +196 -122
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/workspace/config.rb +14 -11
- data/lib/solargraph/workspace/gemspecs.rb +367 -0
- data/lib/solargraph/workspace/require_paths.rb +1 -0
- data/lib/solargraph/workspace.rb +50 -28
- data/lib/solargraph/yard_map/cache.rb +25 -25
- data/lib/solargraph/yard_map/helpers.rb +8 -3
- data/lib/solargraph/yard_map/mapper/to_constant.rb +28 -28
- data/lib/solargraph/yard_map/mapper/to_method.rb +13 -7
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +2 -1
- data/lib/solargraph/yard_map/mapper.rb +13 -8
- data/lib/solargraph/yard_map.rb +17 -18
- data/lib/solargraph/yard_tags.rb +2 -2
- data/lib/solargraph/yardoc.rb +7 -4
- data/lib/solargraph.rb +33 -10
- data/rbs/fills/rubygems/0/dependency.rbs +193 -0
- data/rbs/shims/ast/0/node.rbs +1 -1
- data/rbs/shims/diff-lcs/1.5/diff-lcs.rbs +11 -0
- data/solargraph.gemspec +37 -35
- metadata +41 -42
- data/lib/solargraph/type_checker/checks.rb +0 -124
- data/lib/solargraph/type_checker/param_def.rb +0 -37
- data/lib/solargraph/yard_map/to_method.rb +0 -89
- data/rbs/fills/tuple/tuple.rbs +0 -149
data/lib/solargraph/pin_cache.rb
CHANGED
|
@@ -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
|
|
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
|
|
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?
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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?
|
|
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
|
|
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
|
-
|
|
226
|
-
|
|
227
|
-
|
|
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
|
|
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
|
|
243
|
+
out&.puts "Clearing pin cache in #{file}"
|
|
241
244
|
end
|
|
242
245
|
end
|
|
243
246
|
end
|
data/lib/solargraph/position.rb
CHANGED
|
@@ -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 <=>
|
|
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
|
|
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?
|
|
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
|
data/lib/solargraph/range.rb
CHANGED
|
@@ -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 <=>
|
|
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
|
|
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
|
-
|
|
89
|
-
|
|
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
|