solargraph 0.58.1 → 0.59.0.dev.1
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/.envrc +3 -0
- data/.github/workflows/linting.yml +4 -5
- data/.github/workflows/plugins.yml +40 -36
- data/.github/workflows/rspec.yml +45 -13
- data/.github/workflows/typecheck.yml +2 -2
- data/.rubocop_todo.yml +27 -49
- data/README.md +3 -3
- data/Rakefile +1 -0
- data/lib/solargraph/api_map/cache.rb +110 -110
- data/lib/solargraph/api_map/constants.rb +289 -279
- data/lib/solargraph/api_map/index.rb +204 -193
- data/lib/solargraph/api_map/source_to_yard.rb +109 -97
- data/lib/solargraph/api_map/store.rb +387 -384
- data/lib/solargraph/api_map.rb +1000 -945
- data/lib/solargraph/complex_type/conformance.rb +176 -0
- data/lib/solargraph/complex_type/type_methods.rb +242 -228
- data/lib/solargraph/complex_type/unique_type.rb +632 -482
- data/lib/solargraph/complex_type.rb +549 -444
- data/lib/solargraph/convention/data_definition/data_definition_node.rb +93 -91
- data/lib/solargraph/convention/data_definition.rb +108 -105
- data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +62 -61
- data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +103 -102
- data/lib/solargraph/convention/struct_definition.rb +168 -164
- data/lib/solargraph/diagnostics/require_not_found.rb +54 -53
- data/lib/solargraph/diagnostics/rubocop.rb +119 -118
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +70 -68
- data/lib/solargraph/diagnostics/type_check.rb +56 -55
- data/lib/solargraph/doc_map.rb +200 -439
- data/lib/solargraph/equality.rb +34 -34
- data/lib/solargraph/gem_pins.rb +97 -98
- data/lib/solargraph/language_server/host/dispatch.rb +131 -130
- data/lib/solargraph/language_server/host/message_worker.rb +113 -112
- data/lib/solargraph/language_server/host/sources.rb +100 -99
- data/lib/solargraph/language_server/host.rb +883 -878
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +109 -114
- data/lib/solargraph/language_server/message/extended/document.rb +24 -23
- data/lib/solargraph/language_server/message/text_document/completion.rb +58 -56
- data/lib/solargraph/language_server/message/text_document/definition.rb +42 -40
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +28 -26
- data/lib/solargraph/language_server/message/text_document/formatting.rb +150 -148
- data/lib/solargraph/language_server/message/text_document/hover.rb +60 -58
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +25 -24
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +27 -25
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +25 -23
- data/lib/solargraph/library.rb +729 -683
- data/lib/solargraph/location.rb +87 -82
- data/lib/solargraph/logging.rb +57 -37
- data/lib/solargraph/parser/comment_ripper.rb +76 -69
- data/lib/solargraph/parser/flow_sensitive_typing.rb +483 -255
- data/lib/solargraph/parser/node_processor/base.rb +122 -92
- data/lib/solargraph/parser/node_processor.rb +63 -62
- data/lib/solargraph/parser/parser_gem/class_methods.rb +167 -149
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +191 -166
- data/lib/solargraph/parser/parser_gem/node_methods.rb +506 -486
- data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -22
- data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +61 -59
- data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +24 -15
- data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +46 -46
- data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +60 -53
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +53 -23
- data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +41 -40
- data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +30 -29
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +61 -59
- data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -98
- data/lib/solargraph/parser/parser_gem/node_processors/or_node.rb +22 -0
- data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -17
- data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +39 -38
- data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +53 -52
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +296 -291
- data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +23 -0
- data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +33 -29
- data/lib/solargraph/parser/parser_gem/node_processors.rb +74 -70
- data/lib/solargraph/parser/region.rb +75 -69
- data/lib/solargraph/parser/snippet.rb +17 -17
- data/lib/solargraph/pin/base.rb +761 -729
- data/lib/solargraph/pin/base_variable.rb +418 -126
- data/lib/solargraph/pin/block.rb +126 -104
- data/lib/solargraph/pin/breakable.rb +13 -9
- data/lib/solargraph/pin/callable.rb +278 -231
- data/lib/solargraph/pin/closure.rb +68 -72
- data/lib/solargraph/pin/common.rb +94 -79
- data/lib/solargraph/pin/compound_statement.rb +55 -0
- data/lib/solargraph/pin/conversions.rb +124 -123
- data/lib/solargraph/pin/delegated_method.rb +131 -120
- data/lib/solargraph/pin/documenting.rb +115 -114
- data/lib/solargraph/pin/instance_variable.rb +38 -34
- data/lib/solargraph/pin/keyword.rb +16 -20
- data/lib/solargraph/pin/local_variable.rb +31 -75
- data/lib/solargraph/pin/method.rb +720 -672
- data/lib/solargraph/pin/method_alias.rb +42 -34
- data/lib/solargraph/pin/namespace.rb +121 -115
- data/lib/solargraph/pin/parameter.rb +338 -275
- data/lib/solargraph/pin/proxy_type.rb +40 -39
- data/lib/solargraph/pin/reference/override.rb +47 -47
- data/lib/solargraph/pin/reference/superclass.rb +17 -15
- data/lib/solargraph/pin/reference.rb +41 -39
- data/lib/solargraph/pin/search.rb +62 -61
- data/lib/solargraph/pin/signature.rb +69 -61
- data/lib/solargraph/pin/symbol.rb +53 -53
- data/lib/solargraph/pin/until.rb +18 -18
- data/lib/solargraph/pin/while.rb +18 -18
- data/lib/solargraph/pin.rb +46 -44
- data/lib/solargraph/pin_cache.rb +665 -245
- data/lib/solargraph/position.rb +118 -119
- data/lib/solargraph/range.rb +112 -112
- data/lib/solargraph/rbs_map/conversions.rb +846 -823
- data/lib/solargraph/rbs_map/core_map.rb +65 -58
- data/lib/solargraph/rbs_map/stdlib_map.rb +72 -43
- data/lib/solargraph/rbs_map.rb +217 -163
- data/lib/solargraph/shell.rb +397 -352
- data/lib/solargraph/source/chain/call.rb +372 -337
- data/lib/solargraph/source/chain/constant.rb +28 -26
- data/lib/solargraph/source/chain/hash.rb +35 -34
- data/lib/solargraph/source/chain/if.rb +29 -28
- data/lib/solargraph/source/chain/instance_variable.rb +34 -13
- data/lib/solargraph/source/chain/literal.rb +53 -48
- data/lib/solargraph/source/chain/or.rb +31 -23
- data/lib/solargraph/source/chain.rb +294 -291
- data/lib/solargraph/source/change.rb +89 -82
- data/lib/solargraph/source/cursor.rb +172 -166
- data/lib/solargraph/source/source_chainer.rb +204 -194
- data/lib/solargraph/source/updater.rb +59 -55
- data/lib/solargraph/source.rb +524 -498
- data/lib/solargraph/source_map/clip.rb +237 -226
- data/lib/solargraph/source_map/data.rb +37 -34
- data/lib/solargraph/source_map/mapper.rb +282 -259
- data/lib/solargraph/source_map.rb +220 -212
- data/lib/solargraph/type_checker/problem.rb +34 -32
- data/lib/solargraph/type_checker/rules.rb +157 -84
- data/lib/solargraph/type_checker.rb +895 -814
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/workspace/config.rb +257 -255
- data/lib/solargraph/workspace/gemspecs.rb +367 -0
- data/lib/solargraph/workspace/require_paths.rb +98 -97
- data/lib/solargraph/workspace.rb +362 -220
- data/lib/solargraph/yard_map/helpers.rb +45 -44
- data/lib/solargraph/yard_map/mapper/to_method.rb +134 -130
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +32 -31
- data/lib/solargraph/yard_map/mapper.rb +84 -79
- data/lib/solargraph/yardoc.rb +97 -87
- data/lib/solargraph.rb +126 -105
- data/rbs/fills/rubygems/0/dependency.rbs +193 -0
- data/rbs/fills/tuple/tuple.rbs +28 -0
- data/rbs/shims/ast/0/node.rbs +5 -0
- data/rbs/shims/diff-lcs/1.5/diff-lcs.rbs +11 -0
- data/rbs_collection.yaml +1 -1
- data/solargraph.gemspec +2 -1
- metadata +22 -17
- data/lib/solargraph/type_checker/checks.rb +0 -124
- data/lib/solargraph/type_checker/param_def.rb +0 -37
- data/lib/solargraph/yard_map/to_method.rb +0 -89
- data/sig/shims/ast/0/node.rbs +0 -5
- /data/{sig → rbs}/shims/ast/2.4/.rbs_meta.yaml +0 -0
- /data/{sig → rbs}/shims/ast/2.4/ast.rbs +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/builders/default.rbs +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/manifest.yaml +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/parser.rbs +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/polyfill.rbs +0 -0
- /data/{sig → rbs}/shims/thor/1.2.0.1/.rbs_meta.yaml +0 -0
- /data/{sig → rbs}/shims/thor/1.2.0.1/manifest.yaml +0 -0
- /data/{sig → rbs}/shims/thor/1.2.0.1/thor.rbs +0 -0
|
@@ -1,44 +1,45 @@
|
|
|
1
|
-
module Solargraph
|
|
2
|
-
class YardMap
|
|
3
|
-
module Helpers
|
|
4
|
-
module_function
|
|
5
|
-
|
|
6
|
-
# @param code_object [YARD::CodeObjects::Base]
|
|
7
|
-
# @param spec [Gem::Specification, nil]
|
|
8
|
-
# @return [Solargraph::Location
|
|
9
|
-
def object_location code_object, spec
|
|
10
|
-
if spec.nil? || code_object.nil? || code_object.file.nil? || code_object.line.nil?
|
|
11
|
-
if code_object.namespace.is_a?(YARD::CodeObjects::NamespaceObject)
|
|
12
|
-
# If the code object is a namespace, use the namespace's location
|
|
13
|
-
return object_location(code_object.namespace, spec)
|
|
14
|
-
end
|
|
15
|
-
return Solargraph::Location.new(__FILE__, Solargraph::Range.from_to(__LINE__ - 1, 0, __LINE__ - 1, 0))
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
# @param
|
|
23
|
-
# @
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
end
|
|
1
|
+
module Solargraph
|
|
2
|
+
class YardMap
|
|
3
|
+
module Helpers
|
|
4
|
+
module_function
|
|
5
|
+
|
|
6
|
+
# @param code_object [YARD::CodeObjects::Base]
|
|
7
|
+
# @param spec [Gem::Specification, nil]
|
|
8
|
+
# @return [Solargraph::Location]
|
|
9
|
+
def object_location code_object, spec
|
|
10
|
+
if spec.nil? || code_object.nil? || code_object.file.nil? || code_object.line.nil?
|
|
11
|
+
if code_object.namespace.is_a?(YARD::CodeObjects::NamespaceObject)
|
|
12
|
+
# If the code object is a namespace, use the namespace's location
|
|
13
|
+
return object_location(code_object.namespace, spec)
|
|
14
|
+
end
|
|
15
|
+
return Solargraph::Location.new(__FILE__, Solargraph::Range.from_to(__LINE__ - 1, 0, __LINE__ - 1, 0))
|
|
16
|
+
end
|
|
17
|
+
# @sg-ignore flow sensitive typing should be able to identify more blocks that always return
|
|
18
|
+
file = File.join(spec.full_gem_path, code_object.file)
|
|
19
|
+
Solargraph::Location.new(file, Solargraph::Range.from_to(code_object.line - 1, 0, code_object.line - 1, 0))
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# @param code_object [YARD::CodeObjects::Base]
|
|
23
|
+
# @param spec [Gem::Specification, nil]
|
|
24
|
+
# @return [Solargraph::Pin::Namespace]
|
|
25
|
+
def create_closure_namespace_for(code_object, spec)
|
|
26
|
+
code_object_for_location = code_object
|
|
27
|
+
# code_object.namespace is sometimes a YARD proxy object pointing to a method path ("Object#new")
|
|
28
|
+
code_object_for_location = code_object.namespace if code_object.namespace.is_a?(YARD::CodeObjects::NamespaceObject)
|
|
29
|
+
namespace_location = object_location(code_object_for_location, spec)
|
|
30
|
+
ns_name = code_object.namespace.to_s
|
|
31
|
+
if ns_name.empty?
|
|
32
|
+
Solargraph::Pin::ROOT_PIN
|
|
33
|
+
else
|
|
34
|
+
Solargraph::Pin::Namespace.new(
|
|
35
|
+
name: ns_name,
|
|
36
|
+
closure: Pin::ROOT_PIN,
|
|
37
|
+
gates: [code_object.namespace.to_s],
|
|
38
|
+
source: :yardoc,
|
|
39
|
+
location: namespace_location
|
|
40
|
+
)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -1,130 +1,134 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
class YardMap
|
|
5
|
-
class Mapper
|
|
6
|
-
module ToMethod
|
|
7
|
-
extend YardMap::Helpers
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
# @param
|
|
16
|
-
# @param
|
|
17
|
-
# @param
|
|
18
|
-
# @param
|
|
19
|
-
# @param
|
|
20
|
-
# @
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
final_visibility
|
|
32
|
-
|
|
33
|
-
final_visibility ||=
|
|
34
|
-
|
|
35
|
-
final_visibility ||=
|
|
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
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
:
|
|
118
|
-
elsif a[0].
|
|
119
|
-
|
|
120
|
-
elsif a[
|
|
121
|
-
:
|
|
122
|
-
|
|
123
|
-
:
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
class YardMap
|
|
5
|
+
class Mapper
|
|
6
|
+
module ToMethod
|
|
7
|
+
extend YardMap::Helpers
|
|
8
|
+
|
|
9
|
+
# @type [Hash{Array<String, Symbol, String> => Symbol}]
|
|
10
|
+
VISIBILITY_OVERRIDE = {
|
|
11
|
+
# YARD pays attention to 'private' statements prior to class methods but shouldn't
|
|
12
|
+
["Rails::Engine", :class, "find_root_with_flag"] => :public
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
# @param code_object [YARD::CodeObjects::MethodObject]
|
|
16
|
+
# @param name [String, nil]
|
|
17
|
+
# @param scope [Symbol, nil]
|
|
18
|
+
# @param visibility [Symbol, nil]
|
|
19
|
+
# @param closure [Solargraph::Pin::Namespace, nil]
|
|
20
|
+
# @param spec [Gem::Specification, nil]
|
|
21
|
+
# @return [Solargraph::Pin::Method]
|
|
22
|
+
def self.make code_object, name = nil, scope = nil, visibility = nil, closure = nil, spec = nil
|
|
23
|
+
closure ||= create_closure_namespace_for(code_object, spec)
|
|
24
|
+
location = object_location(code_object, spec)
|
|
25
|
+
name ||= code_object.name.to_s
|
|
26
|
+
return_type = ComplexType::SELF if name == 'new'
|
|
27
|
+
comments = code_object.docstring ? code_object.docstring.all.to_s : ''
|
|
28
|
+
final_scope = scope || code_object.scope
|
|
29
|
+
# @sg-ignore Need to add nil check here
|
|
30
|
+
override_key = [closure.path, final_scope, name]
|
|
31
|
+
final_visibility = VISIBILITY_OVERRIDE[override_key]
|
|
32
|
+
# @sg-ignore Need to add nil check here
|
|
33
|
+
final_visibility ||= VISIBILITY_OVERRIDE[[closure.path, final_scope]]
|
|
34
|
+
# @sg-ignore Need to add nil check here
|
|
35
|
+
final_visibility ||= :private if closure.path == 'Kernel' && Kernel.private_instance_methods(false).include?(name.to_sym)
|
|
36
|
+
final_visibility ||= visibility
|
|
37
|
+
final_visibility ||= :private if code_object.module_function? && final_scope == :instance
|
|
38
|
+
final_visibility ||= :public if code_object.module_function? && final_scope == :class
|
|
39
|
+
final_visibility ||= code_object.visibility
|
|
40
|
+
if code_object.is_alias?
|
|
41
|
+
origin_code_object = code_object.namespace.aliases[code_object]
|
|
42
|
+
pin = Pin::MethodAlias.new(
|
|
43
|
+
name: name,
|
|
44
|
+
location: location,
|
|
45
|
+
original: origin_code_object.name.to_s,
|
|
46
|
+
closure: closure,
|
|
47
|
+
comments: comments,
|
|
48
|
+
scope: final_scope,
|
|
49
|
+
visibility: final_visibility,
|
|
50
|
+
explicit: code_object.is_explicit?,
|
|
51
|
+
return_type: return_type,
|
|
52
|
+
parameters: [],
|
|
53
|
+
source: :yardoc,
|
|
54
|
+
)
|
|
55
|
+
else
|
|
56
|
+
# @sg-ignore Need to add nil check here
|
|
57
|
+
pin = Pin::Method.new(
|
|
58
|
+
location: location,
|
|
59
|
+
closure: closure,
|
|
60
|
+
name: name,
|
|
61
|
+
comments: comments,
|
|
62
|
+
scope: final_scope,
|
|
63
|
+
visibility: final_visibility,
|
|
64
|
+
# @todo Might need to convert overloads to signatures
|
|
65
|
+
explicit: code_object.is_explicit?,
|
|
66
|
+
return_type: return_type,
|
|
67
|
+
attribute: code_object.is_attribute?,
|
|
68
|
+
parameters: [],
|
|
69
|
+
source: :yardoc,
|
|
70
|
+
)
|
|
71
|
+
pin.parameters.concat get_parameters(code_object, location, comments, pin)
|
|
72
|
+
pin.parameters.freeze
|
|
73
|
+
end
|
|
74
|
+
logger.debug { "ToMethod.make: Just created method pin: #{pin.inspect}" }
|
|
75
|
+
pin
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
class << self
|
|
79
|
+
include Logging
|
|
80
|
+
|
|
81
|
+
private
|
|
82
|
+
|
|
83
|
+
# @param code_object [YARD::CodeObjects::Base]
|
|
84
|
+
# @param location [Location],
|
|
85
|
+
# @param comments [String]
|
|
86
|
+
# @param pin [Pin::Base]
|
|
87
|
+
# @return [Array<Solargraph::Pin::Parameter>]
|
|
88
|
+
def get_parameters code_object, location, comments, pin
|
|
89
|
+
return [] unless code_object.is_a?(YARD::CodeObjects::MethodObject)
|
|
90
|
+
# HACK: Skip `nil` and `self` parameters that are sometimes emitted
|
|
91
|
+
# for methods defined in C
|
|
92
|
+
# See https://github.com/castwide/solargraph/issues/345
|
|
93
|
+
code_object.parameters.select { |a| a[0] && a[0] != 'self' }.map do |a|
|
|
94
|
+
Solargraph::Pin::Parameter.new(
|
|
95
|
+
location: location,
|
|
96
|
+
closure: pin,
|
|
97
|
+
comments: comments,
|
|
98
|
+
name: arg_name(a),
|
|
99
|
+
presence: nil,
|
|
100
|
+
decl: arg_type(a),
|
|
101
|
+
asgn_code: a[1],
|
|
102
|
+
source: :yardoc,
|
|
103
|
+
)
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# @param a [Array<String>]
|
|
108
|
+
# @return [String]
|
|
109
|
+
def arg_name a
|
|
110
|
+
a[0].gsub(/[^a-z0-9_]/i, '')
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# @param a [Array]
|
|
114
|
+
# @return [::Symbol]
|
|
115
|
+
def arg_type a
|
|
116
|
+
if a[0].start_with?('**')
|
|
117
|
+
:kwrestarg
|
|
118
|
+
elsif a[0].start_with?('*')
|
|
119
|
+
:restarg
|
|
120
|
+
elsif a[0].start_with?('&')
|
|
121
|
+
:blockarg
|
|
122
|
+
elsif a[0].end_with?(':')
|
|
123
|
+
a[1] ? :kwoptarg : :kwarg
|
|
124
|
+
elsif a[1]
|
|
125
|
+
:optarg
|
|
126
|
+
else
|
|
127
|
+
:arg
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
@@ -1,31 +1,32 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
class YardMap
|
|
5
|
-
class Mapper
|
|
6
|
-
module ToNamespace
|
|
7
|
-
extend YardMap::Helpers
|
|
8
|
-
|
|
9
|
-
# @param code_object [YARD::CodeObjects::NamespaceObject]
|
|
10
|
-
# @param spec [Gem::Specification, nil]
|
|
11
|
-
# @param closure [Pin::Closure, nil]
|
|
12
|
-
# @return [Pin::Namespace]
|
|
13
|
-
def self.make code_object, spec, closure = nil
|
|
14
|
-
closure ||= create_closure_namespace_for(code_object, spec)
|
|
15
|
-
location = object_location(code_object, spec)
|
|
16
|
-
|
|
17
|
-
Pin::Namespace.new(
|
|
18
|
-
location: location,
|
|
19
|
-
name: code_object.name.to_s,
|
|
20
|
-
comments: code_object.docstring ? code_object.docstring.all.to_s : '',
|
|
21
|
-
type: code_object.is_a?(YARD::CodeObjects::ClassObject) ? :class : :module,
|
|
22
|
-
visibility: code_object.visibility,
|
|
23
|
-
closure: closure,
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
class YardMap
|
|
5
|
+
class Mapper
|
|
6
|
+
module ToNamespace
|
|
7
|
+
extend YardMap::Helpers
|
|
8
|
+
|
|
9
|
+
# @param code_object [YARD::CodeObjects::NamespaceObject]
|
|
10
|
+
# @param spec [Gem::Specification, nil]
|
|
11
|
+
# @param closure [Pin::Closure, nil]
|
|
12
|
+
# @return [Pin::Namespace]
|
|
13
|
+
def self.make code_object, spec, closure = nil
|
|
14
|
+
closure ||= create_closure_namespace_for(code_object, spec)
|
|
15
|
+
location = object_location(code_object, spec)
|
|
16
|
+
|
|
17
|
+
Pin::Namespace.new(
|
|
18
|
+
location: location,
|
|
19
|
+
name: code_object.name.to_s,
|
|
20
|
+
comments: code_object.docstring ? code_object.docstring.all.to_s : '',
|
|
21
|
+
type: code_object.is_a?(YARD::CodeObjects::ClassObject) ? :class : :module,
|
|
22
|
+
visibility: code_object.visibility,
|
|
23
|
+
closure: closure,
|
|
24
|
+
# @sg-ignore need to add a nil check here
|
|
25
|
+
gates: closure.gates,
|
|
26
|
+
source: :yardoc,
|
|
27
|
+
)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -1,79 +1,84 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
class YardMap
|
|
5
|
-
class Mapper
|
|
6
|
-
autoload :ToMethod, 'solargraph/yard_map/mapper/to_method'
|
|
7
|
-
autoload :ToNamespace, 'solargraph/yard_map/mapper/to_namespace'
|
|
8
|
-
autoload :ToConstant, 'solargraph/yard_map/mapper/to_constant'
|
|
9
|
-
|
|
10
|
-
# @param code_objects [Array<YARD::CodeObjects::Base>]
|
|
11
|
-
# @param spec [Gem::Specification, nil]
|
|
12
|
-
def initialize code_objects, spec = nil
|
|
13
|
-
@code_objects = code_objects
|
|
14
|
-
@spec = spec
|
|
15
|
-
# @type [Array<Solargraph::Pin::Base>]
|
|
16
|
-
@pins = []
|
|
17
|
-
@namespace_pins = {}
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
# @return [Array<Pin::Base>]
|
|
21
|
-
def map
|
|
22
|
-
@code_objects.each do |co|
|
|
23
|
-
@pins.concat generate_pins co
|
|
24
|
-
end
|
|
25
|
-
# Some yardocs contain documentation for dependencies that can be
|
|
26
|
-
# ignored here. The YardMap will load dependencies separately.
|
|
27
|
-
@
|
|
28
|
-
@pins
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
# @
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
@namespace_pins[code_object.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
#
|
|
45
|
-
superclass
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
class YardMap
|
|
5
|
+
class Mapper
|
|
6
|
+
autoload :ToMethod, 'solargraph/yard_map/mapper/to_method'
|
|
7
|
+
autoload :ToNamespace, 'solargraph/yard_map/mapper/to_namespace'
|
|
8
|
+
autoload :ToConstant, 'solargraph/yard_map/mapper/to_constant'
|
|
9
|
+
|
|
10
|
+
# @param code_objects [Array<YARD::CodeObjects::Base>]
|
|
11
|
+
# @param spec [Gem::Specification, nil]
|
|
12
|
+
def initialize code_objects, spec = nil
|
|
13
|
+
@code_objects = code_objects
|
|
14
|
+
@spec = spec
|
|
15
|
+
# @type [Array<Solargraph::Pin::Base>]
|
|
16
|
+
@pins = []
|
|
17
|
+
@namespace_pins = {}
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# @return [Array<Pin::Base>]
|
|
21
|
+
def map
|
|
22
|
+
@code_objects.each do |co|
|
|
23
|
+
@pins.concat generate_pins co
|
|
24
|
+
end
|
|
25
|
+
# Some yardocs contain documentation for dependencies that can be
|
|
26
|
+
# ignored here. The YardMap will load dependencies separately.
|
|
27
|
+
# @sg-ignore Need to add nil check here
|
|
28
|
+
@pins.keep_if { |pin| pin.location.nil? || File.file?(pin.location.filename) } if @spec
|
|
29
|
+
@pins
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
# @param code_object [YARD::CodeObjects::Base]
|
|
35
|
+
# @return [Array<Pin::Base>]
|
|
36
|
+
def generate_pins code_object
|
|
37
|
+
result = []
|
|
38
|
+
if code_object.is_a?(YARD::CodeObjects::NamespaceObject)
|
|
39
|
+
nspin = ToNamespace.make(code_object, @spec, @namespace_pins[code_object.namespace.to_s])
|
|
40
|
+
@namespace_pins[code_object.path] = nspin
|
|
41
|
+
result.push nspin
|
|
42
|
+
# @sg-ignore flow sensitive typing needs to narrow down type with an if is_a? check
|
|
43
|
+
if code_object.is_a?(YARD::CodeObjects::ClassObject) and !code_object.superclass.nil?
|
|
44
|
+
# This method of superclass detection is a bit of a hack. If
|
|
45
|
+
# the superclass is a Proxy, it is assumed to be undefined in its
|
|
46
|
+
# yardoc and converted to a fully qualified namespace.
|
|
47
|
+
# @sg-ignore flow sensitive typing needs to narrow down type with an if is_a? check
|
|
48
|
+
superclass = if code_object.superclass.is_a?(YARD::CodeObjects::Proxy)
|
|
49
|
+
# @sg-ignore flow sensitive typing needs to narrow down type with an if is_a? check
|
|
50
|
+
"::#{code_object.superclass}"
|
|
51
|
+
else
|
|
52
|
+
# @sg-ignore flow sensitive typing needs to narrow down type with an if is_a? check
|
|
53
|
+
code_object.superclass.to_s
|
|
54
|
+
end
|
|
55
|
+
result.push Solargraph::Pin::Reference::Superclass.new(name: superclass, closure: nspin, source: :yard_map)
|
|
56
|
+
end
|
|
57
|
+
code_object.class_mixins.each do |m|
|
|
58
|
+
result.push Solargraph::Pin::Reference::Extend.new(closure: nspin, name: m.path, source: :yard_map)
|
|
59
|
+
end
|
|
60
|
+
code_object.instance_mixins.each do |m|
|
|
61
|
+
result.push Solargraph::Pin::Reference::Include.new(
|
|
62
|
+
closure: nspin, # @todo Fix this
|
|
63
|
+
name: m.path,
|
|
64
|
+
source: :yard_map
|
|
65
|
+
)
|
|
66
|
+
end
|
|
67
|
+
elsif code_object.is_a?(YARD::CodeObjects::MethodObject)
|
|
68
|
+
closure = @namespace_pins[code_object.namespace.to_s]
|
|
69
|
+
if code_object.name == :initialize && code_object.scope == :instance
|
|
70
|
+
# @todo Check the visibility of <Class>.new
|
|
71
|
+
result.push ToMethod.make(code_object, 'new', :class, :public, closure, @spec)
|
|
72
|
+
result.push ToMethod.make(code_object, 'initialize', :instance, :private, closure, @spec)
|
|
73
|
+
else
|
|
74
|
+
result.push ToMethod.make(code_object, nil, nil, nil, closure, @spec)
|
|
75
|
+
end
|
|
76
|
+
elsif code_object.is_a?(YARD::CodeObjects::ConstantObject)
|
|
77
|
+
closure = @namespace_pins[code_object.namespace]
|
|
78
|
+
result.push ToConstant.make(code_object, closure, @spec)
|
|
79
|
+
end
|
|
80
|
+
result
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|