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.
- checksums.yaml +4 -4
- data/.github/workflows/linting.yml +3 -1
- data/.github/workflows/plugins.yml +12 -3
- data/.github/workflows/rspec.yml +9 -54
- data/.github/workflows/typecheck.yml +2 -1
- data/.gitignore +1 -0
- data/.rubocop.yml +38 -6
- data/.rubocop_todo.yml +40 -931
- data/CHANGELOG.md +22 -1
- data/Gemfile +3 -1
- data/Rakefile +25 -23
- data/bin/solargraph +2 -1
- data/lib/solargraph/api_map/constants.rb +0 -1
- data/lib/solargraph/api_map/index.rb +11 -11
- data/lib/solargraph/api_map/source_to_yard.rb +9 -8
- data/lib/solargraph/api_map/store.rb +28 -20
- data/lib/solargraph/api_map.rb +70 -41
- data/lib/solargraph/bench.rb +44 -45
- data/lib/solargraph/complex_type/type_methods.rb +14 -16
- data/lib/solargraph/complex_type/unique_type.rb +56 -47
- data/lib/solargraph/complex_type.rb +70 -62
- data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -61
- data/lib/solargraph/convention/data_definition/data_definition_node.rb +4 -4
- data/lib/solargraph/convention/data_definition.rb +1 -1
- data/lib/solargraph/convention/gemfile.rb +15 -15
- data/lib/solargraph/convention/gemspec.rb +23 -23
- data/lib/solargraph/convention/rakefile.rb +17 -17
- data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +1 -1
- data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +3 -3
- data/lib/solargraph/convention/struct_definition.rb +3 -3
- data/lib/solargraph/convention.rb +78 -78
- data/lib/solargraph/converters/dd.rb +19 -17
- data/lib/solargraph/converters/dl.rb +17 -15
- data/lib/solargraph/converters/dt.rb +17 -15
- data/lib/solargraph/converters/misc.rb +3 -1
- data/lib/solargraph/diagnostics/rubocop.rb +10 -10
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +3 -3
- data/lib/solargraph/diagnostics/type_check.rb +10 -10
- data/lib/solargraph/diagnostics/update_errors.rb +37 -41
- data/lib/solargraph/doc_map.rb +370 -132
- data/lib/solargraph/equality.rb +3 -3
- data/lib/solargraph/gem_pins.rb +19 -18
- data/lib/solargraph/language_server/error_codes.rb +20 -20
- data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
- data/lib/solargraph/language_server/host/dispatch.rb +2 -3
- data/lib/solargraph/language_server/host/message_worker.rb +2 -2
- data/lib/solargraph/language_server/host/sources.rb +1 -1
- data/lib/solargraph/language_server/host.rb +24 -21
- data/lib/solargraph/language_server/message/base.rb +97 -97
- data/lib/solargraph/language_server/message/client/register_capability.rb +13 -15
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +58 -60
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +10 -11
- data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
- data/lib/solargraph/language_server/message/extended/download_core.rb +20 -19
- data/lib/solargraph/language_server/message/extended/search.rb +20 -20
- data/lib/solargraph/language_server/message/initialize.rb +197 -191
- data/lib/solargraph/language_server/message/text_document/completion.rb +8 -8
- data/lib/solargraph/language_server/message/text_document/definition.rb +41 -34
- data/lib/solargraph/language_server/message/text_document/document_highlight.rb +23 -16
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +29 -21
- data/lib/solargraph/language_server/message/text_document/formatting.rb +6 -6
- data/lib/solargraph/language_server/message/text_document/hover.rb +3 -5
- data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +18 -11
- data/lib/solargraph/language_server/message/text_document/references.rb +23 -16
- data/lib/solargraph/language_server/message/text_document/rename.rb +26 -19
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +2 -2
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -19
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +41 -35
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +48 -40
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +32 -26
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +27 -19
- data/lib/solargraph/language_server/message.rb +94 -94
- data/lib/solargraph/language_server/request.rb +29 -27
- data/lib/solargraph/language_server/transport/data_reader.rb +72 -74
- data/lib/solargraph/language_server/uri_helpers.rb +49 -49
- data/lib/solargraph/library.rb +68 -95
- data/lib/solargraph/location.rb +10 -12
- data/lib/solargraph/logging.rb +4 -6
- data/lib/solargraph/page.rb +92 -92
- data/lib/solargraph/parser/comment_ripper.rb +12 -4
- data/lib/solargraph/parser/flow_sensitive_typing.rb +32 -44
- data/lib/solargraph/parser/node_processor/base.rb +4 -4
- data/lib/solargraph/parser/node_processor.rb +1 -1
- data/lib/solargraph/parser/parser_gem/class_methods.rb +4 -6
- data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -19
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +20 -20
- data/lib/solargraph/parser/parser_gem/node_methods.rb +66 -65
- data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +12 -12
- data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +1 -2
- data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +3 -3
- data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +38 -37
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +3 -3
- data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +1 -1
- data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +3 -5
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +118 -112
- data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -29
- data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +1 -1
- data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +1 -1
- data/lib/solargraph/parser/parser_gem.rb +14 -12
- data/lib/solargraph/parser/snippet.rb +2 -0
- data/lib/solargraph/parser.rb +25 -23
- data/lib/solargraph/pin/base.rb +76 -64
- data/lib/solargraph/pin/base_variable.rb +28 -71
- data/lib/solargraph/pin/block.rb +3 -2
- data/lib/solargraph/pin/breakable.rb +2 -0
- data/lib/solargraph/pin/callable.rb +23 -26
- data/lib/solargraph/pin/closure.rb +5 -4
- data/lib/solargraph/pin/common.rb +5 -2
- data/lib/solargraph/pin/compound_statement.rb +3 -3
- data/lib/solargraph/pin/constant.rb +43 -45
- data/lib/solargraph/pin/conversions.rb +9 -4
- data/lib/solargraph/pin/delegated_method.rb +4 -4
- data/lib/solargraph/pin/documenting.rb +3 -2
- data/lib/solargraph/pin/local_variable.rb +4 -4
- data/lib/solargraph/pin/method.rb +74 -70
- data/lib/solargraph/pin/namespace.rb +13 -12
- data/lib/solargraph/pin/parameter.rb +28 -27
- data/lib/solargraph/pin/proxy_type.rb +2 -0
- data/lib/solargraph/pin/reference/type_alias.rb +16 -0
- data/lib/solargraph/pin/reference.rb +18 -0
- data/lib/solargraph/pin/search.rb +2 -2
- data/lib/solargraph/pin/signature.rb +9 -14
- data/lib/solargraph/pin/symbol.rb +1 -0
- data/lib/solargraph/pin/until.rb +1 -3
- data/lib/solargraph/pin/while.rb +1 -3
- data/lib/solargraph/pin_cache.rb +71 -488
- data/lib/solargraph/position.rb +38 -17
- data/lib/solargraph/range.rb +10 -9
- data/lib/solargraph/rbs_map/conversions.rb +327 -221
- data/lib/solargraph/rbs_map/core_fills.rb +91 -84
- data/lib/solargraph/rbs_map/stdlib_map.rb +0 -1
- data/lib/solargraph/rbs_map.rb +5 -15
- data/lib/solargraph/server_methods.rb +16 -16
- data/lib/solargraph/shell.rb +224 -66
- data/lib/solargraph/source/chain/array.rb +39 -37
- data/lib/solargraph/source/chain/call.rb +49 -44
- data/lib/solargraph/source/chain/class_variable.rb +13 -13
- data/lib/solargraph/source/chain/constant.rb +3 -1
- data/lib/solargraph/source/chain/global_variable.rb +13 -13
- data/lib/solargraph/source/chain/hash.rb +8 -6
- data/lib/solargraph/source/chain/if.rb +11 -10
- data/lib/solargraph/source/chain/instance_variable.rb +3 -1
- data/lib/solargraph/source/chain/link.rb +99 -109
- data/lib/solargraph/source/chain/literal.rb +4 -6
- data/lib/solargraph/source/chain/or.rb +2 -4
- data/lib/solargraph/source/chain/q_call.rb +13 -11
- data/lib/solargraph/source/chain/variable.rb +15 -13
- data/lib/solargraph/source/chain/z_super.rb +28 -30
- data/lib/solargraph/source/chain.rb +26 -16
- data/lib/solargraph/source/change.rb +3 -3
- data/lib/solargraph/source/cursor.rb +18 -18
- data/lib/solargraph/source/encoding_fixes.rb +6 -7
- data/lib/solargraph/source/source_chainer.rb +46 -32
- data/lib/solargraph/source/updater.rb +1 -1
- data/lib/solargraph/source.rb +27 -29
- data/lib/solargraph/source_map/clip.rb +38 -30
- data/lib/solargraph/source_map/mapper.rb +51 -47
- data/lib/solargraph/source_map.rb +8 -4
- data/lib/solargraph/type_checker/rules.rb +8 -8
- data/lib/solargraph/type_checker.rb +95 -102
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/workspace/config.rb +11 -10
- data/lib/solargraph/workspace/gemspecs.rb +3 -3
- data/lib/solargraph/workspace.rb +45 -165
- data/lib/solargraph/yard_map/helpers.rb +6 -2
- data/lib/solargraph/yard_map/mapper/to_method.rb +8 -6
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +1 -1
- data/lib/solargraph/yard_map/mapper.rb +12 -12
- data/lib/solargraph/yard_map.rb +17 -18
- data/lib/solargraph/yard_tags.rb +20 -20
- data/lib/solargraph/yardoc.rb +26 -33
- data/lib/solargraph.rb +7 -5
- data/solargraph.gemspec +36 -35
- 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
|
-
-
|
|
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(
|
|
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
|
|
8
|
+
desc 'Open a Pry session preloaded with this library'
|
|
7
9
|
task :console do
|
|
8
|
-
sh
|
|
10
|
+
sh 'pry -I lib -r solargraph.rb'
|
|
9
11
|
end
|
|
10
12
|
|
|
11
|
-
desc
|
|
13
|
+
desc 'Run the type checker'
|
|
12
14
|
task typecheck: [:typecheck_strong]
|
|
13
15
|
|
|
14
|
-
desc
|
|
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
|
|
18
|
+
sh 'SOLARGRAPH_ASSERTS=on bundle exec solargraph typecheck --level typed'
|
|
17
19
|
end
|
|
18
20
|
|
|
19
|
-
desc
|
|
21
|
+
desc 'Run the type checker at strict level - report issues using type annotations'
|
|
20
22
|
task :typecheck_strict do
|
|
21
|
-
sh
|
|
23
|
+
sh 'SOLARGRAPH_ASSERTS=on bundle exec solargraph typecheck --level strict'
|
|
22
24
|
end
|
|
23
25
|
|
|
24
|
-
desc
|
|
26
|
+
desc 'Run the type checker at strong level - enforce that type annotations exist'
|
|
25
27
|
task :typecheck_strong do
|
|
26
|
-
sh
|
|
28
|
+
sh 'SOLARGRAPH_ASSERTS=on bundle exec solargraph typecheck --level strong'
|
|
27
29
|
end
|
|
28
30
|
|
|
29
|
-
desc
|
|
31
|
+
desc 'Run the type checker at alpha level - run high-false-alarm checks'
|
|
30
32
|
task :typecheck_alpha do
|
|
31
|
-
sh
|
|
33
|
+
sh 'SOLARGRAPH_ASSERTS=on bundle exec solargraph typecheck --level alpha'
|
|
32
34
|
end
|
|
33
35
|
|
|
34
|
-
desc
|
|
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
|
|
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
|
|
71
|
+
puts 'Flushing'
|
|
70
72
|
$stdout.flush
|
|
71
73
|
raise
|
|
72
74
|
end
|
|
73
75
|
|
|
74
|
-
desc
|
|
76
|
+
desc 'Check PR coverage'
|
|
75
77
|
task :undercover do
|
|
76
|
-
raise
|
|
78
|
+
raise 'Undercover failed' unless undercover.success?
|
|
77
79
|
end
|
|
78
80
|
|
|
79
|
-
desc
|
|
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
|
|
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
|
|
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
|
|
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[
|
|
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
|
|
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
|
|
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
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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)
|
|
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)
|
|
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(
|
|
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
|
|
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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
|
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,
|
|
81
|
-
|
|
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
|
|
133
|
-
all_instance_variables.select
|
|
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
|
|
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?
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|