solargraph 0.54.4 → 0.58.3
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/.gitattributes +2 -0
- data/.github/workflows/linting.yml +127 -0
- data/.github/workflows/plugins.yml +185 -6
- data/.github/workflows/rspec.yml +55 -5
- data/.github/workflows/typecheck.yml +8 -3
- data/.gitignore +8 -0
- data/.overcommit.yml +72 -0
- data/.rspec +1 -0
- data/.rubocop.yml +66 -0
- data/.rubocop_todo.yml +1279 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +143 -0
- data/README.md +20 -6
- data/Rakefile +125 -13
- data/bin/solargraph +3 -0
- data/lib/solargraph/api_map/cache.rb +110 -109
- data/lib/solargraph/api_map/constants.rb +279 -0
- data/lib/solargraph/api_map/index.rb +193 -167
- data/lib/solargraph/api_map/source_to_yard.rb +97 -88
- data/lib/solargraph/api_map/store.rb +384 -241
- data/lib/solargraph/api_map.rb +945 -875
- data/lib/solargraph/bench.rb +45 -28
- data/lib/solargraph/complex_type/type_methods.rb +228 -217
- data/lib/solargraph/complex_type/unique_type.rb +482 -386
- data/lib/solargraph/complex_type.rb +444 -394
- data/lib/solargraph/convention/active_support_concern.rb +111 -0
- data/lib/solargraph/convention/base.rb +20 -3
- data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -0
- data/lib/solargraph/convention/data_definition/data_definition_node.rb +91 -0
- data/lib/solargraph/convention/data_definition.rb +105 -0
- data/lib/solargraph/convention/gemfile.rb +15 -15
- data/lib/solargraph/convention/gemspec.rb +23 -22
- data/lib/solargraph/convention/rakefile.rb +17 -17
- data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +61 -0
- data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +102 -0
- data/lib/solargraph/convention/struct_definition.rb +164 -0
- data/lib/solargraph/convention.rb +78 -47
- data/lib/solargraph/converters/dd.rb +17 -17
- data/lib/solargraph/converters/dl.rb +15 -15
- data/lib/solargraph/converters/dt.rb +15 -15
- data/lib/solargraph/converters/misc.rb +1 -1
- data/lib/solargraph/diagnostics/require_not_found.rb +53 -53
- data/lib/solargraph/diagnostics/rubocop.rb +118 -113
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +68 -66
- data/lib/solargraph/diagnostics/type_check.rb +55 -55
- data/lib/solargraph/diagnostics/update_errors.rb +41 -41
- data/lib/solargraph/doc_map.rb +439 -188
- data/lib/solargraph/environ.rb +9 -2
- data/lib/solargraph/equality.rb +34 -33
- data/lib/solargraph/gem_pins.rb +98 -72
- 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 +130 -128
- data/lib/solargraph/language_server/host/message_worker.rb +112 -106
- data/lib/solargraph/language_server/host/sources.rb +99 -99
- data/lib/solargraph/language_server/host.rb +878 -861
- data/lib/solargraph/language_server/message/base.rb +97 -96
- data/lib/solargraph/language_server/message/client/register_capability.rb +15 -15
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +60 -60
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +114 -112
- data/lib/solargraph/language_server/message/extended/document.rb +23 -20
- data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
- data/lib/solargraph/language_server/message/extended/download_core.rb +19 -19
- data/lib/solargraph/language_server/message/extended/search.rb +20 -20
- data/lib/solargraph/language_server/message/initialize.rb +191 -191
- data/lib/solargraph/language_server/message/text_document/completion.rb +56 -56
- data/lib/solargraph/language_server/message/text_document/definition.rb +40 -38
- data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -16
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +26 -26
- data/lib/solargraph/language_server/message/text_document/formatting.rb +148 -131
- data/lib/solargraph/language_server/message/text_document/hover.rb +58 -58
- data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -11
- data/lib/solargraph/language_server/message/text_document/references.rb +16 -16
- data/lib/solargraph/language_server/message/text_document/rename.rb +19 -19
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +24 -24
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -24
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +35 -35
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +40 -40
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +26 -24
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
- data/lib/solargraph/language_server/message.rb +94 -94
- data/lib/solargraph/language_server/progress.rb +8 -0
- data/lib/solargraph/language_server/request.rb +27 -24
- data/lib/solargraph/language_server/transport/data_reader.rb +74 -74
- data/lib/solargraph/language_server/uri_helpers.rb +49 -49
- data/lib/solargraph/library.rb +683 -662
- data/lib/solargraph/location.rb +82 -58
- data/lib/solargraph/logging.rb +37 -27
- data/lib/solargraph/page.rb +92 -89
- data/lib/solargraph/parser/comment_ripper.rb +69 -56
- data/lib/solargraph/parser/flow_sensitive_typing.rb +255 -0
- data/lib/solargraph/parser/node_processor/base.rb +92 -87
- data/lib/solargraph/parser/node_processor.rb +62 -45
- data/lib/solargraph/parser/parser_gem/class_methods.rb +149 -157
- data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -18
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +166 -164
- data/lib/solargraph/parser/parser_gem/node_methods.rb +486 -495
- data/lib/solargraph/parser/parser_gem/node_processors/alias_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -0
- data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +59 -57
- data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +15 -15
- data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +46 -43
- data/lib/solargraph/parser/parser_gem/node_processors/casgn_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/cvasgn_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +53 -50
- data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +37 -36
- data/lib/solargraph/parser/parser_gem/node_processors/gvasgn_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +23 -0
- data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +40 -38
- data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +29 -28
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +59 -53
- data/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb +8 -7
- data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -0
- data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -16
- data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +38 -36
- data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +52 -42
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +291 -259
- data/lib/solargraph/parser/parser_gem/node_processors/sym_node.rb +3 -1
- data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -0
- data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +29 -0
- data/lib/solargraph/parser/parser_gem/node_processors.rb +70 -56
- data/lib/solargraph/parser/parser_gem.rb +12 -12
- data/lib/solargraph/parser/region.rb +69 -66
- data/lib/solargraph/parser/snippet.rb +17 -15
- data/lib/solargraph/parser.rb +23 -22
- data/lib/solargraph/pin/base.rb +729 -378
- data/lib/solargraph/pin/base_variable.rb +126 -118
- data/lib/solargraph/pin/block.rb +104 -101
- data/lib/solargraph/pin/breakable.rb +9 -0
- data/lib/solargraph/pin/callable.rb +231 -147
- data/lib/solargraph/pin/closure.rb +72 -57
- data/lib/solargraph/pin/common.rb +79 -70
- data/lib/solargraph/pin/constant.rb +45 -43
- data/lib/solargraph/pin/conversions.rb +123 -123
- data/lib/solargraph/pin/delegated_method.rb +120 -101
- data/lib/solargraph/pin/documenting.rb +114 -98
- data/lib/solargraph/pin/instance_variable.rb +34 -34
- data/lib/solargraph/pin/keyword.rb +20 -15
- data/lib/solargraph/pin/local_variable.rb +75 -67
- data/lib/solargraph/pin/method.rb +672 -527
- data/lib/solargraph/pin/method_alias.rb +34 -31
- data/lib/solargraph/pin/namespace.rb +115 -107
- data/lib/solargraph/pin/parameter.rb +275 -212
- data/lib/solargraph/pin/proxy_type.rb +39 -29
- data/lib/solargraph/pin/reference/override.rb +47 -29
- data/lib/solargraph/pin/reference/require.rb +2 -2
- data/lib/solargraph/pin/reference/superclass.rb +15 -10
- data/lib/solargraph/pin/reference.rb +39 -22
- data/lib/solargraph/pin/search.rb +61 -56
- data/lib/solargraph/pin/signature.rb +61 -17
- data/lib/solargraph/pin/singleton.rb +1 -1
- data/lib/solargraph/pin/symbol.rb +53 -47
- data/lib/solargraph/pin/until.rb +18 -0
- data/lib/solargraph/pin/while.rb +18 -0
- data/lib/solargraph/pin.rb +44 -41
- data/lib/solargraph/pin_cache.rb +245 -0
- data/lib/solargraph/position.rb +132 -107
- data/lib/solargraph/range.rb +112 -98
- data/lib/solargraph/rbs_map/conversions.rb +823 -646
- data/lib/solargraph/rbs_map/core_fills.rb +84 -50
- data/lib/solargraph/rbs_map/core_map.rb +58 -28
- data/lib/solargraph/rbs_map/stdlib_map.rb +43 -33
- data/lib/solargraph/rbs_map.rb +163 -93
- data/lib/solargraph/server_methods.rb +16 -16
- data/lib/solargraph/shell.rb +363 -269
- data/lib/solargraph/source/chain/array.rb +37 -33
- data/lib/solargraph/source/chain/block_symbol.rb +1 -1
- data/lib/solargraph/source/chain/block_variable.rb +1 -1
- data/lib/solargraph/source/chain/call.rb +337 -303
- data/lib/solargraph/source/chain/class_variable.rb +13 -13
- data/lib/solargraph/source/chain/constant.rb +26 -89
- data/lib/solargraph/source/chain/global_variable.rb +13 -13
- data/lib/solargraph/source/chain/hash.rb +34 -33
- data/lib/solargraph/source/chain/head.rb +1 -1
- data/lib/solargraph/source/chain/if.rb +28 -28
- data/lib/solargraph/source/chain/instance_variable.rb +13 -13
- data/lib/solargraph/source/chain/link.rb +109 -98
- data/lib/solargraph/source/chain/literal.rb +48 -28
- data/lib/solargraph/source/chain/or.rb +23 -23
- data/lib/solargraph/source/chain/q_call.rb +11 -11
- data/lib/solargraph/source/chain/variable.rb +13 -13
- data/lib/solargraph/source/chain/z_super.rb +30 -30
- data/lib/solargraph/source/chain.rb +291 -252
- data/lib/solargraph/source/change.rb +82 -82
- data/lib/solargraph/source/cursor.rb +166 -167
- data/lib/solargraph/source/encoding_fixes.rb +23 -23
- data/lib/solargraph/source/source_chainer.rb +194 -194
- data/lib/solargraph/source/updater.rb +55 -55
- data/lib/solargraph/source.rb +498 -495
- data/lib/solargraph/source_map/clip.rb +226 -232
- data/lib/solargraph/source_map/data.rb +34 -30
- data/lib/solargraph/source_map/mapper.rb +259 -255
- data/lib/solargraph/source_map.rb +212 -217
- data/lib/solargraph/type_checker/checks.rb +124 -120
- data/lib/solargraph/type_checker/param_def.rb +37 -35
- data/lib/solargraph/type_checker/problem.rb +32 -32
- data/lib/solargraph/type_checker/rules.rb +84 -62
- data/lib/solargraph/type_checker.rb +814 -672
- data/lib/solargraph/version.rb +5 -5
- data/lib/solargraph/views/_method.erb +10 -10
- data/lib/solargraph/views/_namespace.erb +3 -3
- data/lib/solargraph/views/document.erb +10 -10
- data/lib/solargraph/workspace/config.rb +255 -239
- data/lib/solargraph/workspace/require_paths.rb +97 -0
- data/lib/solargraph/workspace.rb +220 -239
- data/lib/solargraph/yard_map/helpers.rb +44 -16
- data/lib/solargraph/yard_map/mapper/to_constant.rb +7 -5
- data/lib/solargraph/yard_map/mapper/to_method.rb +130 -94
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +31 -28
- data/lib/solargraph/yard_map/mapper.rb +79 -78
- data/lib/solargraph/yard_map/to_method.rb +89 -86
- data/lib/solargraph/yard_tags.rb +20 -20
- data/lib/solargraph/yardoc.rb +87 -52
- data/lib/solargraph.rb +105 -72
- data/rbs/fills/bundler/0/bundler.rbs +4271 -0
- data/rbs/fills/open3/0/open3.rbs +172 -0
- data/rbs/fills/rubygems/0/basic_specification.rbs +326 -0
- data/rbs/fills/rubygems/0/errors.rbs +364 -0
- data/rbs/fills/rubygems/0/spec_fetcher.rbs +107 -0
- data/rbs/fills/rubygems/0/specification.rbs +1753 -0
- data/rbs/fills/tuple/tuple.rbs +149 -0
- data/rbs/shims/ast/0/node.rbs +5 -0
- data/rbs/shims/ast/2.4/.rbs_meta.yaml +9 -0
- data/rbs/shims/ast/2.4/ast.rbs +73 -0
- data/rbs/shims/parser/3.2.0.1/builders/default.rbs +195 -0
- data/rbs/shims/parser/3.2.0.1/manifest.yaml +7 -0
- data/rbs/shims/parser/3.2.0.1/parser.rbs +201 -0
- data/rbs/shims/parser/3.2.0.1/polyfill.rbs +4 -0
- data/rbs/shims/thor/1.2.0.1/.rbs_meta.yaml +9 -0
- data/rbs/shims/thor/1.2.0.1/manifest.yaml +7 -0
- data/rbs/shims/thor/1.2.0.1/thor.rbs +17 -0
- data/rbs_collection.yaml +19 -0
- data/solargraph.gemspec +27 -5
- metadata +215 -18
- data/lib/.rubocop.yml +0 -22
- data/lib/solargraph/cache.rb +0 -77
- data/lib/solargraph/parser/node_methods.rb +0 -83
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
class Source
|
|
5
|
-
class Chain
|
|
6
|
-
class ClassVariable < Link
|
|
7
|
-
def resolve api_map, name_pin, locals
|
|
8
|
-
api_map.get_class_variable_pins(name_pin.context.namespace).select{|p| p.name == word}
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
class Source
|
|
5
|
+
class Chain
|
|
6
|
+
class ClassVariable < Link
|
|
7
|
+
def resolve api_map, name_pin, locals
|
|
8
|
+
api_map.get_class_variable_pins(name_pin.context.namespace).select{|p| p.name == word}
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -1,89 +1,26 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
class Source
|
|
5
|
-
class Chain
|
|
6
|
-
class Constant < Link
|
|
7
|
-
def initialize word
|
|
8
|
-
@word = word
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def resolve api_map, name_pin, locals
|
|
12
|
-
return [Pin::ROOT_PIN] if word.empty?
|
|
13
|
-
if word.start_with?('::')
|
|
14
|
-
base = word[2..-1]
|
|
15
|
-
gates = ['']
|
|
16
|
-
else
|
|
17
|
-
base = word
|
|
18
|
-
gates =
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
# shouldn't be.
|
|
28
|
-
type = deep_constant_type(gate, api_map)
|
|
29
|
-
# Use deep inference to resolve root
|
|
30
|
-
parts[0..-2].each do |sym|
|
|
31
|
-
pins = api_map.get_constants('', type.namespace).select{ |pin| pin.name == sym }
|
|
32
|
-
type = first_pin_type(pins, api_map)
|
|
33
|
-
break if type.undefined?
|
|
34
|
-
end
|
|
35
|
-
next if type.undefined?
|
|
36
|
-
result = api_map.get_constants('', type.namespace).select { |pin| pin.name == parts.last }
|
|
37
|
-
return result unless result.empty?
|
|
38
|
-
end
|
|
39
|
-
[]
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
private
|
|
43
|
-
|
|
44
|
-
# @param pin [Pin::Base]
|
|
45
|
-
# @return [::Array<String>]
|
|
46
|
-
def crawl_gates pin
|
|
47
|
-
clos = pin
|
|
48
|
-
until clos.nil?
|
|
49
|
-
if clos.is_a?(Pin::Namespace)
|
|
50
|
-
gates = clos.gates
|
|
51
|
-
gates.push('') if gates.empty?
|
|
52
|
-
return gates
|
|
53
|
-
end
|
|
54
|
-
clos = clos.closure
|
|
55
|
-
end
|
|
56
|
-
['']
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
# @param pins [::Array<Pin::Base>]
|
|
60
|
-
# @param api_map [ApiMap]
|
|
61
|
-
# @return [ComplexType]
|
|
62
|
-
def first_pin_type(pins, api_map)
|
|
63
|
-
type = ComplexType::UNDEFINED
|
|
64
|
-
pins.each do |pin|
|
|
65
|
-
type = pin.typify(api_map)
|
|
66
|
-
break if type.defined?
|
|
67
|
-
type = pin.probe(api_map)
|
|
68
|
-
break if type.defined?
|
|
69
|
-
end
|
|
70
|
-
type
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
# @param gate [String]
|
|
74
|
-
# @param api_map [ApiMap]
|
|
75
|
-
# @return [ComplexType]
|
|
76
|
-
def deep_constant_type(gate, api_map)
|
|
77
|
-
type = ComplexType::ROOT
|
|
78
|
-
return type if gate == ''
|
|
79
|
-
gate.split('::').each do |word|
|
|
80
|
-
pins = api_map.get_constants('', type.namespace).select { |pin| pin.name == word }
|
|
81
|
-
type = first_pin_type(pins, api_map)
|
|
82
|
-
break if type.undefined?
|
|
83
|
-
end
|
|
84
|
-
type
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
class Source
|
|
5
|
+
class Chain
|
|
6
|
+
class Constant < Link
|
|
7
|
+
def initialize word
|
|
8
|
+
@word = word
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def resolve api_map, name_pin, locals
|
|
12
|
+
return [Pin::ROOT_PIN] if word.empty?
|
|
13
|
+
if word.start_with?('::')
|
|
14
|
+
base = word[2..-1]
|
|
15
|
+
gates = ['']
|
|
16
|
+
else
|
|
17
|
+
base = word
|
|
18
|
+
gates = name_pin.gates
|
|
19
|
+
end
|
|
20
|
+
fqns = api_map.resolve(base, gates)
|
|
21
|
+
api_map.get_path_pins(fqns)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
class Source
|
|
5
|
-
class Chain
|
|
6
|
-
class GlobalVariable < Link
|
|
7
|
-
def resolve api_map, name_pin, locals
|
|
8
|
-
api_map.get_global_variable_pins.select{|p| p.name == word}
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
class Source
|
|
5
|
+
class Chain
|
|
6
|
+
class GlobalVariable < Link
|
|
7
|
+
def resolve api_map, name_pin, locals
|
|
8
|
+
api_map.get_global_variable_pins.select{|p| p.name == word}
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -1,33 +1,34 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
class Source
|
|
5
|
-
class Chain
|
|
6
|
-
class Hash < Literal
|
|
7
|
-
# @param type [String]
|
|
8
|
-
# @param
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
class Source
|
|
5
|
+
class Chain
|
|
6
|
+
class Hash < Literal
|
|
7
|
+
# @param type [String]
|
|
8
|
+
# @param node [Parser::AST::Node]
|
|
9
|
+
# @param splatted [Boolean]
|
|
10
|
+
def initialize type, node, splatted = false
|
|
11
|
+
super(type, node)
|
|
12
|
+
@splatted = splatted
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# @sg-ignore Fix "Not enough arguments to Module#protected"
|
|
16
|
+
protected def equality_fields
|
|
17
|
+
super + [@splatted]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def word
|
|
21
|
+
@word ||= "<#{@type}>"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def resolve api_map, name_pin, locals
|
|
25
|
+
[Pin::ProxyType.anonymous(@complex_type, source: :chain)]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def splatted?
|
|
29
|
+
@splatted
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -9,7 +9,7 @@ module Solargraph
|
|
|
9
9
|
# @note Chain::Head is only intended to handle `self` and `super`.
|
|
10
10
|
class Head < Link
|
|
11
11
|
def resolve api_map, name_pin, locals
|
|
12
|
-
return [Pin::ProxyType.anonymous(name_pin.binder)] if word == 'self'
|
|
12
|
+
return [Pin::ProxyType.anonymous(name_pin.binder, source: :chain)] if word == 'self'
|
|
13
13
|
# return super_pins(api_map, name_pin) if word == 'super'
|
|
14
14
|
[]
|
|
15
15
|
end
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
class Source
|
|
5
|
-
class Chain
|
|
6
|
-
class If < Link
|
|
7
|
-
def word
|
|
8
|
-
'<if>'
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
# @param links [::Array<
|
|
12
|
-
def initialize links
|
|
13
|
-
@links = links
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
# @sg-ignore Fix "Not enough arguments to Module#protected"
|
|
17
|
-
protected def equality_fields
|
|
18
|
-
super + [@links]
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def resolve api_map, name_pin, locals
|
|
22
|
-
types = @links.map { |link| link.infer(api_map, name_pin, locals) }
|
|
23
|
-
[Solargraph::Pin::ProxyType.anonymous(Solargraph::ComplexType.try_parse(types.map(&:tag).uniq.join(', ')))]
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
class Source
|
|
5
|
+
class Chain
|
|
6
|
+
class If < Link
|
|
7
|
+
def word
|
|
8
|
+
'<if>'
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# @param links [::Array<Chain>]
|
|
12
|
+
def initialize links
|
|
13
|
+
@links = links
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# @sg-ignore Fix "Not enough arguments to Module#protected"
|
|
17
|
+
protected def equality_fields
|
|
18
|
+
super + [@links]
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def resolve api_map, name_pin, locals
|
|
22
|
+
types = @links.map { |link| link.infer(api_map, name_pin, locals) }
|
|
23
|
+
[Solargraph::Pin::ProxyType.anonymous(Solargraph::ComplexType.try_parse(types.map(&:tag).uniq.join(', ')), source: :chain)]
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
class Source
|
|
5
|
-
class Chain
|
|
6
|
-
class InstanceVariable < Link
|
|
7
|
-
def resolve api_map, name_pin, locals
|
|
8
|
-
api_map.get_instance_variable_pins(name_pin.binder.namespace, name_pin.binder.scope).select{|p| p.name == word}
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
class Source
|
|
5
|
+
class Chain
|
|
6
|
+
class InstanceVariable < Link
|
|
7
|
+
def resolve api_map, name_pin, locals
|
|
8
|
+
api_map.get_instance_variable_pins(name_pin.binder.namespace, name_pin.binder.scope).select{|p| p.name == word}
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -1,98 +1,109 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
class Source
|
|
5
|
-
class Chain
|
|
6
|
-
class Link
|
|
7
|
-
include Equality
|
|
8
|
-
|
|
9
|
-
# @return [String]
|
|
10
|
-
attr_reader :word
|
|
11
|
-
|
|
12
|
-
# @return [Pin::Base]
|
|
13
|
-
attr_accessor :last_context
|
|
14
|
-
|
|
15
|
-
# @param word [String]
|
|
16
|
-
def initialize word = '<undefined>'
|
|
17
|
-
@word = word
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
# @sg-ignore
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
#
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
def
|
|
62
|
-
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
# Make a copy of this link
|
|
66
|
-
#
|
|
67
|
-
# @return [self]
|
|
68
|
-
def
|
|
69
|
-
clone.mark_head(
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
class Source
|
|
5
|
+
class Chain
|
|
6
|
+
class Link
|
|
7
|
+
include Equality
|
|
8
|
+
|
|
9
|
+
# @return [String]
|
|
10
|
+
attr_reader :word
|
|
11
|
+
|
|
12
|
+
# @return [Pin::Base]
|
|
13
|
+
attr_accessor :last_context
|
|
14
|
+
|
|
15
|
+
# @param word [String]
|
|
16
|
+
def initialize word = '<undefined>'
|
|
17
|
+
@word = word
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# @sg-ignore two problems - Declared return type
|
|
21
|
+
# ::Solargraph::Source::Chain::Array does not match inferred
|
|
22
|
+
# type ::Array(::Class<::Solargraph::Source::Chain::Link>,
|
|
23
|
+
# ::String) for
|
|
24
|
+
# Solargraph::Source::Chain::Link#equality_fields
|
|
25
|
+
# and
|
|
26
|
+
# Not enough arguments to Module#protected
|
|
27
|
+
protected def equality_fields
|
|
28
|
+
[self.class, word]
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def undefined?
|
|
32
|
+
word == '<undefined>'
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def constant?
|
|
36
|
+
is_a?(Chain::Constant)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# @param api_map [ApiMap]
|
|
40
|
+
# @param name_pin [Pin::Base]
|
|
41
|
+
# @param locals [::Array<Pin::Base>]
|
|
42
|
+
# @return [::Array<Pin::Base>]
|
|
43
|
+
def resolve api_map, name_pin, locals
|
|
44
|
+
[]
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# debugging description of contents; not for machine use
|
|
48
|
+
# @return [String]
|
|
49
|
+
def desc
|
|
50
|
+
word
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def to_s
|
|
54
|
+
desc
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def inspect
|
|
58
|
+
"#<#{self.class} - `#{self.desc}`>"
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def head?
|
|
62
|
+
@head ||= false
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Make a copy of this link marked as the head of a chain
|
|
66
|
+
#
|
|
67
|
+
# @return [self]
|
|
68
|
+
def clone_head
|
|
69
|
+
clone.mark_head(true)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Make a copy of this link unmarked as the head of a chain
|
|
73
|
+
#
|
|
74
|
+
# @return [self]
|
|
75
|
+
def clone_body
|
|
76
|
+
clone.mark_head(false)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def nullable?
|
|
80
|
+
false
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# debugging description of contents; not for machine use
|
|
84
|
+
#
|
|
85
|
+
# @return [String]
|
|
86
|
+
def desc
|
|
87
|
+
word
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def inspect
|
|
91
|
+
"#<#{self.class} - `#{self.desc}`>"
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
include Logging
|
|
95
|
+
|
|
96
|
+
protected
|
|
97
|
+
|
|
98
|
+
# Mark whether this link is the head of a chain
|
|
99
|
+
#
|
|
100
|
+
# @param bool [Boolean]
|
|
101
|
+
# @return [self]
|
|
102
|
+
def mark_head bool
|
|
103
|
+
@head = bool
|
|
104
|
+
self
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
@@ -1,28 +1,48 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'parser'
|
|
4
|
+
|
|
5
|
+
module Solargraph
|
|
6
|
+
class Source
|
|
7
|
+
class Chain
|
|
8
|
+
class Literal < Link
|
|
9
|
+
def word
|
|
10
|
+
@word ||= "<#{@type}>"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
attr_reader :value
|
|
14
|
+
|
|
15
|
+
# @param type [String]
|
|
16
|
+
# @param node [Parser::AST::Node, Object]
|
|
17
|
+
def initialize type, node
|
|
18
|
+
if node.is_a?(::Parser::AST::Node)
|
|
19
|
+
if node.type == :true
|
|
20
|
+
@value = true
|
|
21
|
+
elsif node.type == :false
|
|
22
|
+
@value = false
|
|
23
|
+
elsif [:int, :sym].include?(node.type)
|
|
24
|
+
@value = node.children.first
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
@type = type
|
|
28
|
+
@literal_type = ComplexType.try_parse(@value.inspect)
|
|
29
|
+
@complex_type = ComplexType.try_parse(type)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# @sg-ignore Fix "Not enough arguments to Module#protected"
|
|
33
|
+
protected def equality_fields
|
|
34
|
+
super + [@value, @type, @literal_type, @complex_type]
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def resolve api_map, name_pin, locals
|
|
38
|
+
if api_map.super_and_sub?(@complex_type.name, @literal_type.name)
|
|
39
|
+
[Pin::ProxyType.anonymous(@literal_type, source: :chain)]
|
|
40
|
+
else
|
|
41
|
+
# we don't support this value as a literal type
|
|
42
|
+
[Pin::ProxyType.anonymous(@complex_type, source: :chain)]
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
class Source
|
|
5
|
-
class Chain
|
|
6
|
-
class Or < Link
|
|
7
|
-
def word
|
|
8
|
-
'<or>'
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
# @param links [::Array<
|
|
12
|
-
def initialize links
|
|
13
|
-
@links = links
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def resolve api_map, name_pin, locals
|
|
17
|
-
types = @links.map { |link| link.infer(api_map, name_pin, locals) }
|
|
18
|
-
[Solargraph::Pin::ProxyType.anonymous(Solargraph::ComplexType.new(types.uniq))]
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
class Source
|
|
5
|
+
class Chain
|
|
6
|
+
class Or < Link
|
|
7
|
+
def word
|
|
8
|
+
'<or>'
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# @param links [::Array<Chain>]
|
|
12
|
+
def initialize links
|
|
13
|
+
@links = links
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def resolve api_map, name_pin, locals
|
|
17
|
+
types = @links.map { |link| link.infer(api_map, name_pin, locals) }
|
|
18
|
+
[Solargraph::Pin::ProxyType.anonymous(Solargraph::ComplexType.new(types.uniq), source: :chain)]
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|