solargraph 0.59.0.dev.1 → 0.59.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 (175) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/linting.yml +3 -1
  3. data/.github/workflows/plugins.yml +12 -3
  4. data/.github/workflows/rspec.yml +9 -54
  5. data/.github/workflows/typecheck.yml +2 -1
  6. data/.gitignore +1 -0
  7. data/.rubocop.yml +38 -6
  8. data/.rubocop_todo.yml +40 -931
  9. data/CHANGELOG.md +22 -1
  10. data/Gemfile +3 -1
  11. data/Rakefile +25 -23
  12. data/bin/solargraph +2 -1
  13. data/lib/solargraph/api_map/constants.rb +0 -1
  14. data/lib/solargraph/api_map/index.rb +11 -11
  15. data/lib/solargraph/api_map/source_to_yard.rb +9 -8
  16. data/lib/solargraph/api_map/store.rb +28 -20
  17. data/lib/solargraph/api_map.rb +70 -41
  18. data/lib/solargraph/bench.rb +44 -45
  19. data/lib/solargraph/complex_type/type_methods.rb +14 -16
  20. data/lib/solargraph/complex_type/unique_type.rb +56 -47
  21. data/lib/solargraph/complex_type.rb +70 -62
  22. data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -61
  23. data/lib/solargraph/convention/data_definition/data_definition_node.rb +4 -4
  24. data/lib/solargraph/convention/data_definition.rb +1 -1
  25. data/lib/solargraph/convention/gemfile.rb +15 -15
  26. data/lib/solargraph/convention/gemspec.rb +23 -23
  27. data/lib/solargraph/convention/rakefile.rb +17 -17
  28. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +1 -1
  29. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +3 -3
  30. data/lib/solargraph/convention/struct_definition.rb +3 -3
  31. data/lib/solargraph/convention.rb +78 -78
  32. data/lib/solargraph/converters/dd.rb +19 -17
  33. data/lib/solargraph/converters/dl.rb +17 -15
  34. data/lib/solargraph/converters/dt.rb +17 -15
  35. data/lib/solargraph/converters/misc.rb +3 -1
  36. data/lib/solargraph/diagnostics/rubocop.rb +10 -10
  37. data/lib/solargraph/diagnostics/rubocop_helpers.rb +3 -3
  38. data/lib/solargraph/diagnostics/type_check.rb +10 -10
  39. data/lib/solargraph/diagnostics/update_errors.rb +37 -41
  40. data/lib/solargraph/doc_map.rb +370 -132
  41. data/lib/solargraph/equality.rb +3 -3
  42. data/lib/solargraph/gem_pins.rb +19 -18
  43. data/lib/solargraph/language_server/error_codes.rb +20 -20
  44. data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
  45. data/lib/solargraph/language_server/host/dispatch.rb +2 -3
  46. data/lib/solargraph/language_server/host/message_worker.rb +2 -2
  47. data/lib/solargraph/language_server/host/sources.rb +1 -1
  48. data/lib/solargraph/language_server/host.rb +24 -21
  49. data/lib/solargraph/language_server/message/base.rb +97 -97
  50. data/lib/solargraph/language_server/message/client/register_capability.rb +13 -15
  51. data/lib/solargraph/language_server/message/completion_item/resolve.rb +58 -60
  52. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +10 -11
  53. data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
  54. data/lib/solargraph/language_server/message/extended/download_core.rb +20 -19
  55. data/lib/solargraph/language_server/message/extended/search.rb +20 -20
  56. data/lib/solargraph/language_server/message/initialize.rb +197 -191
  57. data/lib/solargraph/language_server/message/text_document/completion.rb +8 -8
  58. data/lib/solargraph/language_server/message/text_document/definition.rb +41 -34
  59. data/lib/solargraph/language_server/message/text_document/document_highlight.rb +23 -16
  60. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +29 -21
  61. data/lib/solargraph/language_server/message/text_document/formatting.rb +6 -6
  62. data/lib/solargraph/language_server/message/text_document/hover.rb +3 -5
  63. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +18 -11
  64. data/lib/solargraph/language_server/message/text_document/references.rb +23 -16
  65. data/lib/solargraph/language_server/message/text_document/rename.rb +26 -19
  66. data/lib/solargraph/language_server/message/text_document/signature_help.rb +2 -2
  67. data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -19
  68. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +41 -35
  69. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +48 -40
  70. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +32 -26
  71. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +27 -19
  72. data/lib/solargraph/language_server/message.rb +94 -94
  73. data/lib/solargraph/language_server/request.rb +29 -27
  74. data/lib/solargraph/language_server/transport/data_reader.rb +72 -74
  75. data/lib/solargraph/language_server/uri_helpers.rb +49 -49
  76. data/lib/solargraph/library.rb +68 -95
  77. data/lib/solargraph/location.rb +10 -12
  78. data/lib/solargraph/logging.rb +4 -6
  79. data/lib/solargraph/page.rb +92 -92
  80. data/lib/solargraph/parser/comment_ripper.rb +12 -4
  81. data/lib/solargraph/parser/flow_sensitive_typing.rb +32 -44
  82. data/lib/solargraph/parser/node_processor/base.rb +4 -4
  83. data/lib/solargraph/parser/node_processor.rb +1 -1
  84. data/lib/solargraph/parser/parser_gem/class_methods.rb +4 -6
  85. data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -19
  86. data/lib/solargraph/parser/parser_gem/node_chainer.rb +20 -20
  87. data/lib/solargraph/parser/parser_gem/node_methods.rb +66 -65
  88. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +12 -12
  89. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +1 -2
  90. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +3 -3
  91. data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +38 -37
  92. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +3 -3
  93. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +2 -1
  94. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +1 -1
  95. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +3 -5
  96. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +118 -112
  97. data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -29
  98. data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +1 -1
  99. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +1 -1
  100. data/lib/solargraph/parser/parser_gem.rb +14 -12
  101. data/lib/solargraph/parser/snippet.rb +2 -0
  102. data/lib/solargraph/parser.rb +25 -23
  103. data/lib/solargraph/pin/base.rb +76 -64
  104. data/lib/solargraph/pin/base_variable.rb +28 -71
  105. data/lib/solargraph/pin/block.rb +3 -2
  106. data/lib/solargraph/pin/breakable.rb +2 -0
  107. data/lib/solargraph/pin/callable.rb +23 -26
  108. data/lib/solargraph/pin/closure.rb +5 -4
  109. data/lib/solargraph/pin/common.rb +5 -2
  110. data/lib/solargraph/pin/compound_statement.rb +3 -3
  111. data/lib/solargraph/pin/constant.rb +43 -45
  112. data/lib/solargraph/pin/conversions.rb +9 -4
  113. data/lib/solargraph/pin/delegated_method.rb +4 -4
  114. data/lib/solargraph/pin/documenting.rb +3 -2
  115. data/lib/solargraph/pin/local_variable.rb +4 -4
  116. data/lib/solargraph/pin/method.rb +74 -70
  117. data/lib/solargraph/pin/namespace.rb +13 -12
  118. data/lib/solargraph/pin/parameter.rb +28 -27
  119. data/lib/solargraph/pin/proxy_type.rb +2 -0
  120. data/lib/solargraph/pin/reference/type_alias.rb +16 -0
  121. data/lib/solargraph/pin/reference.rb +18 -0
  122. data/lib/solargraph/pin/search.rb +2 -2
  123. data/lib/solargraph/pin/signature.rb +9 -14
  124. data/lib/solargraph/pin/symbol.rb +1 -0
  125. data/lib/solargraph/pin/until.rb +1 -3
  126. data/lib/solargraph/pin/while.rb +1 -3
  127. data/lib/solargraph/pin_cache.rb +71 -488
  128. data/lib/solargraph/position.rb +38 -17
  129. data/lib/solargraph/range.rb +10 -9
  130. data/lib/solargraph/rbs_map/conversions.rb +327 -221
  131. data/lib/solargraph/rbs_map/core_fills.rb +91 -84
  132. data/lib/solargraph/rbs_map/stdlib_map.rb +0 -1
  133. data/lib/solargraph/rbs_map.rb +5 -15
  134. data/lib/solargraph/server_methods.rb +16 -16
  135. data/lib/solargraph/shell.rb +224 -66
  136. data/lib/solargraph/source/chain/array.rb +39 -37
  137. data/lib/solargraph/source/chain/call.rb +49 -44
  138. data/lib/solargraph/source/chain/class_variable.rb +13 -13
  139. data/lib/solargraph/source/chain/constant.rb +3 -1
  140. data/lib/solargraph/source/chain/global_variable.rb +13 -13
  141. data/lib/solargraph/source/chain/hash.rb +8 -6
  142. data/lib/solargraph/source/chain/if.rb +11 -10
  143. data/lib/solargraph/source/chain/instance_variable.rb +3 -1
  144. data/lib/solargraph/source/chain/link.rb +99 -109
  145. data/lib/solargraph/source/chain/literal.rb +4 -6
  146. data/lib/solargraph/source/chain/or.rb +2 -4
  147. data/lib/solargraph/source/chain/q_call.rb +13 -11
  148. data/lib/solargraph/source/chain/variable.rb +15 -13
  149. data/lib/solargraph/source/chain/z_super.rb +28 -30
  150. data/lib/solargraph/source/chain.rb +26 -16
  151. data/lib/solargraph/source/change.rb +3 -3
  152. data/lib/solargraph/source/cursor.rb +18 -18
  153. data/lib/solargraph/source/encoding_fixes.rb +6 -7
  154. data/lib/solargraph/source/source_chainer.rb +46 -32
  155. data/lib/solargraph/source/updater.rb +1 -1
  156. data/lib/solargraph/source.rb +27 -29
  157. data/lib/solargraph/source_map/clip.rb +38 -30
  158. data/lib/solargraph/source_map/mapper.rb +51 -47
  159. data/lib/solargraph/source_map.rb +8 -4
  160. data/lib/solargraph/type_checker/rules.rb +8 -8
  161. data/lib/solargraph/type_checker.rb +95 -102
  162. data/lib/solargraph/version.rb +1 -1
  163. data/lib/solargraph/workspace/config.rb +11 -10
  164. data/lib/solargraph/workspace/gemspecs.rb +3 -3
  165. data/lib/solargraph/workspace.rb +45 -165
  166. data/lib/solargraph/yard_map/helpers.rb +6 -2
  167. data/lib/solargraph/yard_map/mapper/to_method.rb +8 -6
  168. data/lib/solargraph/yard_map/mapper/to_namespace.rb +1 -1
  169. data/lib/solargraph/yard_map/mapper.rb +12 -12
  170. data/lib/solargraph/yard_map.rb +17 -18
  171. data/lib/solargraph/yard_tags.rb +20 -20
  172. data/lib/solargraph/yardoc.rb +26 -33
  173. data/lib/solargraph.rb +7 -5
  174. data/solargraph.gemspec +36 -35
  175. metadata +33 -38
data/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
+ ## 0.59.0 - May 13, 2026
2
+ - Ensure pathname is required for rbs in shell caching processes (#1183)
3
+ - Pre-release branch 2026-01-12 (#1152)
4
+ - 2026-01-27 dev branch (#1165)
5
+ - Position linting (#1179)
6
+ - Revert YARD and RBS pin caching (#1180)
7
+ - Ensure pathname is required for rbs in shell caching processes (#1183)
8
+ - Limit default include glob to current directory (#1184)
9
+ - Require Ruby >= 3.1.0
10
+ - Require RBS >= 3.10.0
11
+ - Stub combine_same_type_arity_signatures (#1186)
12
+
13
+ ## 0.58.3 - March 9, 2026
14
+ - Ignore workspace dependencies in cache processes (#1174)
15
+
16
+ ## 0.58.2 - January 19, 2026
17
+ - Avoid rbs pollution (#1146)
18
+ - Fix 'solargraph pin --references ClassName' private method call (#1150)
19
+ - Improve memory efficiency of Position class (#1054)
20
+ - Raise InvalidOffsetError for offsets > text (#1155)
21
+
1
22
  ## 0.58.1 - January 2, 2026
2
- - Normalize line endings to LF (#1142)
23
+ - Normalize line endings to LF (#1142)
3
24
 
4
25
  ## 0.58.0 - January 1, 2026
5
26
  - Faster constant resolution (#1083)
data/Gemfile CHANGED
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  gemspec name: 'solargraph'
4
6
 
5
7
  # Local gemfile for development tools, etc.
6
- local_gemfile = File.expand_path(".Gemfile", __dir__)
8
+ local_gemfile = File.expand_path('.Gemfile', __dir__)
7
9
  instance_eval File.read local_gemfile if File.exist? local_gemfile
data/Rakefile CHANGED
@@ -1,42 +1,44 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rake'
2
4
  require 'bundler/gem_tasks'
3
5
  require 'fileutils'
4
6
  require 'open3'
5
7
 
6
- desc "Open a Pry session preloaded with this library"
8
+ desc 'Open a Pry session preloaded with this library'
7
9
  task :console do
8
- sh "pry -I lib -r solargraph.rb"
10
+ sh 'pry -I lib -r solargraph.rb'
9
11
  end
10
12
 
11
- desc "Run the type checker"
13
+ desc 'Run the type checker'
12
14
  task typecheck: [:typecheck_strong]
13
15
 
14
- desc "Run the type checker at typed level - return code issues provable without annotations being correct"
16
+ desc 'Run the type checker at typed level - return code issues provable without annotations being correct'
15
17
  task :typecheck_typed do
16
- sh "SOLARGRAPH_ASSERTS=on bundle exec solargraph typecheck --level typed"
18
+ sh 'SOLARGRAPH_ASSERTS=on bundle exec solargraph typecheck --level typed'
17
19
  end
18
20
 
19
- desc "Run the type checker at strict level - report issues using type annotations"
21
+ desc 'Run the type checker at strict level - report issues using type annotations'
20
22
  task :typecheck_strict do
21
- sh "SOLARGRAPH_ASSERTS=on bundle exec solargraph typecheck --level strict"
23
+ sh 'SOLARGRAPH_ASSERTS=on bundle exec solargraph typecheck --level strict'
22
24
  end
23
25
 
24
- desc "Run the type checker at strong level - enforce that type annotations exist"
26
+ desc 'Run the type checker at strong level - enforce that type annotations exist'
25
27
  task :typecheck_strong do
26
- sh "SOLARGRAPH_ASSERTS=on bundle exec solargraph typecheck --level strong"
28
+ sh 'SOLARGRAPH_ASSERTS=on bundle exec solargraph typecheck --level strong'
27
29
  end
28
30
 
29
- desc "Run the type checker at alpha level - run high-false-alarm checks"
31
+ desc 'Run the type checker at alpha level - run high-false-alarm checks'
30
32
  task :typecheck_alpha do
31
- sh "SOLARGRAPH_ASSERTS=on bundle exec solargraph typecheck --level alpha"
33
+ sh 'SOLARGRAPH_ASSERTS=on bundle exec solargraph typecheck --level alpha'
32
34
  end
33
35
 
34
- desc "Run RSpec tests, starting with the ones that failed last time"
36
+ desc 'Run RSpec tests, starting with the ones that failed last time'
35
37
  task spec: %i[spec_failed undercover_no_fail full_spec] do
36
38
  undercover
37
39
  end
38
40
 
39
- desc "Run all RSpec tests"
41
+ desc 'Run all RSpec tests'
40
42
  task :full_spec do
41
43
  warn 'starting spec'
42
44
  sh 'TEST_COVERAGE_COMMAND_NAME=full-new bundle exec rspec' # --profile'
@@ -66,17 +68,17 @@ rescue StandardError => e
66
68
  # @sg-ignore Need to add nil check here
67
69
  warn "Backtrace:\n#{e.backtrace.join("\n")}"
68
70
  warn "output: #{output}"
69
- puts "Flushing"
71
+ puts 'Flushing'
70
72
  $stdout.flush
71
73
  raise
72
74
  end
73
75
 
74
- desc "Check PR coverage"
76
+ desc 'Check PR coverage'
75
77
  task :undercover do
76
- raise "Undercover failed" unless undercover.success?
78
+ raise 'Undercover failed' unless undercover.success?
77
79
  end
78
80
 
79
- desc "Branch-focused fast-feedback quality/spec/coverage checks"
81
+ desc 'Branch-focused fast-feedback quality/spec/coverage checks'
80
82
  task test: %i[overcommit spec typecheck] do
81
83
  # do these in order
82
84
  Rake::Task['typecheck_strict'].invoke
@@ -84,18 +86,18 @@ task test: %i[overcommit spec typecheck] do
84
86
  Rake::Task['typecheck_alpha'].invoke
85
87
  end
86
88
 
87
- desc "Re-run failed specs. Add --fail-fast in your .rspec-local file if desired."
89
+ desc 'Re-run failed specs. Add --fail-fast in your .rspec-local file if desired.'
88
90
  task :spec_failed do
89
91
  # allow user to check out any persistent failures while looking for
90
92
  # more in the whole test suite
91
93
  sh 'TEST_COVERAGE_COMMAND_NAME=next-failure bundle exec rspec --only-failures || true'
92
94
  end
93
95
 
94
- desc "Run undercover and show output without failing the task if it fails"
96
+ desc 'Run undercover and show output without failing the task if it fails'
95
97
  task :undercover_no_fail do
96
98
  undercover
97
99
  rescue StandardError
98
- puts "Undercover failed, but continuing with other tasks."
100
+ puts 'Undercover failed, but continuing with other tasks.'
99
101
  end
100
102
 
101
103
  # @return [void]
@@ -104,7 +106,7 @@ def simplecov_collate
104
106
  require 'simplecov-lcov'
105
107
  require 'undercover/simplecov_formatter'
106
108
 
107
- SimpleCov.collate(Dir["coverage/{next-failure,full,ad-hoc}/.resultset.json"]) do
109
+ SimpleCov.collate(Dir['coverage/{next-failure,full,ad-hoc}/.resultset.json']) do
108
110
  cname = 'combined'
109
111
  command_name cname
110
112
  new_dir = File.join('coverage', cname)
@@ -119,7 +121,7 @@ def simplecov_collate
119
121
  ])
120
122
  SimpleCov::Formatter::LcovFormatter.config.report_with_single_file = true
121
123
  end
122
- puts "Simplecov collated results into coverage/combined/.resultset.json"
124
+ puts 'Simplecov collated results into coverage/combined/.resultset.json'
123
125
  rescue StandardError => e
124
126
  puts "Simplecov collate failed: #{e.message}"
125
127
  ensure
@@ -131,7 +133,7 @@ task :simplecov_collate do
131
133
  simplecov_collate
132
134
  end
133
135
 
134
- desc "Show quality checks on this development branch so far, including any staged files"
136
+ desc 'Show quality checks on this development branch so far, including any staged files'
135
137
  task :overcommit do
136
138
  # OVERCOMMIT_DEBUG=1 will show more detail
137
139
  sh 'SOLARGRAPH_ASSERTS=on bundle exec overcommit --run --diff origin/master'
data/bin/solargraph CHANGED
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  # turn off warning diagnostics from Ruby
4
- $VERBOSE=nil
5
+ $VERBOSE = nil
5
6
 
6
7
  require 'solargraph'
7
8
 
@@ -279,7 +279,6 @@ module Solargraph
279
279
  sc_ref = store.get_superclass(fqns)
280
280
  if sc_ref
281
281
  fqsc = dereference(sc_ref)
282
- # @sg-ignore Need to add nil check here
283
282
  result.concat inner_get_constants(fqsc, [:public], skip) unless %w[Object BasicObject].include?(fqsc)
284
283
  end
285
284
  result
@@ -36,6 +36,11 @@ module Solargraph
36
36
  @path_pin_hash ||= Hash.new { |h, k| h[k] = [] }
37
37
  end
38
38
 
39
+ # @return [Hash{String => ComplexType}]
40
+ def alias_hash
41
+ @alias_hash ||= {}
42
+ end
43
+
39
44
  # @generic T
40
45
  # @param klass [Class<generic<T>>]
41
46
  # @return [Set<generic<T>>]
@@ -118,21 +123,22 @@ module Solargraph
118
123
  # @param k [String]
119
124
  # @param v [Set<Pin::Base>]
120
125
  set.classify(&:class)
121
- .map { |k, v| pin_class_hash[k].concat v.to_a }
126
+ .map { |k, v| pin_class_hash[k].concat v.to_a }
122
127
  # @param k [String]
123
128
  # @param v [Set<Pin::Namespace>]
124
129
  set.classify(&:namespace)
125
- .map { |k, v| namespace_hash[k].concat v.to_a }
130
+ .map { |k, v| namespace_hash[k].concat v.to_a }
126
131
  # @param k [String]
127
132
  # @param v [Set<Pin::Base>]
128
133
  set.classify(&:path)
129
- .map { |k, v| path_pin_hash[k].concat v.to_a }
134
+ .map { |k, v| path_pin_hash[k].concat v.to_a }
130
135
  @namespaces = path_pin_hash.keys.compact.to_set
131
136
  map_references Pin::Reference::Include, include_references
132
137
  map_references Pin::Reference::Prepend, prepend_references
133
138
  map_references Pin::Reference::Extend, extend_references
134
139
  map_references Pin::Reference::Superclass, superclass_references
135
140
  map_overrides
141
+ pins_by_class(Pin::Reference::TypeAlias).each { |pin| alias_hash[pin.name] = pin.return_type }
136
142
  self
137
143
  end
138
144
 
@@ -157,20 +163,14 @@ module Solargraph
157
163
  pins = path_pin_hash[ovr.name]
158
164
  logger.debug { "ApiMap::Index#map_overrides: pins for path=#{ovr.name}: #{pins}" }
159
165
  pins.each do |pin|
160
- new_pin = if pin.path.end_with?('#initialize')
161
- path_pin_hash[pin.path.sub(/#initialize/, '.new')].first
162
- end
166
+ new_pin = (path_pin_hash[pin.path.sub('#initialize', '.new')].first if pin.path.end_with?('#initialize'))
163
167
  (ovr.tags.map(&:tag_name) + ovr.delete).uniq.each do |tag|
164
168
  # @sg-ignore Wrong argument type for
165
169
  # YARD::Docstring#delete_tags: name expected String,
166
170
  # received String, Symbol - delete_tags is ok with a
167
171
  # _ToS, but we should fix anyway
168
172
  pin.docstring.delete_tags tag
169
- # @sg-ignore Wrong argument type for
170
- # YARD::Docstring#delete_tags: name expected String,
171
- # received String, Symbol - delete_tags is ok with a
172
- # _ToS, but we should fix anyway
173
- new_pin.docstring.delete_tags tag if new_pin
173
+ new_pin&.docstring&.delete_tags tag
174
174
  end
175
175
  ovr.tags.each do |tag|
176
176
  pin.docstring.add_tag(tag)
@@ -3,7 +3,6 @@
3
3
  module Solargraph
4
4
  class ApiMap
5
5
  module SourceToYard
6
-
7
6
  # Get the YARD CodeObject at the specified path.
8
7
  #
9
8
  # @sg-ignore Declared return type generic<T>, nil does not match
@@ -15,7 +14,7 @@ module Solargraph
15
14
  # @return [generic<T>, nil]
16
15
  def code_object_at path, klass = YARD::CodeObjects::Base
17
16
  obj = code_object_map[path]
18
- obj if obj&.is_a?(klass)
17
+ obj if obj.is_a?(klass)
19
18
  end
20
19
 
21
20
  # @return [Array<String>]
@@ -36,20 +35,20 @@ module Solargraph
36
35
  end
37
36
  if pin.type == :class
38
37
  # @param obj [YARD::CodeObjects::RootObject]
39
- code_object_map[pin.path] ||= YARD::CodeObjects::ClassObject.new(root_code_object, pin.path) { |obj|
38
+ code_object_map[pin.path] ||= YARD::CodeObjects::ClassObject.new(root_code_object, pin.path) do |obj|
40
39
  # @sg-ignore flow sensitive typing needs to handle attrs
41
40
  next if pin.location.nil? || pin.location.filename.nil?
42
41
  # @sg-ignore flow sensitive typing needs to handle attrs
43
42
  obj.add_file(pin.location.filename, pin.location.range.start.line, !pin.comments.empty?)
44
- }
43
+ end
45
44
  else
46
45
  # @param obj [YARD::CodeObjects::RootObject]
47
- code_object_map[pin.path] ||= YARD::CodeObjects::ModuleObject.new(root_code_object, pin.path) { |obj|
46
+ code_object_map[pin.path] ||= YARD::CodeObjects::ModuleObject.new(root_code_object, pin.path) do |obj|
48
47
  # @sg-ignore flow sensitive typing needs to handle attrs
49
48
  next if pin.location.nil? || pin.location.filename.nil?
50
49
  # @sg-ignore flow sensitive typing needs to handle attrs
51
50
  obj.add_file(pin.location.filename, pin.location.range.start.line, !pin.comments.empty?)
52
- }
51
+ end
53
52
  end
54
53
  code_object_map[pin.path].docstring = pin.docstring
55
54
  store.get_includes(pin.path).each do |ref|
@@ -75,12 +74,14 @@ module Solargraph
75
74
 
76
75
  # @sg-ignore Need to add nil check here
77
76
  # @param obj [YARD::CodeObjects::RootObject]
78
- code_object_map[pin.path] ||= YARD::CodeObjects::MethodObject.new(code_object_at(pin.namespace, YARD::CodeObjects::NamespaceObject), pin.name, pin.scope) { |obj|
77
+ code_object_map[pin.path] ||= YARD::CodeObjects::MethodObject.new(
78
+ code_object_at(pin.namespace, YARD::CodeObjects::NamespaceObject), pin.name, pin.scope
79
+ ) do |obj|
79
80
  # @sg-ignore flow sensitive typing needs to handle attrs
80
81
  next if pin.location.nil? || pin.location.filename.nil?
81
82
  # @sg-ignore flow sensitive typing needs to handle attrs
82
83
  obj.add_file pin.location.filename, pin.location.range.start.line
83
- }
84
+ end
84
85
  method_object = code_object_at(pin.path, YARD::CodeObjects::MethodObject)
85
86
  # @sg-ignore Need to add nil check here
86
87
  method_object.docstring = pin.docstring
@@ -32,16 +32,16 @@ module Solargraph
32
32
 
33
33
  # @todo Fix this map
34
34
  @fqns_pins_map = nil
35
- return catalog(pinsets) if changed == 0
35
+ return catalog(pinsets) if changed.zero?
36
36
 
37
37
  # @sg-ignore Need to add nil check here
38
38
  pinsets[changed..].each_with_index do |pins, idx|
39
39
  @pinsets[changed + idx] = pins
40
40
  @indexes[changed + idx] = if pins.empty?
41
- @indexes[changed + idx - 1]
42
- else
43
- @indexes[changed + idx - 1].merge(pins)
44
- end
41
+ @indexes[changed + idx - 1]
42
+ else
43
+ @indexes[changed + idx - 1].merge(pins)
44
+ end
45
45
  end
46
46
  constants.clear
47
47
  cached_qualify_superclass.clear
@@ -60,10 +60,10 @@ module Solargraph
60
60
  # @param visibility [Array<Symbol>]
61
61
  # @return [Enumerable<Solargraph::Pin::Namespace, Solargraph::Pin::Constant>]
62
62
  def get_constants fqns, visibility = [:public]
63
- namespace_children(fqns).select { |pin|
63
+ namespace_children(fqns).select do |pin|
64
64
  # @sg-ignore flow sensitive typing not smart enough to handle this case
65
65
  !pin.name.empty? && (pin.is_a?(Pin::Namespace) || pin.is_a?(Pin::Constant)) && visibility.include?(pin.visibility)
66
- }
66
+ end
67
67
  end
68
68
 
69
69
  # @param fqns [String]
@@ -77,8 +77,10 @@ module Solargraph
77
77
  GemPins.combine_method_pins_by_path(all_pins)
78
78
  end
79
79
 
80
- BOOLEAN_SUPERCLASS_PIN = Pin::Reference::Superclass.new(name: 'Boolean', closure: Pin::ROOT_PIN, source: :solargraph)
81
- OBJECT_SUPERCLASS_PIN = Pin::Reference::Superclass.new(name: 'Object', closure: Pin::ROOT_PIN, source: :solargraph)
80
+ BOOLEAN_SUPERCLASS_PIN = Pin::Reference::Superclass.new(name: 'Boolean', closure: Pin::ROOT_PIN,
81
+ source: :solargraph)
82
+ OBJECT_SUPERCLASS_PIN = Pin::Reference::Superclass.new(name: 'Object', closure: Pin::ROOT_PIN,
83
+ source: :solargraph)
82
84
 
83
85
  # @param fqns [String, nil]
84
86
  # @return [Pin::Reference::Superclass, nil]
@@ -129,17 +131,17 @@ module Solargraph
129
131
  # @param fqns [String, nil]
130
132
  # @param scope [Symbol] :class or :instance
131
133
  # @return [Enumerable<Solargraph::Pin::Base>]
132
- def get_instance_variables(fqns, scope = :instance)
133
- all_instance_variables.select { |pin|
134
+ def get_instance_variables fqns, scope = :instance
135
+ all_instance_variables.select do |pin|
134
136
  pin.binder.namespace == fqns && pin.binder.scope == scope
135
- }
137
+ end
136
138
  end
137
139
 
138
140
  # @param fqns [String]
139
141
  #
140
142
  # @return [Enumerable<Solargraph::Pin::ClassVariable>]
141
- def get_class_variables(fqns)
142
- namespace_children(fqns).select { |pin| pin.is_a?(Pin::ClassVariable)}
143
+ def get_class_variables fqns
144
+ namespace_children(fqns).select { |pin| pin.is_a?(Pin::ClassVariable) }
143
145
  end
144
146
 
145
147
  # @return [Enumerable<Solargraph::Pin::Base>]
@@ -149,7 +151,7 @@ module Solargraph
149
151
 
150
152
  # @param fqns [String]
151
153
  # @return [Boolean]
152
- def namespace_exists?(fqns)
154
+ def namespace_exists? fqns
153
155
  fqns_pins(fqns).any?
154
156
  end
155
157
 
@@ -165,7 +167,7 @@ module Solargraph
165
167
 
166
168
  # @param fqns [String]
167
169
  # @return [Array<String>]
168
- def domains(fqns)
170
+ def domains fqns
169
171
  result = []
170
172
  fqns_pins(fqns).each do |nspin|
171
173
  result.concat nspin.domains
@@ -178,7 +180,7 @@ module Solargraph
178
180
  @named_macros ||= begin
179
181
  result = {}
180
182
  pins.each do |pin|
181
- pin.macros.select{|m| m.tag.tag_name == 'macro' && !m.tag.text.empty? }.each do |macro|
183
+ pin.macros.select { |m| m.tag.tag_name == 'macro' && !m.tag.text.empty? }.each do |macro|
182
184
  next if macro.tag.name.nil? || macro.tag.name.empty?
183
185
  result[macro.tag.name] = macro
184
186
  end
@@ -217,7 +219,7 @@ module Solargraph
217
219
  # Get all ancestors (superclasses, includes, prepends, extends) for a namespace
218
220
  # @param fqns [String] The fully qualified namespace
219
221
  # @return [Array<String>] Array of ancestor namespaces including the original
220
- def get_ancestors(fqns)
222
+ def get_ancestors fqns
221
223
  return [] if fqns.nil? || fqns.empty?
222
224
 
223
225
  ancestors = [fqns]
@@ -260,7 +262,7 @@ module Solargraph
260
262
  # @param fqns [String]
261
263
  #
262
264
  # @return [Array<Solargraph::Pin::Reference>]
263
- def get_ancestor_references(fqns)
265
+ def get_ancestor_references fqns
264
266
  (get_prepends(fqns) + get_includes(fqns) + [get_superclass(fqns)]).compact
265
267
  end
266
268
 
@@ -269,6 +271,12 @@ module Solargraph
269
271
  @constants ||= Constants.new(self)
270
272
  end
271
273
 
274
+ # @param name [String]
275
+ # @return [ComplexType, nil]
276
+ def unalias name
277
+ index.alias_hash[name]
278
+ end
279
+
272
280
  private
273
281
 
274
282
  # @return [Index]
@@ -350,7 +358,7 @@ module Solargraph
350
358
 
351
359
  # @param fqns [String]
352
360
  # @return [Pin::Reference::Superclass, nil]
353
- def try_special_superclasses(fqns)
361
+ def try_special_superclasses fqns
354
362
  return OBJECT_SUPERCLASS_PIN if fqns == 'Boolean'
355
363
  return OBJECT_SUPERCLASS_PIN if !%w[BasicObject Object].include?(fqns) && namespace_exists?(fqns)
356
364