solargraph 0.57.0 → 0.58.0

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.
Files changed (98) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/linting.yml +4 -2
  3. data/.github/workflows/plugins.yml +61 -27
  4. data/.github/workflows/rspec.yml +19 -4
  5. data/.github/workflows/typecheck.yml +2 -2
  6. data/.rubocop.yml +1 -1
  7. data/.rubocop_todo.yml +90 -1438
  8. data/CHANGELOG.md +27 -0
  9. data/Rakefile +1 -1
  10. data/bin/solargraph +8 -5
  11. data/lib/solargraph/api_map/constants.rb +107 -46
  12. data/lib/solargraph/api_map/index.rb +32 -8
  13. data/lib/solargraph/api_map/source_to_yard.rb +5 -2
  14. data/lib/solargraph/api_map/store.rb +22 -12
  15. data/lib/solargraph/api_map.rb +27 -33
  16. data/lib/solargraph/complex_type/type_methods.rb +5 -0
  17. data/lib/solargraph/complex_type/unique_type.rb +12 -5
  18. data/lib/solargraph/complex_type.rb +19 -2
  19. data/lib/solargraph/convention/active_support_concern.rb +1 -1
  20. data/lib/solargraph/convention/data_definition/data_definition_node.rb +1 -1
  21. data/lib/solargraph/diagnostics/rubocop_helpers.rb +4 -2
  22. data/lib/solargraph/doc_map.rb +9 -6
  23. data/lib/solargraph/environ.rb +1 -1
  24. data/lib/solargraph/equality.rb +1 -0
  25. data/lib/solargraph/gem_pins.rb +4 -0
  26. data/lib/solargraph/language_server/host.rb +10 -4
  27. data/lib/solargraph/language_server/message/text_document/definition.rb +2 -2
  28. data/lib/solargraph/language_server/message/text_document/formatting.rb +4 -1
  29. data/lib/solargraph/language_server/message/text_document/type_definition.rb +1 -1
  30. data/lib/solargraph/language_server/progress.rb +1 -1
  31. data/lib/solargraph/language_server/request.rb +3 -1
  32. data/lib/solargraph/library.rb +3 -3
  33. data/lib/solargraph/location.rb +1 -0
  34. data/lib/solargraph/page.rb +0 -1
  35. data/lib/solargraph/parser/flow_sensitive_typing.rb +1 -1
  36. data/lib/solargraph/parser/parser_gem/class_methods.rb +2 -12
  37. data/lib/solargraph/parser/parser_gem/node_methods.rb +1 -14
  38. data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +1 -0
  39. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +64 -8
  40. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +12 -3
  41. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +4 -5
  42. data/lib/solargraph/pin/base.rb +29 -8
  43. data/lib/solargraph/pin/base_variable.rb +5 -3
  44. data/lib/solargraph/pin/block.rb +3 -2
  45. data/lib/solargraph/pin/callable.rb +6 -2
  46. data/lib/solargraph/pin/closure.rb +3 -7
  47. data/lib/solargraph/pin/delegated_method.rb +0 -1
  48. data/lib/solargraph/pin/local_variable.rb +0 -4
  49. data/lib/solargraph/pin/method.rb +20 -4
  50. data/lib/solargraph/pin/parameter.rb +6 -2
  51. data/lib/solargraph/pin/proxy_type.rb +4 -1
  52. data/lib/solargraph/pin/reference.rb +2 -11
  53. data/lib/solargraph/pin/search.rb +3 -0
  54. data/lib/solargraph/pin_cache.rb +5 -5
  55. data/lib/solargraph/position.rb +1 -0
  56. data/lib/solargraph/range.rb +4 -0
  57. data/lib/solargraph/rbs_map/conversions.rb +22 -1
  58. data/lib/solargraph/rbs_map/core_fills.rb +18 -0
  59. data/lib/solargraph/rbs_map/core_map.rb +11 -7
  60. data/lib/solargraph/rbs_map.rb +2 -2
  61. data/lib/solargraph/shell.rb +82 -1
  62. data/lib/solargraph/source/chain/call.rb +7 -3
  63. data/lib/solargraph/source/chain/constant.rb +3 -66
  64. data/lib/solargraph/source/chain/if.rb +1 -1
  65. data/lib/solargraph/source/chain/link.rb +1 -1
  66. data/lib/solargraph/source/chain/or.rb +1 -1
  67. data/lib/solargraph/source/chain.rb +2 -0
  68. data/lib/solargraph/source.rb +1 -1
  69. data/lib/solargraph/source_map/clip.rb +17 -25
  70. data/lib/solargraph/source_map/mapper.rb +0 -2
  71. data/lib/solargraph/source_map.rb +8 -3
  72. data/lib/solargraph/type_checker/rules.rb +23 -9
  73. data/lib/solargraph/type_checker.rb +133 -71
  74. data/lib/solargraph/version.rb +1 -1
  75. data/lib/solargraph/workspace/config.rb +21 -3
  76. data/lib/solargraph/workspace/require_paths.rb +0 -1
  77. data/lib/solargraph/workspace.rb +14 -19
  78. data/lib/solargraph/yard_map/mapper/to_method.rb +2 -1
  79. data/lib/solargraph/yard_map/mapper/to_namespace.rb +1 -0
  80. data/lib/solargraph/yard_map/to_method.rb +2 -1
  81. data/lib/solargraph/yardoc.rb +27 -4
  82. data/rbs/fills/bundler/0/bundler.rbs +4271 -0
  83. data/rbs/fills/open3/0/open3.rbs +172 -0
  84. data/rbs/fills/rubygems/0/basic_specification.rbs +326 -0
  85. data/rbs/fills/rubygems/0/errors.rbs +364 -0
  86. data/rbs/fills/rubygems/0/spec_fetcher.rbs +107 -0
  87. data/rbs/fills/rubygems/0/specification.rbs +1753 -0
  88. data/rbs_collection.yaml +4 -4
  89. data/sig/shims/ast/0/node.rbs +5 -0
  90. data/sig/shims/ast/2.4/.rbs_meta.yaml +9 -0
  91. data/sig/shims/ast/2.4/ast.rbs +73 -0
  92. data/sig/shims/parser/3.2.0.1/manifest.yaml +7 -0
  93. data/sig/shims/parser/3.2.0.1/parser.rbs +201 -0
  94. data/sig/shims/parser/3.2.0.1/polyfill.rbs +4 -0
  95. data/solargraph.gemspec +15 -4
  96. metadata +66 -12
  97. data/lib/solargraph/parser/node_methods.rb +0 -97
  98. /data/rbs/fills/{tuple.rbs → tuple/tuple.rbs} +0 -0
@@ -11,7 +11,7 @@ module Solargraph
11
11
  ["Rails::Engine", :class, "find_root_with_flag"] => :public
12
12
  }
13
13
 
14
- # @param code_object [YARD::CodeObjects::Base]
14
+ # @param code_object [YARD::CodeObjects::MethodObject]
15
15
  # @param name [String, nil]
16
16
  # @param scope [Symbol, nil]
17
17
  # @param visibility [Symbol, nil]
@@ -85,6 +85,7 @@ module Solargraph
85
85
  # HACK: Skip `nil` and `self` parameters that are sometimes emitted
86
86
  # for methods defined in C
87
87
  # See https://github.com/castwide/solargraph/issues/345
88
+ # @sg-ignore https://github.com/castwide/solargraph/pull/1114
88
89
  code_object.parameters.select { |a| a[0] && a[0] != 'self' }.map do |a|
89
90
  Solargraph::Pin::Parameter.new(
90
91
  location: location,
@@ -21,6 +21,7 @@ module Solargraph
21
21
  type: code_object.is_a?(YARD::CodeObjects::ClassObject) ? :class : :module,
22
22
  visibility: code_object.visibility,
23
23
  closure: closure,
24
+ gates: closure.gates,
24
25
  source: :yardoc,
25
26
  )
26
27
  end
@@ -15,6 +15,7 @@ module Solargraph
15
15
  # HACK: Skip `nil` and `self` parameters that are sometimes emitted
16
16
  # for methods defined in C
17
17
  # See https://github.com/castwide/solargraph/issues/345
18
+ # @sg-ignore https://github.com/castwide/solargraph/pull/1114
18
19
  code_object.parameters.select { |a| a[0] && a[0] != 'self' }.map do |a|
19
20
  Solargraph::Pin::Parameter.new(
20
21
  location: location,
@@ -57,7 +58,7 @@ module Solargraph
57
58
 
58
59
  include Helpers
59
60
 
60
- # @param code_object [YARD::CodeObjects::Base]
61
+ # @param code_object [YARD::CodeObjects::MethodObject]
61
62
  # @param name [String, nil]
62
63
  # @param scope [Symbol, nil]
63
64
  # @param visibility [Symbol, nil]
@@ -18,15 +18,21 @@ module Solargraph
18
18
  path = PinCache.yardoc_path gemspec
19
19
  return path if cached?(gemspec)
20
20
 
21
+ unless Dir.exist? gemspec.gem_dir
22
+ # Can happen in at least some (old?) RubyGems versions when we
23
+ # have a gemspec describing a standard library like bundler.
24
+ #
25
+ # https://github.com/apiology/solargraph/actions/runs/17650140201/job/50158676842?pr=10
26
+ Solargraph.logger.info { "Bad info from gemspec - #{gemspec.gem_dir} does not exist" }
27
+ return path
28
+ end
29
+
21
30
  Solargraph.logger.info "Caching yardoc for #{gemspec.name} #{gemspec.version}"
22
31
  cmd = "yardoc --db #{path} --no-output --plugin solargraph"
23
32
  yard_plugins.each { |plugin| cmd << " --plugin #{plugin}" }
24
33
  Solargraph.logger.debug { "Running: #{cmd}" }
25
34
  # @todo set these up to run in parallel
26
- #
27
- # @sg-ignore RBS gem doesn't reflect that Open3.* also include
28
- # kwopts from Process.spawn()
29
- stdout_and_stderr_str, status = Open3.capture2e(cmd, chdir: gemspec.gem_dir)
35
+ stdout_and_stderr_str, status = Open3.capture2e(current_bundle_env_tweaks, cmd, chdir: gemspec.gem_dir)
30
36
  unless status.success?
31
37
  Solargraph.logger.warn { "YARD failed running #{cmd.inspect} in #{gemspec.gem_dir}" }
32
38
  Solargraph.logger.info stdout_and_stderr_str
@@ -60,5 +66,22 @@ module Solargraph
60
66
  YARD::Registry.load! PinCache.yardoc_path gemspec
61
67
  YARD::Registry.all
62
68
  end
69
+
70
+ # If the BUNDLE_GEMFILE environment variable is set, we need to
71
+ # make sure it's an absolute path, as we'll be changing
72
+ # directories.
73
+ #
74
+ # 'bundle exec' sets an absolute path here, but at least the
75
+ # overcommit gem does not, breaking on-the-fly documention with a
76
+ # spawned yardoc command from our current bundle
77
+ #
78
+ # @return [Hash{String => String}] a hash of environment variables to override
79
+ def current_bundle_env_tweaks
80
+ tweaks = {}
81
+ if ENV['BUNDLE_GEMFILE'] && !ENV['BUNDLE_GEMFILE'].empty?
82
+ tweaks['BUNDLE_GEMFILE'] = File.expand_path(ENV['BUNDLE_GEMFILE'])
83
+ end
84
+ tweaks
85
+ end
63
86
  end
64
87
  end