solargraph 0.59.0.dev.1 → 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.
- checksums.yaml +4 -4
- data/.github/workflows/plugins.yml +4 -1
- data/.github/workflows/rspec.yml +3 -14
- data/.gitignore +1 -0
- data/.rubocop.yml +32 -5
- data/.rubocop_todo.yml +37 -931
- data/CHANGELOG.md +7 -1
- data/Gemfile +3 -1
- data/Rakefile +25 -23
- data/bin/solargraph +2 -1
- data/lib/solargraph/api_map/index.rb +5 -11
- data/lib/solargraph/api_map/source_to_yard.rb +9 -8
- data/lib/solargraph/api_map/store.rb +22 -20
- data/lib/solargraph/api_map.rb +50 -37
- data/lib/solargraph/bench.rb +44 -45
- data/lib/solargraph/complex_type/type_methods.rb +12 -15
- data/lib/solargraph/complex_type/unique_type.rb +54 -43
- data/lib/solargraph/complex_type.rb +69 -61
- data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -61
- data/lib/solargraph/convention/data_definition/data_definition_node.rb +4 -4
- data/lib/solargraph/convention/data_definition.rb +1 -1
- data/lib/solargraph/convention/gemfile.rb +15 -15
- data/lib/solargraph/convention/gemspec.rb +23 -23
- data/lib/solargraph/convention/rakefile.rb +17 -17
- data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +1 -1
- data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +3 -3
- data/lib/solargraph/convention/struct_definition.rb +3 -3
- data/lib/solargraph/convention.rb +78 -78
- data/lib/solargraph/converters/dd.rb +19 -17
- data/lib/solargraph/converters/dl.rb +17 -15
- data/lib/solargraph/converters/dt.rb +17 -15
- data/lib/solargraph/converters/misc.rb +3 -1
- data/lib/solargraph/diagnostics/rubocop.rb +10 -10
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +3 -3
- data/lib/solargraph/diagnostics/type_check.rb +10 -10
- data/lib/solargraph/diagnostics/update_errors.rb +37 -41
- data/lib/solargraph/doc_map.rb +9 -10
- data/lib/solargraph/equality.rb +3 -3
- data/lib/solargraph/gem_pins.rb +7 -5
- data/lib/solargraph/language_server/error_codes.rb +20 -20
- data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
- data/lib/solargraph/language_server/host/dispatch.rb +2 -3
- data/lib/solargraph/language_server/host/message_worker.rb +2 -2
- data/lib/solargraph/language_server/host/sources.rb +1 -1
- data/lib/solargraph/language_server/host.rb +24 -21
- data/lib/solargraph/language_server/message/base.rb +97 -97
- data/lib/solargraph/language_server/message/client/register_capability.rb +13 -15
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +58 -60
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +10 -11
- data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
- data/lib/solargraph/language_server/message/extended/download_core.rb +20 -19
- data/lib/solargraph/language_server/message/extended/search.rb +20 -20
- data/lib/solargraph/language_server/message/initialize.rb +197 -191
- data/lib/solargraph/language_server/message/text_document/completion.rb +8 -8
- data/lib/solargraph/language_server/message/text_document/definition.rb +41 -34
- data/lib/solargraph/language_server/message/text_document/document_highlight.rb +23 -16
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +29 -21
- data/lib/solargraph/language_server/message/text_document/formatting.rb +6 -6
- data/lib/solargraph/language_server/message/text_document/hover.rb +3 -5
- data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +18 -11
- data/lib/solargraph/language_server/message/text_document/references.rb +23 -16
- data/lib/solargraph/language_server/message/text_document/rename.rb +26 -19
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +2 -2
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -19
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +41 -35
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +48 -40
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +32 -26
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +27 -19
- data/lib/solargraph/language_server/message.rb +94 -94
- data/lib/solargraph/language_server/request.rb +29 -27
- data/lib/solargraph/language_server/transport/data_reader.rb +72 -74
- data/lib/solargraph/language_server/uri_helpers.rb +49 -49
- data/lib/solargraph/library.rb +28 -33
- data/lib/solargraph/location.rb +10 -12
- data/lib/solargraph/logging.rb +4 -4
- data/lib/solargraph/page.rb +92 -92
- data/lib/solargraph/parser/comment_ripper.rb +12 -4
- data/lib/solargraph/parser/flow_sensitive_typing.rb +32 -42
- data/lib/solargraph/parser/node_processor/base.rb +4 -4
- data/lib/solargraph/parser/node_processor.rb +1 -1
- data/lib/solargraph/parser/parser_gem/class_methods.rb +4 -4
- data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -19
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +20 -20
- data/lib/solargraph/parser/parser_gem/node_methods.rb +66 -65
- data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +12 -12
- data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +1 -1
- data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +3 -3
- data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +38 -37
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +3 -3
- data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +1 -1
- data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +3 -5
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +118 -112
- data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -29
- data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +1 -1
- data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +1 -1
- data/lib/solargraph/parser/parser_gem.rb +14 -12
- data/lib/solargraph/parser/snippet.rb +2 -0
- data/lib/solargraph/parser.rb +25 -23
- data/lib/solargraph/pin/base.rb +78 -64
- data/lib/solargraph/pin/base_variable.rb +28 -71
- data/lib/solargraph/pin/block.rb +3 -2
- data/lib/solargraph/pin/breakable.rb +2 -0
- data/lib/solargraph/pin/callable.rb +23 -26
- data/lib/solargraph/pin/closure.rb +5 -4
- data/lib/solargraph/pin/common.rb +5 -2
- data/lib/solargraph/pin/compound_statement.rb +3 -3
- data/lib/solargraph/pin/constant.rb +43 -45
- data/lib/solargraph/pin/conversions.rb +9 -4
- data/lib/solargraph/pin/delegated_method.rb +4 -4
- data/lib/solargraph/pin/documenting.rb +3 -2
- data/lib/solargraph/pin/local_variable.rb +4 -4
- data/lib/solargraph/pin/method.rb +71 -70
- data/lib/solargraph/pin/namespace.rb +13 -12
- data/lib/solargraph/pin/parameter.rb +28 -27
- data/lib/solargraph/pin/proxy_type.rb +2 -0
- data/lib/solargraph/pin/reference.rb +17 -0
- data/lib/solargraph/pin/search.rb +2 -2
- data/lib/solargraph/pin/signature.rb +9 -14
- data/lib/solargraph/pin/symbol.rb +1 -0
- data/lib/solargraph/pin/until.rb +1 -3
- data/lib/solargraph/pin/while.rb +1 -3
- data/lib/solargraph/pin_cache.rb +16 -19
- data/lib/solargraph/position.rb +35 -17
- data/lib/solargraph/range.rb +10 -9
- data/lib/solargraph/rbs_map/conversions.rb +312 -206
- data/lib/solargraph/rbs_map/core_fills.rb +91 -84
- data/lib/solargraph/rbs_map/stdlib_map.rb +0 -1
- data/lib/solargraph/rbs_map.rb +3 -12
- data/lib/solargraph/server_methods.rb +16 -16
- data/lib/solargraph/shell.rb +63 -53
- data/lib/solargraph/source/chain/array.rb +39 -37
- data/lib/solargraph/source/chain/call.rb +49 -44
- data/lib/solargraph/source/chain/class_variable.rb +13 -13
- data/lib/solargraph/source/chain/constant.rb +3 -1
- data/lib/solargraph/source/chain/global_variable.rb +13 -13
- data/lib/solargraph/source/chain/hash.rb +8 -6
- data/lib/solargraph/source/chain/if.rb +11 -10
- data/lib/solargraph/source/chain/instance_variable.rb +3 -1
- data/lib/solargraph/source/chain/link.rb +99 -109
- data/lib/solargraph/source/chain/literal.rb +4 -6
- data/lib/solargraph/source/chain/or.rb +2 -4
- data/lib/solargraph/source/chain/q_call.rb +13 -11
- data/lib/solargraph/source/chain/variable.rb +15 -13
- data/lib/solargraph/source/chain/z_super.rb +28 -30
- data/lib/solargraph/source/chain.rb +24 -16
- data/lib/solargraph/source/change.rb +3 -3
- data/lib/solargraph/source/cursor.rb +18 -18
- data/lib/solargraph/source/encoding_fixes.rb +6 -7
- data/lib/solargraph/source/source_chainer.rb +46 -32
- data/lib/solargraph/source/updater.rb +1 -1
- data/lib/solargraph/source.rb +27 -29
- data/lib/solargraph/source_map/clip.rb +38 -30
- data/lib/solargraph/source_map/mapper.rb +52 -46
- data/lib/solargraph/source_map.rb +8 -4
- data/lib/solargraph/type_checker/rules.rb +8 -8
- data/lib/solargraph/type_checker.rb +95 -101
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/workspace/config.rb +10 -9
- data/lib/solargraph/workspace/gemspecs.rb +1 -1
- data/lib/solargraph/workspace.rb +21 -44
- data/lib/solargraph/yard_map/helpers.rb +6 -2
- data/lib/solargraph/yard_map/mapper/to_method.rb +8 -6
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +1 -1
- data/lib/solargraph/yard_map/mapper.rb +12 -12
- data/lib/solargraph/yard_tags.rb +20 -20
- data/lib/solargraph.rb +5 -5
- data/solargraph.gemspec +35 -34
- metadata +28 -28
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Solargraph
|
|
2
4
|
module Pin
|
|
3
5
|
class Signature < Callable
|
|
@@ -5,10 +7,6 @@ module Solargraph
|
|
|
5
7
|
# to the method pin
|
|
6
8
|
attr_writer :closure
|
|
7
9
|
|
|
8
|
-
def initialize **splat
|
|
9
|
-
super(**splat)
|
|
10
|
-
end
|
|
11
|
-
|
|
12
10
|
def generics
|
|
13
11
|
# @type [Array<::String, nil>]
|
|
14
12
|
@generics ||= [].freeze
|
|
@@ -18,8 +16,6 @@ module Solargraph
|
|
|
18
16
|
@identity ||= "signature#{object_id}"
|
|
19
17
|
end
|
|
20
18
|
|
|
21
|
-
attr_writer :closure
|
|
22
|
-
|
|
23
19
|
# @ sg-ignore need boolish support for ? methods
|
|
24
20
|
def dodgy_return_type_source?
|
|
25
21
|
super || closure&.dodgy_return_type_source?
|
|
@@ -49,16 +45,15 @@ module Solargraph
|
|
|
49
45
|
method_stack = closure.rest_of_stack api_map
|
|
50
46
|
logger.debug { "Signature#typify(self=#{self}) - method_stack: #{method_stack}" }
|
|
51
47
|
method_stack.each do |pin|
|
|
52
|
-
sig = pin.signatures.find { |s| s.arity ==
|
|
48
|
+
sig = pin.signatures.find { |s| s.arity == arity }
|
|
53
49
|
next unless sig
|
|
54
50
|
# @sg-ignore Need to add nil check here
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
end
|
|
51
|
+
next if sig.return_type.undefined?
|
|
52
|
+
# @sg-ignore Need to add nil check here
|
|
53
|
+
qualified = sig.return_type.qualify(api_map, closure.namespace)
|
|
54
|
+
# @sg-ignore Need to add nil check here
|
|
55
|
+
logger.debug { "Signature#typify(self=#{self}) => #{qualified.rooted_tags.inspect}" }
|
|
56
|
+
return qualified
|
|
62
57
|
end
|
|
63
58
|
out = super
|
|
64
59
|
logger.debug { "Signature#typify(self=#{self}) => #{out}" }
|
|
@@ -5,6 +5,7 @@ module Solargraph
|
|
|
5
5
|
class Symbol < Base
|
|
6
6
|
# @param location [Solargraph::Location, nil]
|
|
7
7
|
# @param name [String]
|
|
8
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
8
9
|
def initialize(location, name, **kwargs)
|
|
9
10
|
# @sg-ignore "Unrecognized keyword argument kwargs to Solargraph::Pin::Base#initialize"
|
|
10
11
|
super(location: location, name: name, **kwargs)
|
data/lib/solargraph/pin/until.rb
CHANGED
|
@@ -5,10 +5,8 @@ module Solargraph
|
|
|
5
5
|
class Until < CompoundStatement
|
|
6
6
|
include Breakable
|
|
7
7
|
|
|
8
|
-
# @param receiver [Parser::AST::Node, nil]
|
|
9
8
|
# @param node [Parser::AST::Node, nil]
|
|
10
|
-
# @param
|
|
11
|
-
# @param args [::Array<Parameter>]
|
|
9
|
+
# @param [Hash{Symbol => Object}] splat
|
|
12
10
|
def initialize node: nil, **splat
|
|
13
11
|
super(**splat)
|
|
14
12
|
@node = node
|
data/lib/solargraph/pin/while.rb
CHANGED
|
@@ -5,10 +5,8 @@ module Solargraph
|
|
|
5
5
|
class While < CompoundStatement
|
|
6
6
|
include Breakable
|
|
7
7
|
|
|
8
|
-
# @param receiver [Parser::AST::Node, nil]
|
|
9
8
|
# @param node [Parser::AST::Node, nil]
|
|
10
|
-
# @param
|
|
11
|
-
# @param args [::Array<Parameter>]
|
|
9
|
+
# @param [Hash{Symbol => Object}] splat
|
|
12
10
|
def initialize node: nil, **splat
|
|
13
11
|
super(**splat)
|
|
14
12
|
@node = node
|
data/lib/solargraph/pin_cache.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'fileutils'
|
|
2
4
|
require 'rbs'
|
|
3
5
|
require 'rubygems'
|
|
@@ -408,6 +410,7 @@ module Solargraph
|
|
|
408
410
|
|
|
409
411
|
# @return [void]
|
|
410
412
|
# @param path_segments [Array<String>]
|
|
413
|
+
# @param out [StringIO, IO, nil]
|
|
411
414
|
def uncache_by_prefix *path_segments, out: nil
|
|
412
415
|
path = File.join(*path_segments)
|
|
413
416
|
glob = "#{path}*"
|
|
@@ -447,7 +450,7 @@ module Solargraph
|
|
|
447
450
|
path = File.join(*path_segments)
|
|
448
451
|
if File.exist?(path)
|
|
449
452
|
FileUtils.rm_rf path, secure: true
|
|
450
|
-
out
|
|
453
|
+
out&.puts "Clearing pin cache in #{path}"
|
|
451
454
|
else
|
|
452
455
|
out&.puts "Pin cache file #{path} does not exist"
|
|
453
456
|
end
|
|
@@ -459,11 +462,11 @@ module Solargraph
|
|
|
459
462
|
def uncache_by_prefix *path_segments, out: nil
|
|
460
463
|
path = File.join(*path_segments)
|
|
461
464
|
glob = "#{path}*"
|
|
462
|
-
out
|
|
465
|
+
out&.puts "Clearing pin cache in #{glob}"
|
|
463
466
|
Dir.glob(glob).each do |file|
|
|
464
467
|
next unless File.file?(file)
|
|
465
468
|
FileUtils.rm_rf file, secure: true
|
|
466
|
-
out
|
|
469
|
+
out&.puts "Clearing pin cache in #{file}"
|
|
467
470
|
end
|
|
468
471
|
end
|
|
469
472
|
|
|
@@ -538,40 +541,34 @@ module Solargraph
|
|
|
538
541
|
|
|
539
542
|
# @param gemspec [Gem::Specification]
|
|
540
543
|
# @return [Array<Pin::Base>, nil]
|
|
541
|
-
def deserialize_yard_gem
|
|
544
|
+
def deserialize_yard_gem gemspec
|
|
542
545
|
load(yard_gem_path(gemspec))
|
|
543
546
|
end
|
|
544
547
|
|
|
545
548
|
# @param gemspec [Gem::Specification]
|
|
546
549
|
# @param pins [Array<Pin::Base>]
|
|
547
550
|
# @return [void]
|
|
548
|
-
def serialize_yard_gem
|
|
551
|
+
def serialize_yard_gem gemspec, pins
|
|
549
552
|
save(yard_gem_path(gemspec), pins)
|
|
550
553
|
end
|
|
551
554
|
|
|
552
|
-
# @param gemspec [Gem::Specification]
|
|
553
|
-
# @return [Boolean]
|
|
554
|
-
def has_yard?(gemspec)
|
|
555
|
-
exist?(yard_gem_path(gemspec))
|
|
556
|
-
end
|
|
557
|
-
|
|
558
555
|
# @param gemspec [Gem::Specification]
|
|
559
556
|
# @param hash [String, nil]
|
|
560
557
|
# @return [String]
|
|
561
|
-
def rbs_collection_path
|
|
558
|
+
def rbs_collection_path gemspec, hash
|
|
562
559
|
File.join(work_dir, 'rbs', "#{gemspec.name}-#{gemspec.version}-#{hash || 0}.ser")
|
|
563
560
|
end
|
|
564
561
|
|
|
565
562
|
# @param gemspec [Gem::Specification]
|
|
566
563
|
# @return [String]
|
|
567
|
-
def rbs_collection_path_prefix
|
|
564
|
+
def rbs_collection_path_prefix gemspec
|
|
568
565
|
File.join(work_dir, 'rbs', "#{gemspec.name}-#{gemspec.version}-")
|
|
569
566
|
end
|
|
570
567
|
|
|
571
568
|
# @param gemspec [Gem::Specification]
|
|
572
569
|
# @param hash [String, nil]
|
|
573
570
|
# @return [Array<Pin::Base>, nil]
|
|
574
|
-
def deserialize_rbs_collection_gem
|
|
571
|
+
def deserialize_rbs_collection_gem gemspec, hash
|
|
575
572
|
load(rbs_collection_path(gemspec, hash))
|
|
576
573
|
end
|
|
577
574
|
|
|
@@ -579,20 +576,20 @@ module Solargraph
|
|
|
579
576
|
# @param hash [String, nil]
|
|
580
577
|
# @param pins [Array<Pin::Base>]n
|
|
581
578
|
# @return [void]
|
|
582
|
-
def serialize_rbs_collection_gem
|
|
579
|
+
def serialize_rbs_collection_gem gemspec, hash, pins
|
|
583
580
|
save(rbs_collection_path(gemspec, hash), pins)
|
|
584
581
|
end
|
|
585
582
|
|
|
586
583
|
# @param gemspec [Gem::Specification]
|
|
587
584
|
# @param hash [String, nil]
|
|
588
585
|
# @return [String]
|
|
589
|
-
def combined_path
|
|
586
|
+
def combined_path gemspec, hash
|
|
590
587
|
File.join(work_dir, 'combined', "#{gemspec.name}-#{gemspec.version}-#{hash || 0}.ser")
|
|
591
588
|
end
|
|
592
589
|
|
|
593
590
|
# @param gemspec [Gem::Specification]
|
|
594
591
|
# @return [String]
|
|
595
|
-
def combined_path_prefix
|
|
592
|
+
def combined_path_prefix gemspec
|
|
596
593
|
File.join(work_dir, 'combined', "#{gemspec.name}-#{gemspec.version}-")
|
|
597
594
|
end
|
|
598
595
|
|
|
@@ -600,7 +597,7 @@ module Solargraph
|
|
|
600
597
|
# @param hash [String, nil]
|
|
601
598
|
# @param pins [Array<Pin::Base>]
|
|
602
599
|
# @return [void]
|
|
603
|
-
def serialize_combined_gem
|
|
600
|
+
def serialize_combined_gem gemspec, hash, pins
|
|
604
601
|
save(combined_path(gemspec, hash), pins)
|
|
605
602
|
end
|
|
606
603
|
|
|
@@ -614,7 +611,7 @@ module Solargraph
|
|
|
614
611
|
# @param gemspec [Gem::Specification]
|
|
615
612
|
# @param hash [String, nil]
|
|
616
613
|
# @return [Boolean]
|
|
617
|
-
def has_rbs_collection?
|
|
614
|
+
def has_rbs_collection? gemspec, hash
|
|
618
615
|
exist?(rbs_collection_path(gemspec, hash))
|
|
619
616
|
end
|
|
620
617
|
|
data/lib/solargraph/position.rb
CHANGED
|
@@ -21,12 +21,8 @@ module Solargraph
|
|
|
21
21
|
@character = character
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
protected def equality_fields
|
|
25
|
-
[line, character]
|
|
26
|
-
end
|
|
27
|
-
|
|
28
24
|
# @param other [Position]
|
|
29
|
-
def <=>
|
|
25
|
+
def <=> other
|
|
30
26
|
return nil unless other.is_a?(Position)
|
|
31
27
|
if line == other.line
|
|
32
28
|
character <=> other.character
|
|
@@ -57,7 +53,22 @@ module Solargraph
|
|
|
57
53
|
# @return [Integer]
|
|
58
54
|
def self.to_offset text, position
|
|
59
55
|
return 0 if text.empty?
|
|
60
|
-
|
|
56
|
+
|
|
57
|
+
newline_index = -1
|
|
58
|
+
line = -1
|
|
59
|
+
last_line_index = 0
|
|
60
|
+
|
|
61
|
+
# @sg-ignore flow sensitive typing should be able to handle redefinition
|
|
62
|
+
while (newline_index = text.index("\n", newline_index + 1)) && line <= position.line
|
|
63
|
+
line += 1
|
|
64
|
+
break if line == position.line
|
|
65
|
+
|
|
66
|
+
last_line_index = newline_index
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
last_line_index += 1 if position.line.positive?
|
|
70
|
+
# @sg-ignore flow sensitive typing should be able to handle redefinition
|
|
71
|
+
last_line_index + position.character
|
|
61
72
|
end
|
|
62
73
|
|
|
63
74
|
# Get a numeric offset for the specified text and a position identified
|
|
@@ -73,25 +84,26 @@ module Solargraph
|
|
|
73
84
|
|
|
74
85
|
# Get a position for the specified text and offset.
|
|
75
86
|
#
|
|
87
|
+
# @raise [InvalidOffsetError] if the offset is outside the text range
|
|
88
|
+
#
|
|
76
89
|
# @param text [String]
|
|
77
90
|
# @param offset [Integer]
|
|
78
91
|
# @return [Position]
|
|
79
92
|
def self.from_offset text, offset
|
|
93
|
+
raise InvalidOffsetError if offset > text.length
|
|
94
|
+
|
|
80
95
|
cursor = 0
|
|
81
96
|
line = 0
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
if cursor + char_length >= offset
|
|
88
|
-
character = offset - cursor
|
|
89
|
-
break
|
|
90
|
-
end
|
|
91
|
-
cursor += line_length
|
|
97
|
+
character = offset
|
|
98
|
+
newline_index = -1
|
|
99
|
+
|
|
100
|
+
# @sg-ignore flow sensitive typing should be able to handle redefinition
|
|
101
|
+
while (newline_index = text.index("\n", newline_index + 1)) && newline_index < offset
|
|
92
102
|
line += 1
|
|
103
|
+
# @sg-ignore flow sensitive typing should be able to handle redefinition
|
|
104
|
+
character = offset - newline_index - 1
|
|
93
105
|
end
|
|
94
|
-
character = 0 if character.nil?
|
|
106
|
+
character = 0 if character.nil? && (cursor - offset).between?(0, 1)
|
|
95
107
|
raise InvalidOffsetError if character.nil?
|
|
96
108
|
# @sg-ignore flow sensitive typing needs to handle 'raise if'
|
|
97
109
|
Position.new(line, character)
|
|
@@ -114,5 +126,11 @@ module Solargraph
|
|
|
114
126
|
return false unless other.is_a?(Position)
|
|
115
127
|
line == other.line and character == other.character
|
|
116
128
|
end
|
|
129
|
+
|
|
130
|
+
protected
|
|
131
|
+
|
|
132
|
+
def equality_fields
|
|
133
|
+
[line, character]
|
|
134
|
+
end
|
|
117
135
|
end
|
|
118
136
|
end
|
data/lib/solargraph/range.rb
CHANGED
|
@@ -19,12 +19,8 @@ module Solargraph
|
|
|
19
19
|
@ending = ending
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
-
protected def equality_fields
|
|
23
|
-
[start, ending]
|
|
24
|
-
end
|
|
25
|
-
|
|
26
22
|
# @param other [BasicObject]
|
|
27
|
-
def <=>
|
|
23
|
+
def <=> other
|
|
28
24
|
return nil unless other.is_a?(Range)
|
|
29
25
|
if start == other.start
|
|
30
26
|
ending <=> other.ending
|
|
@@ -36,7 +32,7 @@ module Solargraph
|
|
|
36
32
|
# Get a hash of the range. This representation is suitable for use in
|
|
37
33
|
# the language server protocol.
|
|
38
34
|
#
|
|
39
|
-
# @return [Hash
|
|
35
|
+
# @return [Hash{Symbol => Position}]
|
|
40
36
|
def to_hash
|
|
41
37
|
{
|
|
42
38
|
start: start.to_hash,
|
|
@@ -86,9 +82,8 @@ module Solargraph
|
|
|
86
82
|
# @param node [::Parser::AST::Node]
|
|
87
83
|
# @return [Range, nil]
|
|
88
84
|
def self.from_node node
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
end
|
|
85
|
+
return unless node&.loc&.expression
|
|
86
|
+
from_expr(node.loc.expression)
|
|
92
87
|
end
|
|
93
88
|
|
|
94
89
|
# Get a range from a Parser range, usually found in
|
|
@@ -108,5 +103,11 @@ module Solargraph
|
|
|
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
|