solargraph 0.42.1 → 0.42.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/CHANGELOG.md +6 -0
- data/lib/solargraph/api_map/bundler_methods.rb +1 -6
- data/lib/solargraph/bench.rb +1 -1
- data/lib/solargraph/language_server/host.rb +2 -1
- data/lib/solargraph/language_server/transport/adapter.rb +1 -3
- data/lib/solargraph/library.rb +2 -1
- data/lib/solargraph/pin/local_variable.rb +47 -1
- data/lib/solargraph/shell.rb +2 -2
- data/lib/solargraph/source/chain/call.rb +3 -2
- data/lib/solargraph/source_map.rb +2 -1
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/yard_map.rb +9 -7
- data/lib/solargraph/yard_map/core_fills.rb +18 -1
- data/solargraph.gemspec +1 -1
- metadata +4 -5
- data/lib/solargraph/pin/localized.rb +0 -43
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d4cd4acd35a7ce8242976cdd2b23d583bbd01392e3d79a16e3b4e181443e4858
|
4
|
+
data.tar.gz: 4cb4f369d97681a43d24a8fc3de14a454721c4334426655e23fffafceeb242c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5918eb0b9797ed3bed1fe97a702761889b4fb5b8280de655820d8a4319eefd651f4958e420b32468aac2ab197f657b8cb1386029654dcbd9b3a30bbdd2ca521b
|
7
|
+
data.tar.gz: 649a461beb8b23b69ae40bb347389602e20b42d0a689752d805beb2c08000a863c24d9e45b39d00ee544d37802be0762d9933a6d4e27b2617249d1443ca582f4
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
## 0.42.2 - June 14, 2021
|
2
|
+
- Improve download-core command output
|
3
|
+
- Ignore missing requests to client responses
|
4
|
+
- Add automatically required gems to YardMap
|
5
|
+
- Use closures to identify local variables
|
6
|
+
|
1
7
|
## 0.42.1 - June 11, 2021
|
2
8
|
- YardMap#change sets new directory (#445)
|
3
9
|
|
@@ -9,7 +9,7 @@ module Solargraph
|
|
9
9
|
# @param directory [String]
|
10
10
|
# @return [Hash]
|
11
11
|
def require_from_bundle directory
|
12
|
-
|
12
|
+
begin
|
13
13
|
Solargraph.logger.info "Loading gems for bundler/require"
|
14
14
|
Documentor.specs_from_bundle(directory)
|
15
15
|
rescue BundleNotFoundError => e
|
@@ -17,11 +17,6 @@ module Solargraph
|
|
17
17
|
{}
|
18
18
|
end
|
19
19
|
end
|
20
|
-
|
21
|
-
# @return [void]
|
22
|
-
def reset_require_from_bundle
|
23
|
-
@require_from_bundle = nil
|
24
|
-
end
|
25
20
|
end
|
26
21
|
end
|
27
22
|
end
|
data/lib/solargraph/bench.rb
CHANGED
@@ -31,7 +31,7 @@ module Solargraph
|
|
31
31
|
@cancel = []
|
32
32
|
@buffer = String.new
|
33
33
|
@stopped = true
|
34
|
-
@next_request_id =
|
34
|
+
@next_request_id = 1
|
35
35
|
@dynamic_capabilities = Set.new
|
36
36
|
@registered_capabilities = Set.new
|
37
37
|
end
|
@@ -113,6 +113,7 @@ module Solargraph
|
|
113
113
|
requests.delete request['id']
|
114
114
|
else
|
115
115
|
logger.warn "Discarding client response to unrecognized message #{request['id']}"
|
116
|
+
nil
|
116
117
|
end
|
117
118
|
else
|
118
119
|
logger.warn "Invalid message received."
|
data/lib/solargraph/library.rb
CHANGED
@@ -46,7 +46,7 @@ module Solargraph
|
|
46
46
|
# @return [void]
|
47
47
|
def attach source
|
48
48
|
mutex.synchronize do
|
49
|
-
if @current && @current.filename != source.filename && source_map_hash.key?(@current.filename) && !workspace.has_file?(@current.filename)
|
49
|
+
if @current && (!source || @current.filename != source.filename) && source_map_hash.key?(@current.filename) && !workspace.has_file?(@current.filename)
|
50
50
|
source_map_hash.delete @current.filename
|
51
51
|
source_map_external_require_hash.delete @current.filename
|
52
52
|
@external_requires = nil
|
@@ -511,6 +511,7 @@ module Solargraph
|
|
511
511
|
end
|
512
512
|
|
513
513
|
def maybe_map source
|
514
|
+
return unless source
|
514
515
|
if source_map_hash.key?(source.filename)
|
515
516
|
return if source_map_hash[source.filename].code == source.code &&
|
516
517
|
source_map_hash[source.filename].source.synchronized? &&
|
@@ -3,7 +3,8 @@
|
|
3
3
|
module Solargraph
|
4
4
|
module Pin
|
5
5
|
class LocalVariable < BaseVariable
|
6
|
-
|
6
|
+
# @return [Range]
|
7
|
+
attr_reader :presence
|
7
8
|
|
8
9
|
def initialize assignment: nil, presence: nil, **splat
|
9
10
|
super(**splat)
|
@@ -16,6 +17,51 @@ module Solargraph
|
|
16
17
|
@presence = pin.presence
|
17
18
|
true
|
18
19
|
end
|
20
|
+
|
21
|
+
# @param other [Pin::Base] The caller's block
|
22
|
+
# @param position [Position, Array(Integer, Integer)] The caller's position
|
23
|
+
# @return [Boolean]
|
24
|
+
def visible_from?(other, position)
|
25
|
+
position = Position.normalize(position)
|
26
|
+
other.filename == filename &&
|
27
|
+
match_tags(other.full_context.tag, full_context.tag) &&
|
28
|
+
(other == closure ||
|
29
|
+
(closure.location.range.contain?(other.location.range.start) && closure.location.range.contain?(other.location.range.ending))
|
30
|
+
) &&
|
31
|
+
presence.contain?(position)
|
32
|
+
end
|
33
|
+
|
34
|
+
# @param other_loc [Location]
|
35
|
+
def visible_at?(other_closure, other_loc)
|
36
|
+
return true if location.filename == other_loc.filename &&
|
37
|
+
presence.include?(other_loc.range.start) &&
|
38
|
+
match_named_closure(other_closure, closure)
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
# @param tag1 [String]
|
44
|
+
# @param tag2 [String]
|
45
|
+
# @return [Boolean]
|
46
|
+
def match_tags tag1, tag2
|
47
|
+
# @todo This is an unfortunate hack made necessary by a discrepancy in
|
48
|
+
# how tags indicate the root namespace. The long-term solution is to
|
49
|
+
# standardize it, whether it's `Class<>`, an empty string, or
|
50
|
+
# something else.
|
51
|
+
tag1 == tag2 ||
|
52
|
+
(['', 'Class<>'].include?(tag1) && ['', 'Class<>'].include?(tag2))
|
53
|
+
end
|
54
|
+
|
55
|
+
def match_named_closure needle, haystack
|
56
|
+
return true if needle == haystack
|
57
|
+
cursor = haystack
|
58
|
+
until cursor.nil?
|
59
|
+
return true if needle.path == cursor.path
|
60
|
+
return false if cursor.path && !cursor.path.empty?
|
61
|
+
cursor = cursor.closure
|
62
|
+
end
|
63
|
+
false
|
64
|
+
end
|
19
65
|
end
|
20
66
|
end
|
21
67
|
end
|
data/lib/solargraph/shell.rb
CHANGED
@@ -76,12 +76,12 @@ module Solargraph
|
|
76
76
|
ver = version || Solargraph::YardMap::CoreDocs.best_download
|
77
77
|
if RUBY_VERSION != ver
|
78
78
|
puts "Documentation for #{RUBY_VERSION} is not available. Reverting to closest match..."
|
79
|
-
else
|
80
|
-
puts "Downloading docs for #{ver}..."
|
81
79
|
end
|
80
|
+
puts "Downloading docs for #{ver}..."
|
82
81
|
Solargraph::YardMap::CoreDocs.download ver
|
83
82
|
# Clear cached documentation if it exists
|
84
83
|
FileUtils.rm_rf Dir.glob(File.join(Solargraph::YardMap::CoreDocs.cache_dir, ver, '*.ser'))
|
84
|
+
puts "Download complete."
|
85
85
|
rescue ArgumentError => e
|
86
86
|
STDERR.puts "ERROR: #{e.message}"
|
87
87
|
STDERR.puts "Run `solargraph available-cores` for a list."
|
@@ -77,6 +77,7 @@ module Solargraph
|
|
77
77
|
end
|
78
78
|
if match
|
79
79
|
type = extra_return_type(ol, context)
|
80
|
+
break if type
|
80
81
|
type = ComplexType.try_parse(*ol.tag(:return).types).self_to(context.to_s).qualify(api_map, context.namespace) if ol.has_tag?(:return) && ol.tag(:return).types && !ol.tag(:return).types.empty? && (type.nil? || type.undefined?)
|
81
82
|
type ||= ComplexType::UNDEFINED
|
82
83
|
end
|
@@ -170,8 +171,8 @@ module Solargraph
|
|
170
171
|
# @param context [ComplexType]
|
171
172
|
# @return [ComplexType]
|
172
173
|
def extra_return_type docstring, context
|
173
|
-
if docstring.has_tag?(:return_single_parameter)
|
174
|
-
return context.subtypes.first
|
174
|
+
if docstring.has_tag?(:return_single_parameter) #&& context.subtypes.one?
|
175
|
+
return context.subtypes.first || ComplexType::UNDEFINED
|
175
176
|
elsif docstring.has_tag?(:return_value_parameter) && context.value_types.one?
|
176
177
|
return context.value_types.first
|
177
178
|
end
|
@@ -131,7 +131,8 @@ module Solargraph
|
|
131
131
|
# @return [Array<Pin::LocalVariable>]
|
132
132
|
def locals_at(location)
|
133
133
|
return [] if location.filename != filename
|
134
|
-
|
134
|
+
closure = locate_named_path_pin(location.range.start.line, location.range.start.character)
|
135
|
+
locals.select { |pin| pin.visible_at?(closure, location) }
|
135
136
|
end
|
136
137
|
|
137
138
|
class << self
|
data/lib/solargraph/version.rb
CHANGED
data/lib/solargraph/yard_map.rb
CHANGED
@@ -156,12 +156,12 @@ module Solargraph
|
|
156
156
|
@base_required ||= Set.new
|
157
157
|
end
|
158
158
|
|
159
|
-
private
|
160
|
-
|
161
159
|
def directory
|
162
160
|
@directory ||= ''
|
163
161
|
end
|
164
162
|
|
163
|
+
private
|
164
|
+
|
165
165
|
# @return [YardMap::Cache]
|
166
166
|
def cache
|
167
167
|
@cache ||= YardMap::Cache.new
|
@@ -190,11 +190,8 @@ module Solargraph
|
|
190
190
|
|
191
191
|
# @return [void]
|
192
192
|
def process_requires
|
193
|
-
@gemset =
|
194
|
-
|
195
|
-
else
|
196
|
-
{}
|
197
|
-
end
|
193
|
+
@gemset = process_gemsets
|
194
|
+
required.merge @gemset.keys if required.include?('bundler/require')
|
198
195
|
pins.replace core_pins
|
199
196
|
unresolved_requires.clear
|
200
197
|
stdlib_pins.clear
|
@@ -254,6 +251,11 @@ module Solargraph
|
|
254
251
|
pins.concat environ.pins
|
255
252
|
end
|
256
253
|
|
254
|
+
def process_gemsets
|
255
|
+
return {} if directory.empty? || !File.file?(File.join(directory, 'Gemfile'))
|
256
|
+
require_from_bundle(directory)
|
257
|
+
end
|
258
|
+
|
257
259
|
# @param spec [Gem::Specification]
|
258
260
|
# @return [void]
|
259
261
|
def add_gem_dependencies spec
|
@@ -82,6 +82,18 @@ module Solargraph
|
|
82
82
|
Override.method_return('Class#allocate', 'self'),
|
83
83
|
Override.method_return('Class.allocate', 'Class<Object>'),
|
84
84
|
|
85
|
+
Override.from_comment('Enumerable#detect', %(
|
86
|
+
@overload detect(&block)
|
87
|
+
@return_single_parameter
|
88
|
+
@overload detect()
|
89
|
+
@return [Enumerator]
|
90
|
+
)),
|
91
|
+
Override.from_comment('Enumerable#find', %(
|
92
|
+
@overload find(&block)
|
93
|
+
@return_single_parameter
|
94
|
+
@overload find()
|
95
|
+
@return [Enumerator]
|
96
|
+
)),
|
85
97
|
Override.method_return('Enumerable#select', 'self'),
|
86
98
|
|
87
99
|
Override.method_return('File.absolute_path', 'String'),
|
@@ -111,7 +123,12 @@ module Solargraph
|
|
111
123
|
@param y [Numeric]
|
112
124
|
@return [Numeric]
|
113
125
|
)),
|
114
|
-
Override.
|
126
|
+
Override.from_comment('Integer#times', %(
|
127
|
+
@overload times(&block)
|
128
|
+
@return [Integer]
|
129
|
+
@overload times()
|
130
|
+
@return [Enumerator]
|
131
|
+
)),
|
115
132
|
|
116
133
|
Override.method_return('Kernel#puts', 'nil'),
|
117
134
|
|
data/solargraph.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |s|
|
|
19
19
|
|
20
20
|
s.required_ruby_version = '>= 2.4'
|
21
21
|
|
22
|
-
s.add_runtime_dependency 'backport', '~> 1.
|
22
|
+
s.add_runtime_dependency 'backport', '~> 1.2'
|
23
23
|
s.add_runtime_dependency 'benchmark'
|
24
24
|
s.add_runtime_dependency 'bundler', '>= 1.17.2'
|
25
25
|
s.add_runtime_dependency 'diff-lcs', '~> 1.4'
|
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.42.
|
4
|
+
version: 0.42.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fred Snyder
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-06-
|
11
|
+
date: 2021-06-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: backport
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.2'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
26
|
+
version: '1.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: benchmark
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -477,7 +477,6 @@ files:
|
|
477
477
|
- lib/solargraph/pin/keyword.rb
|
478
478
|
- lib/solargraph/pin/keyword_param.rb
|
479
479
|
- lib/solargraph/pin/local_variable.rb
|
480
|
-
- lib/solargraph/pin/localized.rb
|
481
480
|
- lib/solargraph/pin/method.rb
|
482
481
|
- lib/solargraph/pin/method_alias.rb
|
483
482
|
- lib/solargraph/pin/namespace.rb
|
@@ -1,43 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Solargraph
|
4
|
-
module Pin
|
5
|
-
module Localized
|
6
|
-
# @return [Range]
|
7
|
-
attr_reader :presence
|
8
|
-
|
9
|
-
# @param other [Pin::Base] The caller's block
|
10
|
-
# @param position [Position, Array(Integer, Integer)] The caller's position
|
11
|
-
# @return [Boolean]
|
12
|
-
def visible_from?(other, position)
|
13
|
-
position = Position.normalize(position)
|
14
|
-
other.filename == filename &&
|
15
|
-
match_tags(other.full_context.tag, full_context.tag) &&
|
16
|
-
(other == closure ||
|
17
|
-
(closure.location.range.contain?(other.location.range.start) && closure.location.range.contain?(other.location.range.ending))
|
18
|
-
) &&
|
19
|
-
presence.contain?(position)
|
20
|
-
end
|
21
|
-
|
22
|
-
# @param other_loc [Location]
|
23
|
-
def visible_at?(other_loc)
|
24
|
-
return false if location.filename != other_loc.filename
|
25
|
-
presence.include?(other_loc.range.start)
|
26
|
-
end
|
27
|
-
|
28
|
-
private
|
29
|
-
|
30
|
-
# @param tag1 [String]
|
31
|
-
# @param tag2 [String]
|
32
|
-
# @return [Boolean]
|
33
|
-
def match_tags tag1, tag2
|
34
|
-
# @todo This is an unfortunate hack made necessary by a discrepancy in
|
35
|
-
# how tags indicate the root namespace. The long-term solution is to
|
36
|
-
# standardize it, whether it's `Class<>`, an empty string, or
|
37
|
-
# something else.
|
38
|
-
tag1 == tag2 ||
|
39
|
-
(['', 'Class<>'].include?(tag1) && ['', 'Class<>'].include?(tag2))
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|