solargraph 0.58.0 → 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/.envrc +3 -0
- data/.gitattributes +2 -0
- data/.github/workflows/linting.yml +6 -5
- data/.github/workflows/plugins.yml +48 -35
- data/.github/workflows/rspec.yml +15 -28
- data/.github/workflows/typecheck.yml +3 -2
- data/.gitignore +1 -0
- data/.rubocop.yml +38 -6
- data/.rubocop_todo.yml +53 -966
- data/CHANGELOG.md +24 -0
- data/Gemfile +3 -1
- data/README.md +3 -3
- data/Rakefile +26 -23
- data/bin/solargraph +9 -8
- data/lib/solargraph/api_map/cache.rb +110 -110
- data/lib/solargraph/api_map/constants.rb +288 -279
- data/lib/solargraph/api_map/index.rb +204 -193
- data/lib/solargraph/api_map/source_to_yard.rb +110 -97
- data/lib/solargraph/api_map/store.rb +395 -384
- data/lib/solargraph/api_map.rb +1029 -945
- data/lib/solargraph/bench.rb +44 -45
- data/lib/solargraph/complex_type/conformance.rb +176 -0
- data/lib/solargraph/complex_type/type_methods.rb +240 -228
- data/lib/solargraph/complex_type/unique_type.rb +641 -482
- data/lib/solargraph/complex_type.rb +557 -444
- data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -61
- 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/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 +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/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/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/diagnostics/update_errors.rb +37 -41
- data/lib/solargraph/doc_map.rb +438 -439
- data/lib/solargraph/equality.rb +34 -34
- data/lib/solargraph/gem_pins.rb +98 -98
- 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 -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 +886 -878
- 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 +108 -114
- data/lib/solargraph/language_server/message/extended/document.rb +24 -23
- 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 +58 -56
- data/lib/solargraph/language_server/message/text_document/definition.rb +49 -40
- data/lib/solargraph/language_server/message/text_document/document_highlight.rb +23 -16
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +36 -26
- data/lib/solargraph/language_server/message/text_document/formatting.rb +150 -148
- data/lib/solargraph/language_server/message/text_document/hover.rb +58 -58
- 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 +25 -24
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +33 -25
- 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 +33 -23
- 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 +702 -683
- data/lib/solargraph/location.rb +85 -82
- data/lib/solargraph/logging.rb +55 -37
- data/lib/solargraph/page.rb +92 -92
- data/lib/solargraph/parser/comment_ripper.rb +84 -69
- data/lib/solargraph/parser/flow_sensitive_typing.rb +471 -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 +165 -149
- data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -19
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +191 -166
- data/lib/solargraph/parser/parser_gem/node_methods.rb +507 -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 +45 -46
- data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +60 -53
- data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +38 -37
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +53 -23
- data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +42 -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 +51 -52
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +302 -291
- data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -29
- 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/parser_gem.rb +14 -12
- data/lib/solargraph/parser/region.rb +75 -69
- data/lib/solargraph/parser/snippet.rb +19 -17
- data/lib/solargraph/parser.rb +25 -23
- data/lib/solargraph/pin/base.rb +773 -729
- data/lib/solargraph/pin/base_variable.rb +375 -126
- data/lib/solargraph/pin/block.rb +127 -104
- data/lib/solargraph/pin/breakable.rb +15 -9
- data/lib/solargraph/pin/callable.rb +275 -231
- data/lib/solargraph/pin/closure.rb +69 -72
- data/lib/solargraph/pin/common.rb +97 -79
- data/lib/solargraph/pin/compound_statement.rb +55 -0
- data/lib/solargraph/pin/constant.rb +43 -45
- data/lib/solargraph/pin/conversions.rb +129 -123
- data/lib/solargraph/pin/delegated_method.rb +131 -120
- data/lib/solargraph/pin/documenting.rb +116 -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 +724 -672
- data/lib/solargraph/pin/method_alias.rb +42 -34
- data/lib/solargraph/pin/namespace.rb +122 -115
- data/lib/solargraph/pin/parameter.rb +339 -275
- data/lib/solargraph/pin/proxy_type.rb +42 -39
- data/lib/solargraph/pin/reference/override.rb +47 -47
- data/lib/solargraph/pin/reference/superclass.rb +17 -15
- data/lib/solargraph/pin/reference/type_alias.rb +16 -0
- data/lib/solargraph/pin/reference.rb +59 -39
- data/lib/solargraph/pin/search.rb +62 -61
- data/lib/solargraph/pin/signature.rb +64 -61
- data/lib/solargraph/pin/symbol.rb +54 -53
- data/lib/solargraph/pin/until.rb +16 -18
- data/lib/solargraph/pin/while.rb +16 -18
- data/lib/solargraph/pin.rb +46 -44
- data/lib/solargraph/pin_cache.rb +248 -245
- data/lib/solargraph/position.rb +139 -119
- data/lib/solargraph/range.rb +113 -112
- data/lib/solargraph/rbs_map/conversions.rb +952 -823
- data/lib/solargraph/rbs_map/core_fills.rb +91 -84
- data/lib/solargraph/rbs_map/core_map.rb +65 -58
- data/lib/solargraph/rbs_map/stdlib_map.rb +71 -43
- data/lib/solargraph/rbs_map.rb +207 -163
- data/lib/solargraph/server_methods.rb +16 -16
- data/lib/solargraph/shell.rb +555 -352
- data/lib/solargraph/source/chain/array.rb +39 -37
- data/lib/solargraph/source/chain/call.rb +377 -337
- data/lib/solargraph/source/chain/class_variable.rb +13 -13
- data/lib/solargraph/source/chain/constant.rb +30 -26
- data/lib/solargraph/source/chain/global_variable.rb +13 -13
- data/lib/solargraph/source/chain/hash.rb +37 -34
- data/lib/solargraph/source/chain/if.rb +30 -28
- data/lib/solargraph/source/chain/instance_variable.rb +36 -13
- data/lib/solargraph/source/chain/link.rb +99 -109
- data/lib/solargraph/source/chain/literal.rb +51 -48
- data/lib/solargraph/source/chain/or.rb +29 -23
- 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 +304 -291
- data/lib/solargraph/source/change.rb +89 -82
- data/lib/solargraph/source/cursor.rb +172 -166
- data/lib/solargraph/source/encoding_fixes.rb +22 -23
- data/lib/solargraph/source/source_chainer.rb +218 -194
- data/lib/solargraph/source/updater.rb +59 -55
- data/lib/solargraph/source.rb +522 -498
- data/lib/solargraph/source_map/clip.rb +245 -226
- data/lib/solargraph/source_map/data.rb +37 -34
- data/lib/solargraph/source_map/mapper.rb +286 -259
- data/lib/solargraph/source_map.rb +224 -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 +888 -814
- data/lib/solargraph/version.rb +5 -5
- data/lib/solargraph/workspace/config.rb +258 -255
- data/lib/solargraph/workspace/gemspecs.rb +367 -0
- data/lib/solargraph/workspace/require_paths.rb +98 -97
- data/lib/solargraph/workspace.rb +242 -220
- data/lib/solargraph/yard_map/helpers.rb +49 -44
- data/lib/solargraph/yard_map/mapper/to_method.rb +136 -130
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +32 -31
- data/lib/solargraph/yard_map/mapper.rb +84 -79
- data/lib/solargraph/yard_map.rb +17 -18
- data/lib/solargraph/yard_tags.rb +20 -20
- data/lib/solargraph/yardoc.rb +90 -87
- data/lib/solargraph.rb +128 -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 +37 -35
- metadata +52 -51
- 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,130 +1,136 @@
|
|
|
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
|
-
|
|
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
|
-
end
|
|
108
|
-
|
|
109
|
-
# @param a [Array]
|
|
110
|
-
# @return [
|
|
111
|
-
def
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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
|
+
}.freeze
|
|
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
|
+
if closure.path == 'Kernel' && Kernel.private_instance_methods(false).include?(name.to_sym)
|
|
36
|
+
final_visibility ||= :private
|
|
37
|
+
end
|
|
38
|
+
final_visibility ||= visibility
|
|
39
|
+
final_visibility ||= :private if code_object.module_function? && final_scope == :instance
|
|
40
|
+
final_visibility ||= :public if code_object.module_function? && final_scope == :class
|
|
41
|
+
final_visibility ||= code_object.visibility
|
|
42
|
+
if code_object.is_alias?
|
|
43
|
+
origin_code_object = code_object.namespace.aliases[code_object]
|
|
44
|
+
pin = Pin::MethodAlias.new(
|
|
45
|
+
name: name,
|
|
46
|
+
location: location,
|
|
47
|
+
original: origin_code_object.name.to_s,
|
|
48
|
+
closure: closure,
|
|
49
|
+
comments: comments,
|
|
50
|
+
scope: final_scope,
|
|
51
|
+
visibility: final_visibility,
|
|
52
|
+
explicit: code_object.is_explicit?,
|
|
53
|
+
return_type: return_type,
|
|
54
|
+
parameters: [],
|
|
55
|
+
source: :yardoc
|
|
56
|
+
)
|
|
57
|
+
else
|
|
58
|
+
# @sg-ignore Need to add nil check here
|
|
59
|
+
pin = Pin::Method.new(
|
|
60
|
+
location: location,
|
|
61
|
+
closure: closure,
|
|
62
|
+
name: name,
|
|
63
|
+
comments: comments,
|
|
64
|
+
scope: final_scope,
|
|
65
|
+
visibility: final_visibility,
|
|
66
|
+
# @todo Might need to convert overloads to signatures
|
|
67
|
+
explicit: code_object.is_explicit?,
|
|
68
|
+
return_type: return_type,
|
|
69
|
+
attribute: code_object.is_attribute?,
|
|
70
|
+
parameters: [],
|
|
71
|
+
source: :yardoc
|
|
72
|
+
)
|
|
73
|
+
pin.parameters.concat get_parameters(code_object, location, comments, pin)
|
|
74
|
+
pin.parameters.freeze
|
|
75
|
+
end
|
|
76
|
+
logger.debug { "ToMethod.make: Just created method pin: #{pin.inspect}" }
|
|
77
|
+
pin
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
class << self
|
|
81
|
+
include Logging
|
|
82
|
+
|
|
83
|
+
private
|
|
84
|
+
|
|
85
|
+
# @param code_object [YARD::CodeObjects::Base]
|
|
86
|
+
# @param location [Location],
|
|
87
|
+
# @param comments [String]
|
|
88
|
+
# @param pin [Pin::Base]
|
|
89
|
+
# @return [Array<Solargraph::Pin::Parameter>]
|
|
90
|
+
def get_parameters code_object, location, comments, pin
|
|
91
|
+
return [] unless code_object.is_a?(YARD::CodeObjects::MethodObject)
|
|
92
|
+
# HACK: Skip `nil` and `self` parameters that are sometimes emitted
|
|
93
|
+
# for methods defined in C
|
|
94
|
+
# See https://github.com/castwide/solargraph/issues/345
|
|
95
|
+
code_object.parameters.select { |a| a[0] && a[0] != 'self' }.map do |a|
|
|
96
|
+
Solargraph::Pin::Parameter.new(
|
|
97
|
+
location: location,
|
|
98
|
+
closure: pin,
|
|
99
|
+
comments: comments,
|
|
100
|
+
name: arg_name(a),
|
|
101
|
+
presence: nil,
|
|
102
|
+
decl: arg_type(a),
|
|
103
|
+
asgn_code: a[1],
|
|
104
|
+
source: :yardoc
|
|
105
|
+
)
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# @param a [Array<String>]
|
|
110
|
+
# @return [String]
|
|
111
|
+
def arg_name a
|
|
112
|
+
a[0].gsub(/[^a-z0-9_]/i, '')
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# @param a [Array]
|
|
116
|
+
# @return [::Symbol]
|
|
117
|
+
def arg_type a
|
|
118
|
+
if a[0].start_with?('**')
|
|
119
|
+
:kwrestarg
|
|
120
|
+
elsif a[0].start_with?('*')
|
|
121
|
+
:restarg
|
|
122
|
+
elsif a[0].start_with?('&')
|
|
123
|
+
:blockarg
|
|
124
|
+
elsif a[0].end_with?(':')
|
|
125
|
+
a[1] ? :kwoptarg : :kwarg
|
|
126
|
+
elsif a[1]
|
|
127
|
+
:optarg
|
|
128
|
+
else
|
|
129
|
+
:arg
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
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
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
#
|
|
45
|
-
superclass
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
code_object.
|
|
56
|
-
result.push Solargraph::Pin::Reference::
|
|
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
|
+
case code_object
|
|
39
|
+
when YARD::CodeObjects::NamespaceObject
|
|
40
|
+
nspin = ToNamespace.make(code_object, @spec, @namespace_pins[code_object.namespace.to_s])
|
|
41
|
+
@namespace_pins[code_object.path] = nspin
|
|
42
|
+
result.push nspin
|
|
43
|
+
if code_object.is_a?(YARD::CodeObjects::ClassObject) && !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
|
+
superclass = if code_object.superclass.is_a?(YARD::CodeObjects::Proxy)
|
|
48
|
+
"::#{code_object.superclass}"
|
|
49
|
+
else
|
|
50
|
+
code_object.superclass.to_s
|
|
51
|
+
end
|
|
52
|
+
result.push Solargraph::Pin::Reference::Superclass.new(name: superclass, closure: nspin, source: :yard_map)
|
|
53
|
+
end
|
|
54
|
+
# @sg-ignore flow sensitive typing ought to be able to handle 'when ClassName'
|
|
55
|
+
code_object.class_mixins.each do |m|
|
|
56
|
+
result.push Solargraph::Pin::Reference::Extend.new(closure: nspin, name: m.path, source: :yard_map)
|
|
57
|
+
end
|
|
58
|
+
# @sg-ignore flow sensitive typing ought to be able to handle 'when ClassName'
|
|
59
|
+
code_object.instance_mixins.each do |m|
|
|
60
|
+
result.push Solargraph::Pin::Reference::Include.new(
|
|
61
|
+
closure: nspin, # @todo Fix this
|
|
62
|
+
name: m.path,
|
|
63
|
+
source: :yard_map
|
|
64
|
+
)
|
|
65
|
+
end
|
|
66
|
+
when YARD::CodeObjects::MethodObject
|
|
67
|
+
closure = @namespace_pins[code_object.namespace.to_s]
|
|
68
|
+
# @sg-ignore flow sensitive typing ought to be able to handle 'when ClassName'
|
|
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
|
+
when 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
|
data/lib/solargraph/yard_map.rb
CHANGED
|
@@ -1,18 +1,17 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'yard'
|
|
4
|
-
require 'solargraph/yard_tags'
|
|
5
|
-
|
|
6
|
-
module Solargraph
|
|
7
|
-
# The YardMap provides access to YARD documentation for the Ruby core, the
|
|
8
|
-
# stdlib, and gems.
|
|
9
|
-
#
|
|
10
|
-
class YardMap
|
|
11
|
-
class NoYardocError < StandardError; end
|
|
12
|
-
|
|
13
|
-
autoload :Cache, 'solargraph/yard_map/cache'
|
|
14
|
-
autoload :Mapper, 'solargraph/yard_map/mapper'
|
|
15
|
-
autoload :Helpers, 'solargraph/yard_map/helpers'
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'yard'
|
|
4
|
+
require 'solargraph/yard_tags'
|
|
5
|
+
|
|
6
|
+
module Solargraph
|
|
7
|
+
# The YardMap provides access to YARD documentation for the Ruby core, the
|
|
8
|
+
# stdlib, and gems.
|
|
9
|
+
#
|
|
10
|
+
class YardMap
|
|
11
|
+
class NoYardocError < StandardError; end
|
|
12
|
+
|
|
13
|
+
autoload :Cache, 'solargraph/yard_map/cache'
|
|
14
|
+
autoload :Mapper, 'solargraph/yard_map/mapper'
|
|
15
|
+
autoload :Helpers, 'solargraph/yard_map/helpers'
|
|
16
|
+
end
|
|
17
|
+
end
|
data/lib/solargraph/yard_tags.rb
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'yard'
|
|
4
|
-
|
|
5
|
-
# Change YARD log IO to avoid sending unexpected messages to STDOUT
|
|
6
|
-
YARD::Logger.instance.io = File.new(File::NULL, 'w')
|
|
7
|
-
|
|
8
|
-
module Solargraph
|
|
9
|
-
# A placeholder for the @!domain directive. It doesn't need to do anything
|
|
10
|
-
# for yardocs. It's only used for Solargraph API maps.
|
|
11
|
-
class DomainDirective < YARD::Tags::Directive
|
|
12
|
-
def call; end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
# Define a @type tag for documenting variables
|
|
17
|
-
YARD::Tags::Library.define_tag(
|
|
18
|
-
|
|
19
|
-
# Define an @!override directive for overriding method tags
|
|
20
|
-
YARD::Tags::Library.define_directive(
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'yard'
|
|
4
|
+
|
|
5
|
+
# Change YARD log IO to avoid sending unexpected messages to STDOUT
|
|
6
|
+
YARD::Logger.instance.io = File.new(File::NULL, 'w')
|
|
7
|
+
|
|
8
|
+
module Solargraph
|
|
9
|
+
# A placeholder for the @!domain directive. It doesn't need to do anything
|
|
10
|
+
# for yardocs. It's only used for Solargraph API maps.
|
|
11
|
+
class DomainDirective < YARD::Tags::Directive
|
|
12
|
+
def call; end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Define a @type tag for documenting variables
|
|
17
|
+
YARD::Tags::Library.define_tag('Type', :type, :with_types_and_name)
|
|
18
|
+
|
|
19
|
+
# Define an @!override directive for overriding method tags
|
|
20
|
+
YARD::Tags::Library.define_directive('override', :with_name, Solargraph::DomainDirective)
|