solargraph 0.53.1 → 0.53.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cb238e5ca67dae6ca26b2a5fb6eda261727eb6464f0c048adf1d043fb13ccacd
4
- data.tar.gz: dfc03ca7f87fe40f79ba387b4489be60f7f155b60e2e6a3fa696637684545501
3
+ metadata.gz: dd82572e0c8ca2d5e7477c4bbcd58fa66b318550a23b6944d8749f67913560e3
4
+ data.tar.gz: 79ba0becff2e00fbcc7139ec540e91db5dec195cf5ae557cdcf599026b11b964
5
5
  SHA512:
6
- metadata.gz: f101995ec1f808c69afbdb8be4d865159a6b349782b97ab7d6bb96dd61fd6ec43b8b3a3d7c9c55e14ee6feab4cdd7f570c9de688ff6a8a099f927a3d972a4e0a
7
- data.tar.gz: 82b02c423e72e482e93b314361eb7165898906c3d02221b4336af853645bc668bbbb7412298db2921b621e91c0baf294987cf0d16c2b878bb5ad3b57fd0d2f3b
6
+ metadata.gz: 743c84f70a8d49f253f4fdf3e8b43a3061ad7cd6eec68fbbf592505d63d56666ae5654ca2664750a7963d43f5b131ff1c7bc52660266786d345c9a19b86856fa
7
+ data.tar.gz: 8accd71eec8ce6f5ccf3aa5efd692a3ff71ea35eabf125446fe533049df80bd84fb33bf73d0cdadd7914598d485ed1f013c7cc898575b1a34238c90e92d8318e
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 0.53.2 - March 27, 2025
2
+ - Fix a self-type-related false-positive in strict typechecking (#834)
3
+ - DocMap fetches gem dependencies (#835)
4
+ - Use configured command path to spawn solargraph processes (#837)
5
+
1
6
  ## 0.53.1 - March 26, 2025
2
7
  - Reject nil requires in live code (#831)
3
8
  - RbsMap adds mixins to current namespace (#832)
@@ -64,7 +64,7 @@ module Solargraph
64
64
  implicit.merge map.environ
65
65
  end
66
66
  unresolved_requires = (bench.external_requires + implicit.requires + bench.workspace.config.required).uniq
67
- @doc_map = DocMap.new(unresolved_requires, []) # @todo Implement gem dependencies
67
+ @doc_map = DocMap.new(unresolved_requires, []) # @todo Implement gem preferences
68
68
  @store = Store.new(@@core_map.pins + @doc_map.pins + implicit.pins + pins)
69
69
  @unresolved_requires = @doc_map.unresolved_requires
70
70
  @missing_docs = [] # @todo Implement missing docs
@@ -8,7 +8,7 @@ module Solargraph
8
8
  attr_reader :requires
9
9
 
10
10
  # @return [Array<Gem::Specification>]
11
- attr_reader :dependencies
11
+ attr_reader :preferences
12
12
 
13
13
  # @return [Array<Pin::Base>]
14
14
  attr_reader :pins
@@ -17,10 +17,10 @@ module Solargraph
17
17
  attr_reader :uncached_gemspecs
18
18
 
19
19
  # @param requires [Array<String>]
20
- # @param dependencies [Array<Gem::Specification>]
21
- def initialize(requires, dependencies)
20
+ # @param preferences [Array<Gem::Specification>]
21
+ def initialize(requires, preferences)
22
22
  @requires = requires.compact
23
- @dependencies = dependencies.compact
23
+ @preferences = preferences.compact
24
24
  generate
25
25
  end
26
26
 
@@ -39,17 +39,11 @@ module Solargraph
39
39
  @gems_in_memory ||= {}
40
40
  end
41
41
 
42
- private
43
-
44
- # @return [Hash{String => Gem::Specification, nil}]
45
- def required_gem_map
46
- @required_gem_map ||= requires.to_h { |path| [path, resolve_path_to_gemspec(path)] }
42
+ def dependencies
43
+ @dependencies ||= (gemspecs.flat_map { |spec| fetch_dependencies(spec) } - gemspecs).to_set
47
44
  end
48
45
 
49
- # @return [Hash{String => Gem::Specification}]
50
- def dependency_map
51
- @dependency_map ||= dependencies.to_h { |gemspec| [gemspec.name, gemspec] }
52
- end
46
+ private
53
47
 
54
48
  # @return [void]
55
49
  def generate
@@ -62,6 +56,17 @@ module Solargraph
62
56
  try_stdlib_map path
63
57
  end
64
58
  end
59
+ dependencies.each { |dep| try_cache dep }
60
+ end
61
+
62
+ # @return [Hash{String => Gem::Specification, nil}]
63
+ def required_gem_map
64
+ @required_gem_map ||= requires.to_h { |path| [path, resolve_path_to_gemspec(path)] }
65
+ end
66
+
67
+ # @return [Hash{String => Gem::Specification}]
68
+ def preference_map
69
+ @preference_map ||= preferences.to_h { |gemspec| [gemspec.name, gemspec] }
65
70
  end
66
71
 
67
72
  # @param gemspec [Gem::Specification]
@@ -123,16 +128,16 @@ module Solargraph
123
128
  nil
124
129
  end
125
130
  end
126
- return gemspec if dependencies.empty? || gemspec.nil?
131
+ gemspec_or_preference gemspec
132
+ end
127
133
 
128
- if dependency_map.key?(gemspec.name)
129
- return gemspec if gemspec.version == dependency_map[gemspec.name].version
134
+ # @param gemspec [Gem::Specification, nil]
135
+ # @return [Gem::Specification, nil]
136
+ def gemspec_or_preference gemspec
137
+ return gemspec unless gemspec && preference_map.key?(gemspec.name)
138
+ return gemspec if gemspec.version == preference_map[gemspec.name].version
130
139
 
131
- change_gemspec_version gemspec, dependency_map[by_path.name].version
132
- else
133
- Solargraph.logger.warn "Gem #{gemspec.name} is not an expected dependency"
134
- gemspec
135
- end
140
+ change_gemspec_version gemspec, preference_map[by_path.name].version
136
141
  end
137
142
 
138
143
  # @param gemspec [Gem::Specification]
@@ -144,5 +149,23 @@ module Solargraph
144
149
  Solargraph.logger.info "Gem #{gemspec.name} version #{version} not found. Using #{gemspec.version} instead"
145
150
  gemspec
146
151
  end
152
+
153
+ # @param gemspec [Gem::Specification]
154
+ # @return [Array<Gem::Specification>]
155
+ def fetch_dependencies gemspec
156
+ only_runtime_dependencies(gemspec).each_with_object(Set.new) do |spec, deps|
157
+ Solargraph.logger.info "Adding #{spec.name} dependency for #{gemspec.name}"
158
+ dep = Gem::Specification.find_by_name(spec.name, spec.requirement)
159
+ deps.merge fetch_dependencies(dep) if deps.add?(dep)
160
+ rescue Gem::MissingSpecError
161
+ Solargraph.logger.warn "Gem dependency #{spec.name} #{spec.requirements} for #{gemspec.name} not found."
162
+ end.to_a
163
+ end
164
+
165
+ # @param gemspec [Gem::Specification]
166
+ # @return [Array<Gem::Dependency>]
167
+ def only_runtime_dependencies gemspec
168
+ gemspec.dependencies - gemspec.development_dependencies
169
+ end
147
170
  end
148
171
  end
@@ -95,6 +95,10 @@ module Solargraph
95
95
  nil
96
96
  end
97
97
 
98
+ def options
99
+ @options ||= {}.freeze
100
+ end
101
+
98
102
  # Get a generic library for the given URI and attach the corresponding
99
103
  # source.
100
104
  #
@@ -109,7 +113,7 @@ module Solargraph
109
113
 
110
114
  # @return [Library]
111
115
  def generic_library
112
- @generic_library ||= Solargraph::Library.new
116
+ @generic_library ||= Solargraph::Library.new(Solargraph::Workspace.new('', nil, options), nil)
113
117
  end
114
118
  end
115
119
  end
@@ -292,7 +292,8 @@ module Solargraph
292
292
  path = ''
293
293
  path = normalize_separators(directory) unless directory.nil?
294
294
  begin
295
- lib = Solargraph::Library.load(path, name)
295
+ workspace = Solargraph::Workspace.new(path, nil, options)
296
+ lib = Solargraph::Library.new(workspace, name)
296
297
  libraries.push lib
297
298
  async_library_map lib
298
299
  rescue WorkspaceTooLargeError => e
@@ -603,7 +603,7 @@ module Solargraph
603
603
 
604
604
  logger.info "Caching #{spec.name} #{spec.version}"
605
605
  Thread.new do
606
- @cache_pid = Process.spawn('solargraph', 'cache', spec.name, spec.version.to_s)
606
+ @cache_pid = Process.spawn(workspace.command_path, 'cache', spec.name, spec.version.to_s)
607
607
  Process.wait(@cache_pid)
608
608
  logger.info "Cached #{spec.name} #{spec.version}"
609
609
  @synchronized = false
@@ -333,6 +333,7 @@ module Solargraph
333
333
  next
334
334
  else
335
335
  ptype = params.key?(par.name) ? params[par.name][:qualified] : ComplexType::UNDEFINED
336
+ ptype = ptype.self_to(par.context.namespace)
336
337
  if ptype.nil?
337
338
  # @todo Some level (strong, I guess) should require the param here
338
339
  else
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Solargraph
4
- VERSION = '0.53.1'
4
+ VERSION = '0.53.2'
5
5
  end
@@ -25,9 +25,11 @@ module Solargraph
25
25
 
26
26
  # @param directory [String]
27
27
  # @param config [Config, nil]
28
- def initialize directory = '', config = nil
28
+ # @param server [Hash]
29
+ def initialize directory = '', config = nil, server = {}
29
30
  @directory = directory
30
31
  @config = config
32
+ @server = server
31
33
  load_sources
32
34
  @gemnames = []
33
35
  @require_paths = generate_require_paths
@@ -134,8 +136,19 @@ module Solargraph
134
136
  source_hash[updater.filename] = source_hash[updater.filename].synchronize(updater)
135
137
  end
136
138
 
139
+ # @return [String]
140
+ def command_path
141
+ server['commandPath'] || 'solargraph'
142
+ end
143
+
137
144
  private
138
145
 
146
+ # The language server configuration (or an empty hash if the workspace was
147
+ # not initialized from a server).
148
+ #
149
+ # @return [Hash]
150
+ attr_reader :server
151
+
139
152
  # @return [Hash{String => Solargraph::Source}]
140
153
  def source_hash
141
154
  @source_hash ||= {}
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.53.1
4
+ version: 0.53.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: 2025-03-26 00:00:00.000000000 Z
11
+ date: 2025-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: backport