solargraph 0.54.3 → 0.54.5
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/CHANGELOG.md +9 -0
- data/lib/solargraph/api_map/index.rb +1 -1
- data/lib/solargraph/api_map/store.rb +37 -18
- data/lib/solargraph/api_map.rb +6 -11
- data/lib/solargraph/bench.rb +17 -1
- data/lib/solargraph/library.rb +4 -6
- data/lib/solargraph/parser/parser_gem/class_methods.rb +2 -6
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +4 -10
- data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +2 -2
- data/lib/solargraph/source/cursor.rb +0 -11
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/yardoc.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 155e6f0e4fc44166c0d4b3c1ba6691ff1d1629d229adf8d37f6d3fe4b5fc0c77
|
4
|
+
data.tar.gz: c33c4dab114c6a70b3c0dfbee6a5ccdc379cf284af3d34dae8a30473dbcdc517
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 267350435fa9592fc49dc2c5b05f9f9157b576025ea4ed9abe3ebc58e4344d7412805ace58920585105fbb81eaa2bad246416c5456ce66656f22c8639054002d
|
7
|
+
data.tar.gz: 7a3860337657dc869e7a96f8b95509867ece49db13e89523e09c1567490b427ed41f5fc57c87e5d8477bfe3857cbe97512bd811598adbb53f4a2f617e724c44c
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
## 0.54.5 - May 17, 2025
|
2
|
+
- Repair unknown encoding errors (#936, #935)
|
3
|
+
- Index arbitrary pinsets (#937)
|
4
|
+
- Separate YARD cache from doc map cache (#938)
|
5
|
+
|
6
|
+
## 0.54.4 - May 14, 2025
|
7
|
+
- Delete files from Library hash (#932)
|
8
|
+
- Clip#define returns variable pins (#934, #933)
|
9
|
+
|
1
10
|
## 0.54.3 - May 13, 2025
|
2
11
|
- Improve inspect()/desc()/to_s() methods for better debugging output (#913)
|
3
12
|
- Fix generic resolution in Hash types (#906)
|
@@ -1,18 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
3
|
module Solargraph
|
5
4
|
class ApiMap
|
6
5
|
# Queryable collection of Pins representing a Workspace, gems and the Ruby
|
7
6
|
# core.
|
8
7
|
#
|
9
8
|
class Store
|
10
|
-
# @param
|
11
|
-
|
12
|
-
|
13
|
-
@static_index = Index.new(static)
|
14
|
-
@dynamic = dynamic
|
15
|
-
@index = @static_index.merge(dynamic)
|
9
|
+
# @param pinsets [Array<Enumerable<Pin::Base>>]
|
10
|
+
def initialize *pinsets
|
11
|
+
catalog pinsets
|
16
12
|
end
|
17
13
|
|
18
14
|
# @return [Array<Solargraph::Pin::Base>]
|
@@ -20,19 +16,27 @@ module Solargraph
|
|
20
16
|
index.pins
|
21
17
|
end
|
22
18
|
|
23
|
-
# @param
|
24
|
-
# @
|
25
|
-
def update
|
19
|
+
# @param pinsets [Array<Enumerable<Pin::Base>>]
|
20
|
+
# @return [Boolean] True if the index was updated
|
21
|
+
def update *pinsets
|
22
|
+
return catalog(pinsets) if pinsets.length != @pinsets.length
|
23
|
+
|
24
|
+
changed = pinsets.find_index.with_index { |pinset, idx| @pinsets[idx] != pinset }
|
25
|
+
return false unless changed
|
26
|
+
|
26
27
|
# @todo Fix this map
|
27
28
|
@fqns_pins_map = nil
|
28
|
-
if
|
29
|
-
|
30
|
-
|
31
|
-
@
|
29
|
+
return catalog(pinsets) if changed == 0
|
30
|
+
|
31
|
+
pinsets[changed..].each_with_index do |pins, idx|
|
32
|
+
@pinsets[changed + idx] = pins
|
33
|
+
@indexes[changed + idx] = if pins.empty?
|
34
|
+
@indexes[changed + idx - 1]
|
35
|
+
else
|
36
|
+
@indexes[changed + idx - 1].merge(pins)
|
37
|
+
end
|
32
38
|
end
|
33
|
-
|
34
|
-
@index = @static_index.merge(dynamic)
|
35
|
-
self
|
39
|
+
true
|
36
40
|
end
|
37
41
|
|
38
42
|
def to_s
|
@@ -190,7 +194,22 @@ module Solargraph
|
|
190
194
|
|
191
195
|
private
|
192
196
|
|
193
|
-
|
197
|
+
def index
|
198
|
+
@indexes.last
|
199
|
+
end
|
200
|
+
|
201
|
+
def catalog pinsets
|
202
|
+
@pinsets = pinsets
|
203
|
+
@indexes = []
|
204
|
+
pinsets.each do |pins|
|
205
|
+
if @indexes.last && pins.empty?
|
206
|
+
@indexes.push @indexes.last
|
207
|
+
else
|
208
|
+
@indexes.push(@indexes.last&.merge(pins) || Solargraph::ApiMap::Index.new(pins))
|
209
|
+
end
|
210
|
+
end
|
211
|
+
true
|
212
|
+
end
|
194
213
|
|
195
214
|
# @return [Hash{::Array(String, String) => ::Array<Pin::Namespace>}]
|
196
215
|
def fqns_pins_map
|
data/lib/solargraph/api_map.rb
CHANGED
@@ -66,7 +66,7 @@ module Solargraph
|
|
66
66
|
@source_map_hash = {}
|
67
67
|
implicit.clear
|
68
68
|
cache.clear
|
69
|
-
store.update
|
69
|
+
store.update @@core_map.pins, pins
|
70
70
|
self
|
71
71
|
end
|
72
72
|
|
@@ -85,11 +85,9 @@ module Solargraph
|
|
85
85
|
# @param bench [Bench]
|
86
86
|
# @return [self]
|
87
87
|
def catalog bench
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
@source_map_hash = bench.source_maps.map { |s| [s.filename, s] }.to_h
|
92
|
-
pins = bench.source_maps.flat_map(&:pins).flatten
|
88
|
+
@source_map_hash = bench.source_map_hash
|
89
|
+
iced_pins = bench.icebox.flat_map(&:pins)
|
90
|
+
live_pins = bench.live_map&.pins || []
|
93
91
|
implicit.clear
|
94
92
|
source_map_hash.each_value do |map|
|
95
93
|
implicit.merge map.environ
|
@@ -98,11 +96,8 @@ module Solargraph
|
|
98
96
|
if @unresolved_requires != unresolved_requires || @doc_map&.uncached_gemspecs&.any?
|
99
97
|
@doc_map = DocMap.new(unresolved_requires, [], bench.workspace.rbs_collection_path) # @todo Implement gem preferences
|
100
98
|
@unresolved_requires = unresolved_requires
|
101
|
-
need_to_uncache = true
|
102
99
|
end
|
103
|
-
store.update
|
104
|
-
@cache.clear if need_to_uncache
|
105
|
-
|
100
|
+
@cache.clear if store.update(@@core_map.pins, @doc_map.pins, implicit.pins, iced_pins, live_pins)
|
106
101
|
@missing_docs = [] # @todo Implement missing docs
|
107
102
|
self
|
108
103
|
end
|
@@ -111,7 +106,7 @@ module Solargraph
|
|
111
106
|
# that this overload of 'protected' will typecheck @sg-ignore
|
112
107
|
# @sg-ignore
|
113
108
|
protected def equality_fields
|
114
|
-
[self.class, @source_map_hash, implicit, @doc_map, @unresolved_requires
|
109
|
+
[self.class, @source_map_hash, implicit, @doc_map, @unresolved_requires]
|
115
110
|
end
|
116
111
|
|
117
112
|
# @return [::Array<Gem::Specification>]
|
data/lib/solargraph/bench.rb
CHANGED
@@ -11,18 +11,34 @@ module Solargraph
|
|
11
11
|
# @return [Workspace]
|
12
12
|
attr_reader :workspace
|
13
13
|
|
14
|
+
# @return [SourceMap]
|
15
|
+
attr_reader :live_map
|
16
|
+
|
14
17
|
# @return [Set<String>]
|
15
18
|
attr_reader :external_requires
|
16
19
|
|
17
20
|
# @param source_maps [Array<SourceMap>, Set<SourceMap>]
|
18
21
|
# @param workspace [Workspace]
|
22
|
+
# @param live_map [SourceMap, nil]
|
19
23
|
# @param external_requires [Array<String>, Set<String>]
|
20
|
-
def initialize source_maps: [], workspace: Workspace.new, external_requires: []
|
24
|
+
def initialize source_maps: [], workspace: Workspace.new, live_map: nil, external_requires: []
|
21
25
|
@source_maps = source_maps.to_set
|
22
26
|
@workspace = workspace
|
27
|
+
@live_map = live_map
|
23
28
|
@external_requires = external_requires.reject { |path| workspace.would_require?(path) }
|
24
29
|
.compact
|
25
30
|
.to_set
|
26
31
|
end
|
32
|
+
|
33
|
+
# @return [Hash{String => SourceMap}]
|
34
|
+
def source_map_hash
|
35
|
+
# @todo Work around #to_h bug in current Ruby head (3.5) with #map#to_h
|
36
|
+
@source_map_hash ||= source_maps.map { |s| [s.filename, s] }
|
37
|
+
.to_h
|
38
|
+
end
|
39
|
+
|
40
|
+
def icebox
|
41
|
+
@icebox ||= (source_maps - [live_map])
|
42
|
+
end
|
27
43
|
end
|
28
44
|
end
|
data/lib/solargraph/library.rb
CHANGED
@@ -132,6 +132,7 @@ module Solargraph
|
|
132
132
|
result = false
|
133
133
|
filenames.each do |filename|
|
134
134
|
detach filename
|
135
|
+
source_map_hash.delete(filename)
|
135
136
|
result ||= workspace.remove(filename)
|
136
137
|
end
|
137
138
|
result
|
@@ -192,11 +193,7 @@ module Solargraph
|
|
192
193
|
else
|
193
194
|
mutex.synchronize do
|
194
195
|
clip = api_map.clip(cursor)
|
195
|
-
|
196
|
-
[Pin::ProxyType.new(name: cursor.word, return_type: clip.infer)]
|
197
|
-
else
|
198
|
-
clip.define.map { |pin| pin.realize(api_map) }
|
199
|
-
end
|
196
|
+
clip.define.map { |pin| pin.realize(api_map) }
|
200
197
|
end
|
201
198
|
end
|
202
199
|
rescue FileNotFoundError => e
|
@@ -433,7 +430,8 @@ module Solargraph
|
|
433
430
|
Bench.new(
|
434
431
|
source_maps: source_map_hash.values,
|
435
432
|
workspace: workspace,
|
436
|
-
external_requires: external_requires
|
433
|
+
external_requires: external_requires,
|
434
|
+
live_map: @current ? source_map_hash[@current.filename] : nil
|
437
435
|
)
|
438
436
|
end
|
439
437
|
|
@@ -11,13 +11,9 @@ module Solargraph
|
|
11
11
|
# @param filename [String, nil]
|
12
12
|
# @return [Array(Parser::AST::Node, Hash{Integer => String})]
|
13
13
|
def parse_with_comments code, filename = nil
|
14
|
-
|
15
|
-
buffer.source = code
|
16
|
-
node = parser.parse(buffer)
|
14
|
+
node = parse(code, filename)
|
17
15
|
comments = CommentRipper.new(code, filename, 0).parse
|
18
16
|
[node, comments]
|
19
|
-
rescue ::Parser::SyntaxError => e
|
20
|
-
raise Parser::SyntaxError, e.message
|
21
17
|
end
|
22
18
|
|
23
19
|
# @param code [String]
|
@@ -28,7 +24,7 @@ module Solargraph
|
|
28
24
|
buffer = ::Parser::Source::Buffer.new(filename, line)
|
29
25
|
buffer.source = code
|
30
26
|
parser.parse(buffer)
|
31
|
-
rescue ::Parser::SyntaxError => e
|
27
|
+
rescue ::Parser::SyntaxError, ::Parser::UnknownEncodingInMagicComment => e
|
32
28
|
raise Parser::SyntaxError, e.message
|
33
29
|
end
|
34
30
|
|
@@ -89,21 +89,15 @@ module Solargraph
|
|
89
89
|
elsif n.type == :const
|
90
90
|
const = unpack_name(n)
|
91
91
|
result.push Chain::Constant.new(const)
|
92
|
-
elsif [:
|
93
|
-
result.concat generate_links(n.children[1])
|
94
|
-
elsif n.type == :lvar
|
92
|
+
elsif [:lvar, :lvasgn].include?(n.type)
|
95
93
|
result.push Chain::Call.new(n.children[0].to_s)
|
96
|
-
elsif n.type
|
94
|
+
elsif [:ivar, :ivasgn].include?(n.type)
|
97
95
|
result.push Chain::InstanceVariable.new(n.children[0].to_s)
|
98
|
-
elsif n.type
|
96
|
+
elsif [:cvar, :cvasgn].include?(n.type)
|
99
97
|
result.push Chain::ClassVariable.new(n.children[0].to_s)
|
100
|
-
elsif n.type
|
98
|
+
elsif [:gvar, :gvasgn].include?(n.type)
|
101
99
|
result.push Chain::GlobalVariable.new(n.children[0].to_s)
|
102
100
|
elsif n.type == :or_asgn
|
103
|
-
# @todo: Need a new Link class here that evaluates the
|
104
|
-
# existing variable type with the RHS, and generates a
|
105
|
-
# union type of the LHS alone if never nil, or minus nil +
|
106
|
-
# RHS if it is nilable.
|
107
101
|
result.concat generate_links n.children[1]
|
108
102
|
elsif [:class, :module, :def, :defs].include?(n.type)
|
109
103
|
# @todo Undefined or what?
|
@@ -8,8 +8,8 @@ module Solargraph
|
|
8
8
|
include ParserGem::NodeMethods
|
9
9
|
|
10
10
|
def process
|
11
|
-
|
12
|
-
presence = Range.new(
|
11
|
+
here = get_node_start_position(node)
|
12
|
+
presence = Range.new(here, region.closure.location.range.ending)
|
13
13
|
loc = get_node_location(node)
|
14
14
|
locals.push Solargraph::Pin::LocalVariable.new(
|
15
15
|
location: loc,
|
@@ -104,17 +104,6 @@ module Solargraph
|
|
104
104
|
@string ||= source.string_at?(position)
|
105
105
|
end
|
106
106
|
|
107
|
-
|
108
|
-
# True if the cursor's chain is an assignment to a variable.
|
109
|
-
#
|
110
|
-
# When the chain is an assignment, `Cursor#word` will contain the
|
111
|
-
# variable name.
|
112
|
-
#
|
113
|
-
# @return [Boolean]
|
114
|
-
def assign?
|
115
|
-
%i[lvasgn ivasgn gvasgn cvasgn].include? chain&.node&.type
|
116
|
-
end
|
117
|
-
|
118
107
|
# Get a cursor pointing to the method that receives the current statement
|
119
108
|
# as an argument.
|
120
109
|
#
|
data/lib/solargraph/version.rb
CHANGED
data/lib/solargraph/yardoc.rb
CHANGED
@@ -35,7 +35,7 @@ module Solargraph
|
|
35
35
|
# @param gemspec [Gem::Specification]
|
36
36
|
# @return [String]
|
37
37
|
def path_for(gemspec)
|
38
|
-
File.join(Solargraph::Cache.
|
38
|
+
File.join(Solargraph::Cache.base_dir, "yard-#{YARD::VERSION}", "#{gemspec.name}-#{gemspec.version}.yardoc")
|
39
39
|
end
|
40
40
|
|
41
41
|
# Load a gem's yardoc and return its code objects.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: solargraph
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.54.
|
4
|
+
version: 0.54.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fred Snyder
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-05-
|
11
|
+
date: 2025-05-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: backport
|
@@ -643,7 +643,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
643
643
|
- !ruby/object:Gem::Version
|
644
644
|
version: '0'
|
645
645
|
requirements: []
|
646
|
-
rubygems_version: 3.
|
646
|
+
rubygems_version: 3.5.22
|
647
647
|
signing_key:
|
648
648
|
specification_version: 4
|
649
649
|
summary: A Ruby language server
|