solargraph 0.53.0 → 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: ea6f4539a04d35b759acc75c97b4af772a34877adf8dba07e0a9a109a75cb545
4
- data.tar.gz: 3e6945e906e693884a19e3fb2504cf8508cdb9784fa015b27dd455fb2e4ddba7
3
+ metadata.gz: dd82572e0c8ca2d5e7477c4bbcd58fa66b318550a23b6944d8749f67913560e3
4
+ data.tar.gz: 79ba0becff2e00fbcc7139ec540e91db5dec195cf5ae557cdcf599026b11b964
5
5
  SHA512:
6
- metadata.gz: 561c956490d3231c79cd89163c162364793baca6c1a86c0dddb3b4896b965d08e4e86e4a4766a297c7d71b5f1573336d3d9c99aa271d7fa9fbde3061a8b7d338
7
- data.tar.gz: 683c8d6df19fbc1abcbc1420a4f78157d032ca91a1bbec9c2b77b3a429a88d6f2f754d0b1def057a807f90ea6e026ee11725eb22290c286e0019bc0aaba13d07
6
+ metadata.gz: 743c84f70a8d49f253f4fdf3e8b43a3061ad7cd6eec68fbbf592505d63d56666ae5654ca2664750a7963d43f5b131ff1c7bc52660266786d345c9a19b86856fa
7
+ data.tar.gz: 8accd71eec8ce6f5ccf3aa5efd692a3ff71ea35eabf125446fe533049df80bd84fb33bf73d0cdadd7914598d485ed1f013c7cc898575b1a34238c90e92d8318e
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
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
+
6
+ ## 0.53.1 - March 26, 2025
7
+ - Reject nil requires in live code (#831)
8
+ - RbsMap adds mixins to current namespace (#832)
9
+
1
10
  ## 0.53.0 - March 25, 2025
2
11
  - Fix crash on generic methods (#762)
3
12
  - Add more type annotations to the codebase (#763 et al.)
@@ -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
@@ -21,6 +21,7 @@ module Solargraph
21
21
  @source_maps = source_maps.to_set
22
22
  @workspace = workspace
23
23
  @external_requires = external_requires.reject { |path| workspace.would_require?(path) }
24
+ .compact
24
25
  .to_set
25
26
  end
26
27
  end
@@ -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)
22
- @requires = requires
23
- @dependencies = dependencies
20
+ # @param preferences [Array<Gem::Specification>]
21
+ def initialize(requires, preferences)
22
+ @requires = requires.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]
@@ -105,6 +110,8 @@ module Solargraph
105
110
  # @param path [String]
106
111
  # @return [Gem::Specification, nil]
107
112
  def resolve_path_to_gemspec path
113
+ return nil if path.empty?
114
+
108
115
  gemspec = Gem::Specification.find_by_path(path)
109
116
  if gemspec.nil?
110
117
  gem_name_guess = path.split('/').first
@@ -121,16 +128,16 @@ module Solargraph
121
128
  nil
122
129
  end
123
130
  end
124
- return gemspec if dependencies.empty? || gemspec.nil?
131
+ gemspec_or_preference gemspec
132
+ end
125
133
 
126
- if dependency_map.key?(gemspec.name)
127
- 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
128
139
 
129
- change_gemspec_version gemspec, dependency_map[by_path.name].version
130
- else
131
- Solargraph.logger.warn "Gem #{gemspec.name} is not an expected dependency"
132
- gemspec
133
- end
140
+ change_gemspec_version gemspec, preference_map[by_path.name].version
134
141
  end
135
142
 
136
143
  # @param gemspec [Gem::Specification]
@@ -142,5 +149,23 @@ module Solargraph
142
149
  Solargraph.logger.info "Gem #{gemspec.name} version #{version} not found. Using #{gemspec.version} instead"
143
150
  gemspec
144
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
145
170
  end
146
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
@@ -173,7 +173,7 @@ module Solargraph
173
173
  name: decl.super_class.name.relative!.to_s
174
174
  )
175
175
  end
176
- add_mixins decl, class_pin.closure
176
+ add_mixins decl, class_pin
177
177
  convert_members_to_pins decl, class_pin
178
178
  end
179
179
 
@@ -621,15 +621,15 @@ module Solargraph
621
621
  end
622
622
 
623
623
  # @param decl [RBS::AST::Declarations::Class, RBS::AST::Declarations::Module]
624
- # @param closure [Pin::Closure]
624
+ # @param closure [Pin::Namespace]
625
625
  # @return [void]
626
- def add_mixins decl, closure
626
+ def add_mixins decl, namespace
627
627
  decl.each_mixin do |mixin|
628
628
  klass = mixin.is_a?(RBS::AST::Members::Include) ? Pin::Reference::Include : Pin::Reference::Extend
629
629
  pins.push klass.new(
630
630
  name: mixin.name.relative!.to_s,
631
631
  location: rbs_location_to_location(mixin.location),
632
- closure: closure
632
+ closure: namespace
633
633
  )
634
634
  end
635
635
  end
@@ -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.0'
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.0
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-25 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