cosmicgraph 0.49.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 +7 -0
- data/.github/FUNDING.yml +1 -0
- data/.github/workflows/rspec.yml +41 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.yardopts +2 -0
- data/CHANGELOG.md +1150 -0
- data/Gemfile +7 -0
- data/LICENSE +21 -0
- data/README.md +136 -0
- data/Rakefile +25 -0
- data/SPONSORS.md +15 -0
- data/bin/solargraph +5 -0
- data/cosmicgraph.gemspec +44 -0
- data/lib/.rubocop.yml +22 -0
- data/lib/solargraph/api_map/bundler_methods.rb +22 -0
- data/lib/solargraph/api_map/cache.rb +70 -0
- data/lib/solargraph/api_map/source_to_yard.rb +81 -0
- data/lib/solargraph/api_map/store.rb +268 -0
- data/lib/solargraph/api_map.rb +704 -0
- data/lib/solargraph/bench.rb +27 -0
- data/lib/solargraph/cache.rb +51 -0
- data/lib/solargraph/complex_type/type_methods.rb +134 -0
- data/lib/solargraph/complex_type/unique_type.rb +132 -0
- data/lib/solargraph/complex_type.rb +254 -0
- data/lib/solargraph/convention/base.rb +33 -0
- data/lib/solargraph/convention/gemfile.rb +15 -0
- data/lib/solargraph/convention/gemspec.rb +22 -0
- data/lib/solargraph/convention/rakefile.rb +17 -0
- data/lib/solargraph/convention/rspec.rb +30 -0
- data/lib/solargraph/convention.rb +49 -0
- data/lib/solargraph/converters/dd.rb +12 -0
- data/lib/solargraph/converters/dl.rb +12 -0
- data/lib/solargraph/converters/dt.rb +12 -0
- data/lib/solargraph/converters/misc.rb +1 -0
- data/lib/solargraph/diagnostics/base.rb +29 -0
- data/lib/solargraph/diagnostics/require_not_found.rb +53 -0
- data/lib/solargraph/diagnostics/rubocop.rb +112 -0
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +65 -0
- data/lib/solargraph/diagnostics/severities.rb +15 -0
- data/lib/solargraph/diagnostics/type_check.rb +54 -0
- data/lib/solargraph/diagnostics/update_errors.rb +41 -0
- data/lib/solargraph/diagnostics.rb +55 -0
- data/lib/solargraph/documentor.rb +76 -0
- data/lib/solargraph/environ.rb +45 -0
- data/lib/solargraph/language_server/completion_item_kinds.rb +35 -0
- data/lib/solargraph/language_server/error_codes.rb +20 -0
- data/lib/solargraph/language_server/host/cataloger.rb +56 -0
- data/lib/solargraph/language_server/host/diagnoser.rb +89 -0
- data/lib/solargraph/language_server/host/dispatch.rb +111 -0
- data/lib/solargraph/language_server/host/message_worker.rb +59 -0
- data/lib/solargraph/language_server/host/sources.rb +156 -0
- data/lib/solargraph/language_server/host.rb +869 -0
- data/lib/solargraph/language_server/message/base.rb +89 -0
- data/lib/solargraph/language_server/message/cancel_request.rb +13 -0
- data/lib/solargraph/language_server/message/client/register_capability.rb +15 -0
- data/lib/solargraph/language_server/message/client.rb +11 -0
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +58 -0
- data/lib/solargraph/language_server/message/completion_item.rb +11 -0
- data/lib/solargraph/language_server/message/exit_notification.rb +13 -0
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +100 -0
- data/lib/solargraph/language_server/message/extended/document.rb +20 -0
- data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -0
- data/lib/solargraph/language_server/message/extended/download_core.rb +19 -0
- data/lib/solargraph/language_server/message/extended/environment.rb +25 -0
- data/lib/solargraph/language_server/message/extended/search.rb +20 -0
- data/lib/solargraph/language_server/message/extended.rb +21 -0
- data/lib/solargraph/language_server/message/initialize.rb +164 -0
- data/lib/solargraph/language_server/message/initialized.rb +27 -0
- data/lib/solargraph/language_server/message/method_not_found.rb +16 -0
- data/lib/solargraph/language_server/message/method_not_implemented.rb +14 -0
- data/lib/solargraph/language_server/message/shutdown.rb +13 -0
- data/lib/solargraph/language_server/message/text_document/base.rb +19 -0
- data/lib/solargraph/language_server/message/text_document/code_action.rb +17 -0
- data/lib/solargraph/language_server/message/text_document/completion.rb +59 -0
- data/lib/solargraph/language_server/message/text_document/definition.rb +38 -0
- data/lib/solargraph/language_server/message/text_document/did_change.rb +15 -0
- data/lib/solargraph/language_server/message/text_document/did_close.rb +15 -0
- data/lib/solargraph/language_server/message/text_document/did_open.rb +15 -0
- data/lib/solargraph/language_server/message/text_document/did_save.rb +17 -0
- data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -0
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +23 -0
- data/lib/solargraph/language_server/message/text_document/folding_range.rb +26 -0
- data/lib/solargraph/language_server/message/text_document/formatting.rb +126 -0
- data/lib/solargraph/language_server/message/text_document/hover.rb +56 -0
- data/lib/solargraph/language_server/message/text_document/on_type_formatting.rb +34 -0
- data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -0
- data/lib/solargraph/language_server/message/text_document/references.rb +16 -0
- data/lib/solargraph/language_server/message/text_document/rename.rb +19 -0
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +24 -0
- data/lib/solargraph/language_server/message/text_document.rb +28 -0
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +30 -0
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +40 -0
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +24 -0
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -0
- data/lib/solargraph/language_server/message/workspace.rb +14 -0
- data/lib/solargraph/language_server/message.rb +93 -0
- data/lib/solargraph/language_server/message_types.rb +14 -0
- data/lib/solargraph/language_server/request.rb +24 -0
- data/lib/solargraph/language_server/symbol_kinds.rb +36 -0
- data/lib/solargraph/language_server/transport/adapter.rb +53 -0
- data/lib/solargraph/language_server/transport/data_reader.rb +72 -0
- data/lib/solargraph/language_server/transport.rb +13 -0
- data/lib/solargraph/language_server/uri_helpers.rb +49 -0
- data/lib/solargraph/language_server.rb +19 -0
- data/lib/solargraph/library.rb +547 -0
- data/lib/solargraph/location.rb +37 -0
- data/lib/solargraph/logging.rb +27 -0
- data/lib/solargraph/page.rb +83 -0
- data/lib/solargraph/parser/comment_ripper.rb +52 -0
- data/lib/solargraph/parser/legacy/class_methods.rb +135 -0
- data/lib/solargraph/parser/legacy/flawed_builder.rb +16 -0
- data/lib/solargraph/parser/legacy/node_chainer.rb +148 -0
- data/lib/solargraph/parser/legacy/node_methods.rb +325 -0
- data/lib/solargraph/parser/legacy/node_processors/alias_node.rb +23 -0
- data/lib/solargraph/parser/legacy/node_processors/args_node.rb +35 -0
- data/lib/solargraph/parser/legacy/node_processors/begin_node.rb +15 -0
- data/lib/solargraph/parser/legacy/node_processors/block_node.rb +42 -0
- data/lib/solargraph/parser/legacy/node_processors/casgn_node.rb +35 -0
- data/lib/solargraph/parser/legacy/node_processors/cvasgn_node.rb +23 -0
- data/lib/solargraph/parser/legacy/node_processors/def_node.rb +63 -0
- data/lib/solargraph/parser/legacy/node_processors/defs_node.rb +36 -0
- data/lib/solargraph/parser/legacy/node_processors/gvasgn_node.rb +23 -0
- data/lib/solargraph/parser/legacy/node_processors/ivasgn_node.rb +38 -0
- data/lib/solargraph/parser/legacy/node_processors/lvasgn_node.rb +28 -0
- data/lib/solargraph/parser/legacy/node_processors/namespace_node.rb +39 -0
- data/lib/solargraph/parser/legacy/node_processors/orasgn_node.rb +16 -0
- data/lib/solargraph/parser/legacy/node_processors/resbody_node.rb +36 -0
- data/lib/solargraph/parser/legacy/node_processors/sclass_node.rb +42 -0
- data/lib/solargraph/parser/legacy/node_processors/send_node.rb +257 -0
- data/lib/solargraph/parser/legacy/node_processors/sym_node.rb +18 -0
- data/lib/solargraph/parser/legacy/node_processors.rb +54 -0
- data/lib/solargraph/parser/legacy.rb +12 -0
- data/lib/solargraph/parser/node_methods.rb +43 -0
- data/lib/solargraph/parser/node_processor/base.rb +77 -0
- data/lib/solargraph/parser/node_processor.rb +43 -0
- data/lib/solargraph/parser/region.rb +66 -0
- data/lib/solargraph/parser/rubyvm/class_methods.rb +149 -0
- data/lib/solargraph/parser/rubyvm/node_chainer.rb +160 -0
- data/lib/solargraph/parser/rubyvm/node_methods.rb +315 -0
- data/lib/solargraph/parser/rubyvm/node_processors/alias_node.rb +23 -0
- data/lib/solargraph/parser/rubyvm/node_processors/args_node.rb +85 -0
- data/lib/solargraph/parser/rubyvm/node_processors/begin_node.rb +15 -0
- data/lib/solargraph/parser/rubyvm/node_processors/block_node.rb +42 -0
- data/lib/solargraph/parser/rubyvm/node_processors/casgn_node.rb +33 -0
- data/lib/solargraph/parser/rubyvm/node_processors/cvasgn_node.rb +23 -0
- data/lib/solargraph/parser/rubyvm/node_processors/def_node.rb +75 -0
- data/lib/solargraph/parser/rubyvm/node_processors/defs_node.rb +68 -0
- data/lib/solargraph/parser/rubyvm/node_processors/gvasgn_node.rb +23 -0
- data/lib/solargraph/parser/rubyvm/node_processors/ivasgn_node.rb +38 -0
- data/lib/solargraph/parser/rubyvm/node_processors/kw_arg_node.rb +39 -0
- data/lib/solargraph/parser/rubyvm/node_processors/lit_node.rb +20 -0
- data/lib/solargraph/parser/rubyvm/node_processors/lvasgn_node.rb +27 -0
- data/lib/solargraph/parser/rubyvm/node_processors/namespace_node.rb +39 -0
- data/lib/solargraph/parser/rubyvm/node_processors/opt_arg_node.rb +26 -0
- data/lib/solargraph/parser/rubyvm/node_processors/orasgn_node.rb +15 -0
- data/lib/solargraph/parser/rubyvm/node_processors/resbody_node.rb +45 -0
- data/lib/solargraph/parser/rubyvm/node_processors/sclass_node.rb +32 -0
- data/lib/solargraph/parser/rubyvm/node_processors/scope_node.rb +15 -0
- data/lib/solargraph/parser/rubyvm/node_processors/send_node.rb +279 -0
- data/lib/solargraph/parser/rubyvm/node_processors/sym_node.rb +18 -0
- data/lib/solargraph/parser/rubyvm/node_processors.rb +63 -0
- data/lib/solargraph/parser/rubyvm/node_wrapper.rb +47 -0
- data/lib/solargraph/parser/rubyvm.rb +40 -0
- data/lib/solargraph/parser/snippet.rb +13 -0
- data/lib/solargraph/parser.rb +26 -0
- data/lib/solargraph/pin/base.rb +299 -0
- data/lib/solargraph/pin/base_variable.rb +84 -0
- data/lib/solargraph/pin/block.rb +73 -0
- data/lib/solargraph/pin/class_variable.rb +8 -0
- data/lib/solargraph/pin/closure.rb +37 -0
- data/lib/solargraph/pin/common.rb +70 -0
- data/lib/solargraph/pin/constant.rb +43 -0
- data/lib/solargraph/pin/conversions.rb +92 -0
- data/lib/solargraph/pin/documenting.rb +105 -0
- data/lib/solargraph/pin/duck_method.rb +16 -0
- data/lib/solargraph/pin/global_variable.rb +8 -0
- data/lib/solargraph/pin/instance_variable.rb +30 -0
- data/lib/solargraph/pin/keyword.rb +15 -0
- data/lib/solargraph/pin/keyword_param.rb +8 -0
- data/lib/solargraph/pin/local_variable.rb +55 -0
- data/lib/solargraph/pin/method.rb +335 -0
- data/lib/solargraph/pin/method_alias.rb +31 -0
- data/lib/solargraph/pin/namespace.rb +94 -0
- data/lib/solargraph/pin/parameter.rb +206 -0
- data/lib/solargraph/pin/proxy_type.rb +29 -0
- data/lib/solargraph/pin/reference/extend.rb +10 -0
- data/lib/solargraph/pin/reference/include.rb +10 -0
- data/lib/solargraph/pin/reference/override.rb +29 -0
- data/lib/solargraph/pin/reference/prepend.rb +10 -0
- data/lib/solargraph/pin/reference/require.rb +14 -0
- data/lib/solargraph/pin/reference/superclass.rb +10 -0
- data/lib/solargraph/pin/reference.rb +14 -0
- data/lib/solargraph/pin/search.rb +56 -0
- data/lib/solargraph/pin/signature.rb +23 -0
- data/lib/solargraph/pin/singleton.rb +11 -0
- data/lib/solargraph/pin/symbol.rb +47 -0
- data/lib/solargraph/pin.rb +38 -0
- data/lib/solargraph/position.rb +100 -0
- data/lib/solargraph/range.rb +95 -0
- data/lib/solargraph/rbs_map/conversions.rb +394 -0
- data/lib/solargraph/rbs_map/core_fills.rb +61 -0
- data/lib/solargraph/rbs_map/core_map.rb +38 -0
- data/lib/solargraph/rbs_map/core_signs.rb +33 -0
- data/lib/solargraph/rbs_map/stdlib_map.rb +36 -0
- data/lib/solargraph/rbs_map.rb +73 -0
- data/lib/solargraph/server_methods.rb +16 -0
- data/lib/solargraph/shell.rb +234 -0
- data/lib/solargraph/source/chain/block_variable.rb +13 -0
- data/lib/solargraph/source/chain/call.rb +215 -0
- data/lib/solargraph/source/chain/class_variable.rb +13 -0
- data/lib/solargraph/source/chain/constant.rb +75 -0
- data/lib/solargraph/source/chain/global_variable.rb +13 -0
- data/lib/solargraph/source/chain/hash.rb +28 -0
- data/lib/solargraph/source/chain/head.rb +19 -0
- data/lib/solargraph/source/chain/instance_variable.rb +13 -0
- data/lib/solargraph/source/chain/link.rb +71 -0
- data/lib/solargraph/source/chain/literal.rb +23 -0
- data/lib/solargraph/source/chain/or.rb +23 -0
- data/lib/solargraph/source/chain/q_call.rb +11 -0
- data/lib/solargraph/source/chain/variable.rb +13 -0
- data/lib/solargraph/source/chain/z_super.rb +30 -0
- data/lib/solargraph/source/chain.rb +179 -0
- data/lib/solargraph/source/change.rb +79 -0
- data/lib/solargraph/source/cursor.rb +164 -0
- data/lib/solargraph/source/encoding_fixes.rb +23 -0
- data/lib/solargraph/source/source_chainer.rb +191 -0
- data/lib/solargraph/source/updater.rb +54 -0
- data/lib/solargraph/source.rb +522 -0
- data/lib/solargraph/source_map/clip.rb +229 -0
- data/lib/solargraph/source_map/completion.rb +23 -0
- data/lib/solargraph/source_map/mapper.rb +241 -0
- data/lib/solargraph/source_map.rb +180 -0
- data/lib/solargraph/type_checker/checks.rb +112 -0
- data/lib/solargraph/type_checker/param_def.rb +35 -0
- data/lib/solargraph/type_checker/problem.rb +32 -0
- data/lib/solargraph/type_checker/rules.rb +57 -0
- data/lib/solargraph/type_checker.rb +549 -0
- data/lib/solargraph/version.rb +5 -0
- data/lib/solargraph/views/_method.erb +62 -0
- data/lib/solargraph/views/_name_type_tag.erb +10 -0
- data/lib/solargraph/views/_namespace.erb +24 -0
- data/lib/solargraph/views/document.erb +23 -0
- data/lib/solargraph/views/environment.erb +58 -0
- data/lib/solargraph/views/layout.erb +44 -0
- data/lib/solargraph/views/search.erb +11 -0
- data/lib/solargraph/workspace/config.rb +231 -0
- data/lib/solargraph/workspace.rb +212 -0
- data/lib/solargraph/yard_map/cache.rb +19 -0
- data/lib/solargraph/yard_map/helpers.rb +16 -0
- data/lib/solargraph/yard_map/mapper/to_constant.rb +25 -0
- data/lib/solargraph/yard_map/mapper/to_method.rb +81 -0
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +27 -0
- data/lib/solargraph/yard_map/mapper.rb +77 -0
- data/lib/solargraph/yard_map/to_method.rb +79 -0
- data/lib/solargraph/yard_map.rb +301 -0
- data/lib/solargraph.rb +69 -0
- data/lib/yard-solargraph.rb +33 -0
- metadata +587 -0
@@ -0,0 +1,95 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
# A pair of positions that compose a section of text.
|
5
|
+
#
|
6
|
+
class Range
|
7
|
+
# @return [Position]
|
8
|
+
attr_reader :start
|
9
|
+
|
10
|
+
# @return [Position]
|
11
|
+
attr_reader :ending
|
12
|
+
|
13
|
+
# @param start [Position]
|
14
|
+
# @param ending [Position]
|
15
|
+
def initialize start, ending
|
16
|
+
@start = start
|
17
|
+
@ending = ending
|
18
|
+
end
|
19
|
+
|
20
|
+
# Get a hash of the range. This representation is suitable for use in
|
21
|
+
# the language server protocol.
|
22
|
+
#
|
23
|
+
# @return [Hash<Symbol, Position>]
|
24
|
+
def to_hash
|
25
|
+
{
|
26
|
+
start: start.to_hash,
|
27
|
+
end: ending.to_hash
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
# True if the specified position is inside the range.
|
32
|
+
#
|
33
|
+
# @param position [Position, Array(Integer, Integer)]
|
34
|
+
# @return [Boolean]
|
35
|
+
def contain? position
|
36
|
+
position = Position.normalize(position)
|
37
|
+
return false if position.line < start.line || position.line > ending.line
|
38
|
+
return false if position.line == start.line && position.character < start.character
|
39
|
+
return false if position.line == ending.line && position.character > ending.character
|
40
|
+
true
|
41
|
+
end
|
42
|
+
|
43
|
+
# True if the range contains the specified position and the position does not precede it.
|
44
|
+
#
|
45
|
+
# @param position [Position, Array(Integer, Integer)]
|
46
|
+
# @return [Boolean]
|
47
|
+
def include? position
|
48
|
+
position = Position.normalize(position)
|
49
|
+
contain?(position) && !(position.line == start.line && position.character == start.character)
|
50
|
+
end
|
51
|
+
|
52
|
+
# Create a range from a pair of lines and characters.
|
53
|
+
#
|
54
|
+
# @param l1 [Integer] Starting line
|
55
|
+
# @param c1 [Integer] Starting character
|
56
|
+
# @param l2 [Integer] Ending line
|
57
|
+
# @param c2 [Integer] Ending character
|
58
|
+
# @return [Range]
|
59
|
+
def self.from_to l1, c1, l2, c2
|
60
|
+
Range.new(Position.new(l1, c1), Position.new(l2, c2))
|
61
|
+
end
|
62
|
+
|
63
|
+
# Get a range from a node.
|
64
|
+
#
|
65
|
+
# @param node [RubyVM::AbstractSyntaxTree::Node, Parser::AST::Node]
|
66
|
+
# @return [Range]
|
67
|
+
def self.from_node node
|
68
|
+
if defined?(RubyVM::AbstractSyntaxTree::Node)
|
69
|
+
if node.is_a?(RubyVM::AbstractSyntaxTree::Node)
|
70
|
+
Solargraph::Range.from_to(node.first_lineno - 1, node.first_column, node.last_lineno - 1, node.last_column)
|
71
|
+
end
|
72
|
+
elsif node&.loc && node.loc.expression
|
73
|
+
from_expr(node.loc.expression)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# Get a range from a Parser range, usually found in
|
78
|
+
# Parser::AST::Node#location#expression.
|
79
|
+
#
|
80
|
+
# @param expr [Parser::Source::Range]
|
81
|
+
# @return [Range]
|
82
|
+
def self.from_expr expr
|
83
|
+
from_to(expr.line, expr.column, expr.last_line, expr.last_column)
|
84
|
+
end
|
85
|
+
|
86
|
+
def == other
|
87
|
+
return false unless other.is_a?(Range)
|
88
|
+
start == other.start && ending == other.ending
|
89
|
+
end
|
90
|
+
|
91
|
+
def inspect
|
92
|
+
"#<#{self.class} #{start.inspect} to #{ending.inspect}>"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,394 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
class RbsMap
|
5
|
+
# Functions for converting RBS declarations to Solargraph pins
|
6
|
+
#
|
7
|
+
module Conversions
|
8
|
+
# A container for tracking the current context of the RBS conversion
|
9
|
+
# process, e.g., what visibility is declared for methods in the current
|
10
|
+
# scope
|
11
|
+
#
|
12
|
+
class Context
|
13
|
+
attr_reader :visibility
|
14
|
+
|
15
|
+
# @param visibility [Symbol]
|
16
|
+
def initialize visibility = :public
|
17
|
+
@visibility = visibility
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# @return [Array<Pin::Base>]
|
22
|
+
def pins
|
23
|
+
@pins ||= []
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def type_aliases
|
29
|
+
@type_aliases ||= {}
|
30
|
+
end
|
31
|
+
|
32
|
+
# @param decl [RBS::AST::Declarations::Base]
|
33
|
+
# @param closure [Pin::Closure]
|
34
|
+
# @return [void]
|
35
|
+
def convert_decl_to_pin decl, closure
|
36
|
+
cursor = pins.length
|
37
|
+
case decl
|
38
|
+
when RBS::AST::Declarations::Class
|
39
|
+
class_decl_to_pin decl
|
40
|
+
when RBS::AST::Declarations::Interface
|
41
|
+
# STDERR.puts "Skipping interface #{decl.name.relative!}"
|
42
|
+
interface_decl_to_pin decl
|
43
|
+
when RBS::AST::Declarations::Alias
|
44
|
+
type_aliases[decl.name.to_s] = decl
|
45
|
+
when RBS::AST::Declarations::Module
|
46
|
+
module_decl_to_pin decl
|
47
|
+
when RBS::AST::Declarations::Constant
|
48
|
+
constant_decl_to_pin decl
|
49
|
+
end
|
50
|
+
pins[cursor..-1].each do |pin|
|
51
|
+
pin.source = :rbs
|
52
|
+
next unless pin.is_a?(Pin::Namespace) && pin.type == :class
|
53
|
+
next if pins.any? { |p| p.path == "#{pin.path}.new"}
|
54
|
+
pins.push Solargraph::Pin::Method.new(
|
55
|
+
location: nil,
|
56
|
+
closure: pin.closure,
|
57
|
+
name: 'new',
|
58
|
+
comments: pin.comments,
|
59
|
+
scope: :class
|
60
|
+
)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def convert_members_to_pin decl, closure
|
65
|
+
context = Context.new
|
66
|
+
decl.members.each { |m| context = convert_member_to_pin(m, closure, context) }
|
67
|
+
end
|
68
|
+
|
69
|
+
def convert_member_to_pin member, closure, context
|
70
|
+
case member
|
71
|
+
when RBS::AST::Members::MethodDefinition
|
72
|
+
method_def_to_pin(member, closure)
|
73
|
+
when RBS::AST::Members::AttrReader
|
74
|
+
attr_reader_to_pin(member, closure)
|
75
|
+
when RBS::AST::Members::AttrWriter
|
76
|
+
attr_writer_to_pin(member, closure)
|
77
|
+
when RBS::AST::Members::AttrAccessor
|
78
|
+
attr_accessor_to_pin(member, closure)
|
79
|
+
when RBS::AST::Members::Include
|
80
|
+
include_to_pin(member, closure)
|
81
|
+
when RBS::AST::Members::Prepend
|
82
|
+
prepend_to_pin(member, closure)
|
83
|
+
when RBS::AST::Members::Extend
|
84
|
+
extend_to_pin(member, closure)
|
85
|
+
when RBS::AST::Members::Alias
|
86
|
+
alias_to_pin(member, closure)
|
87
|
+
when RBS::AST::Members::InstanceVariable
|
88
|
+
ivar_to_pin(member, closure)
|
89
|
+
when RBS::AST::Members::Public
|
90
|
+
return Context.new(visibility: :public)
|
91
|
+
when RBS::AST::Members::Private
|
92
|
+
return Context.new(visibility: :private)
|
93
|
+
when RBS::AST::Declarations::Base
|
94
|
+
convert_decl_to_pin(member, closure)
|
95
|
+
else
|
96
|
+
Solargraph.logger.warn "Skipping member #{member.class}"
|
97
|
+
end
|
98
|
+
context
|
99
|
+
end
|
100
|
+
|
101
|
+
# @param decl [RBS::AST::Declarations::Class]
|
102
|
+
# @return [void]
|
103
|
+
def class_decl_to_pin decl
|
104
|
+
class_pin = Solargraph::Pin::Namespace.new(
|
105
|
+
type: :class,
|
106
|
+
name: decl.name.relative!.to_s,
|
107
|
+
closure: Solargraph::Pin::ROOT_PIN,
|
108
|
+
comments: decl.comment&.string,
|
109
|
+
parameters: decl.type_params.map(&:name).map(&:to_s)
|
110
|
+
)
|
111
|
+
pins.push class_pin
|
112
|
+
if decl.super_class
|
113
|
+
pins.push Solargraph::Pin::Reference::Superclass.new(
|
114
|
+
closure: class_pin,
|
115
|
+
name: decl.super_class.name.relative!.to_s
|
116
|
+
)
|
117
|
+
end
|
118
|
+
convert_members_to_pin decl, class_pin
|
119
|
+
end
|
120
|
+
|
121
|
+
# @param decl [RBS::AST::Declarations::Interface]
|
122
|
+
# @return [void]
|
123
|
+
def interface_decl_to_pin decl
|
124
|
+
class_pin = Solargraph::Pin::Namespace.new(
|
125
|
+
type: :module,
|
126
|
+
name: decl.name.relative!.to_s,
|
127
|
+
closure: Solargraph::Pin::ROOT_PIN,
|
128
|
+
comments: decl.comment&.string,
|
129
|
+
# HACK: Using :hidden to keep interfaces from appearing in
|
130
|
+
# autocompletion
|
131
|
+
visibility: :hidden
|
132
|
+
)
|
133
|
+
class_pin.docstring.add_tag(YARD::Tags::Tag.new(:abstract, '(RBS interface)'))
|
134
|
+
pins.push class_pin
|
135
|
+
convert_members_to_pin decl, class_pin
|
136
|
+
end
|
137
|
+
|
138
|
+
# @param decl [RBS::AST::Declarations::Module]
|
139
|
+
# @return [void]
|
140
|
+
def module_decl_to_pin decl
|
141
|
+
module_pin = Solargraph::Pin::Namespace.new(
|
142
|
+
type: :module,
|
143
|
+
name: decl.name.relative!.to_s,
|
144
|
+
closure: Solargraph::Pin::ROOT_PIN,
|
145
|
+
comments: decl.comment&.string
|
146
|
+
)
|
147
|
+
pins.push module_pin
|
148
|
+
convert_members_to_pin decl, module_pin
|
149
|
+
end
|
150
|
+
|
151
|
+
# @param decl [RBS::AST::Declarations::Constant]
|
152
|
+
# @return [void]
|
153
|
+
def constant_decl_to_pin decl
|
154
|
+
parts = decl.name.relative!.to_s.split('::')
|
155
|
+
if parts.length > 1
|
156
|
+
name = parts.last
|
157
|
+
closure = pins.select { |pin| pin && pin.path == parts[0..-2].join('::') }.first
|
158
|
+
else
|
159
|
+
name = parts.first
|
160
|
+
closure = Solargraph::Pin::ROOT_PIN
|
161
|
+
end
|
162
|
+
pin = Solargraph::Pin::Constant.new(
|
163
|
+
name: name,
|
164
|
+
closure: closure,
|
165
|
+
comments: decl.comment&.string
|
166
|
+
)
|
167
|
+
tag = other_type_to_tag(decl.type)
|
168
|
+
# @todo Class or Module?
|
169
|
+
pin.docstring.add_tag(YARD::Tags::Tag.new(:return, '', "Class<#{tag}>"))
|
170
|
+
pins.push pin
|
171
|
+
end
|
172
|
+
|
173
|
+
# @param decl [RBS::AST::Members::MethodDefinition]
|
174
|
+
# @param closure [Pin::Closure]
|
175
|
+
# @return [void]
|
176
|
+
def method_def_to_pin decl, closure
|
177
|
+
if decl.instance?
|
178
|
+
pin = Solargraph::Pin::Method.new(
|
179
|
+
name: decl.name.to_s,
|
180
|
+
closure: closure,
|
181
|
+
comments: decl.comment&.string,
|
182
|
+
scope: :instance,
|
183
|
+
signatures: []
|
184
|
+
)
|
185
|
+
pin.signatures.concat method_def_to_sigs(decl, pin)
|
186
|
+
pins.push pin
|
187
|
+
if pin.name == 'initialize'
|
188
|
+
pins.push Solargraph::Pin::Method.new(
|
189
|
+
location: pin.location,
|
190
|
+
closure: pin.closure,
|
191
|
+
name: 'new',
|
192
|
+
comments: pin.comments,
|
193
|
+
scope: :class,
|
194
|
+
signatures: pin.signatures
|
195
|
+
)
|
196
|
+
pins.last.signatures.replace(
|
197
|
+
pin.signatures.map do |p|
|
198
|
+
Pin::Signature.new(
|
199
|
+
p.parameters,
|
200
|
+
ComplexType::SELF
|
201
|
+
)
|
202
|
+
end
|
203
|
+
)
|
204
|
+
# @todo Is this necessary?
|
205
|
+
# pin.instance_variable_set(:@visibility, :private)
|
206
|
+
# pin.instance_variable_set(:@return_type, ComplexType::VOID)
|
207
|
+
end
|
208
|
+
end
|
209
|
+
if decl.singleton?
|
210
|
+
pin = Solargraph::Pin::Method.new(
|
211
|
+
name: decl.name.to_s,
|
212
|
+
closure: closure,
|
213
|
+
comments: decl.comment&.string,
|
214
|
+
scope: :class,
|
215
|
+
signatures: []
|
216
|
+
)
|
217
|
+
pin.signatures.concat method_def_to_sigs(decl, pin)
|
218
|
+
pins.push pin
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
# @param decl [RBS::AST::Members::MethodDefinition]
|
223
|
+
# @param pin [Pin::Method]
|
224
|
+
def method_def_to_sigs decl, pin
|
225
|
+
decl.types.map do |type|
|
226
|
+
parameters, return_type = parts_of_function(type, pin)
|
227
|
+
block = if type.block
|
228
|
+
Pin::Signature.new(*parts_of_function(type.block, pin))
|
229
|
+
end
|
230
|
+
return_type = ComplexType.try_parse(method_type_to_tag(type))
|
231
|
+
Pin::Signature.new(parameters, return_type, block)
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
def parts_of_function type, pin
|
236
|
+
parameters = []
|
237
|
+
arg_num = -1
|
238
|
+
type.type.required_positionals.each do |param|
|
239
|
+
name = param.name ? param.name.to_s : "arg#{arg_num += 1}"
|
240
|
+
parameters.push Solargraph::Pin::Parameter.new(decl: :arg, name: name, closure: pin, return_type: ComplexType.try_parse(other_type_to_tag(param.type)))
|
241
|
+
end
|
242
|
+
type.type.optional_positionals.each do |param|
|
243
|
+
name = param.name ? param.name.to_s : "arg#{arg_num += 1}"
|
244
|
+
parameters.push Solargraph::Pin::Parameter.new(decl: :optarg, name: name, closure: pin)
|
245
|
+
end
|
246
|
+
if type.type.rest_positionals
|
247
|
+
name = type.type.rest_positionals.name ? type.type.rest_positionals.name.to_s : "arg#{arg_num += 1}"
|
248
|
+
parameters.push Solargraph::Pin::Parameter.new(decl: :restarg, name: name, closure: pin)
|
249
|
+
end
|
250
|
+
type.type.trailing_positionals.each do |param|
|
251
|
+
name = param.name ? param.name.to_s : "arg#{arg_num += 1}"
|
252
|
+
parameters.push Solargraph::Pin::Parameter.new(decl: :arg, name: name, closure: pin)
|
253
|
+
end
|
254
|
+
type.type.required_keywords.each do |orig, _param|
|
255
|
+
name = orig ? orig.to_s : "arg#{arg_num += 1}"
|
256
|
+
parameters.push Solargraph::Pin::Parameter.new(decl: :kwarg, name: name, closure: pin)
|
257
|
+
end
|
258
|
+
type.type.optional_keywords.each do |orig, _param|
|
259
|
+
name = orig ? orig.to_s : "arg#{arg_num += 1}"
|
260
|
+
parameters.push Solargraph::Pin::Parameter.new(decl: :kwoptarg, name: name, closure: pin)
|
261
|
+
end
|
262
|
+
if type.type.rest_keywords
|
263
|
+
name = type.type.rest_keywords.name ? type.type.rest_keywords.name.to_s : "arg#{arg_num += 1}"
|
264
|
+
parameters.push Solargraph::Pin::Parameter.new(decl: :kwrestarg, name: type.type.rest_keywords.name.to_s, closure: pin)
|
265
|
+
end
|
266
|
+
return_type = ComplexType.try_parse(method_type_to_tag(type))
|
267
|
+
[parameters, return_type]
|
268
|
+
end
|
269
|
+
|
270
|
+
def attr_reader_to_pin(decl, closure)
|
271
|
+
pin = Solargraph::Pin::Method.new(
|
272
|
+
name: decl.name.to_s,
|
273
|
+
closure: closure,
|
274
|
+
comments: decl.comment&.string,
|
275
|
+
scope: :instance,
|
276
|
+
attribute: true
|
277
|
+
)
|
278
|
+
pin.docstring.add_tag(YARD::Tags::Tag.new(:return, '', other_type_to_tag(decl.type)))
|
279
|
+
pins.push pin
|
280
|
+
end
|
281
|
+
|
282
|
+
def attr_writer_to_pin(decl, closure)
|
283
|
+
pin = Solargraph::Pin::Method.new(
|
284
|
+
name: "#{decl.name.to_s}=",
|
285
|
+
closure: closure,
|
286
|
+
comments: decl.comment&.string,
|
287
|
+
scope: :instance,
|
288
|
+
attribute: true
|
289
|
+
)
|
290
|
+
pin.docstring.add_tag(YARD::Tags::Tag.new(:return, '', other_type_to_tag(decl.type)))
|
291
|
+
pins.push pin
|
292
|
+
end
|
293
|
+
|
294
|
+
def attr_accessor_to_pin(decl, closure)
|
295
|
+
attr_reader_to_pin(decl, closure)
|
296
|
+
attr_writer_to_pin(decl, closure)
|
297
|
+
end
|
298
|
+
|
299
|
+
def ivar_to_pin(decl, closure)
|
300
|
+
pin = Solargraph::Pin::InstanceVariable.new(
|
301
|
+
name: decl.name.to_s,
|
302
|
+
closure: closure,
|
303
|
+
comments: decl.comment&.string
|
304
|
+
)
|
305
|
+
pin.docstring.add_tag(YARD::Tags::Tag.new(:type, '', other_type_to_tag(decl.type)))
|
306
|
+
pins.push pin
|
307
|
+
end
|
308
|
+
|
309
|
+
def include_to_pin decl, closure
|
310
|
+
pins.push Solargraph::Pin::Reference::Include.new(
|
311
|
+
name: decl.name.relative!.to_s,
|
312
|
+
closure: closure
|
313
|
+
)
|
314
|
+
end
|
315
|
+
|
316
|
+
def prepend_to_pin decl, closure
|
317
|
+
pins.push Solargraph::Pin::Reference::Prepend.new(
|
318
|
+
name: decl.name.relative!.to_s,
|
319
|
+
closure: closure
|
320
|
+
)
|
321
|
+
end
|
322
|
+
|
323
|
+
def extend_to_pin decl, closure
|
324
|
+
pins.push Solargraph::Pin::Reference::Extend.new(
|
325
|
+
name: decl.name.relative!.to_s,
|
326
|
+
closure: closure
|
327
|
+
)
|
328
|
+
end
|
329
|
+
|
330
|
+
def alias_to_pin decl, closure
|
331
|
+
pins.push Solargraph::Pin::MethodAlias.new(
|
332
|
+
name: decl.new_name.to_s,
|
333
|
+
original: decl.old_name.to_s,
|
334
|
+
closure: closure
|
335
|
+
)
|
336
|
+
end
|
337
|
+
|
338
|
+
RBS_TO_YARD_TYPE = {
|
339
|
+
'bool' => 'Boolean',
|
340
|
+
'string' => 'String',
|
341
|
+
'int' => 'Integer',
|
342
|
+
'untyped' => '',
|
343
|
+
'NilClass' => 'nil'
|
344
|
+
}
|
345
|
+
|
346
|
+
def method_type_to_tag type
|
347
|
+
if type_aliases.key?(type.type.return_type.to_s)
|
348
|
+
other_type_to_tag(type_aliases[type.type.return_type.to_s].type)
|
349
|
+
else
|
350
|
+
other_type_to_tag type.type.return_type
|
351
|
+
end
|
352
|
+
end
|
353
|
+
|
354
|
+
# @return [String]
|
355
|
+
def other_type_to_tag type
|
356
|
+
if type.is_a?(RBS::Types::Optional)
|
357
|
+
"#{other_type_to_tag(type.type)}, nil"
|
358
|
+
elsif type.is_a?(RBS::Types::Bases::Any)
|
359
|
+
# @todo Not sure what to do with Any yet
|
360
|
+
'BasicObject'
|
361
|
+
elsif type.is_a?(RBS::Types::Bases::Bool)
|
362
|
+
'Boolean'
|
363
|
+
elsif type.is_a?(RBS::Types::Tuple)
|
364
|
+
"Array(#{type.types.map { |t| other_type_to_tag(t) }.join(', ')})"
|
365
|
+
elsif type.is_a?(RBS::Types::Literal)
|
366
|
+
"#{type.literal}"
|
367
|
+
elsif type.is_a?(RBS::Types::Union)
|
368
|
+
type.types.map { |t| other_type_to_tag(t) }.join(', ')
|
369
|
+
elsif type.is_a?(RBS::Types::Record)
|
370
|
+
# @todo Better record support
|
371
|
+
'Hash'
|
372
|
+
elsif type.is_a?(RBS::Types::Bases::Nil)
|
373
|
+
'nil'
|
374
|
+
elsif type.is_a?(RBS::Types::Bases::Self)
|
375
|
+
'self'
|
376
|
+
elsif type.is_a?(RBS::Types::Bases::Void)
|
377
|
+
'void'
|
378
|
+
elsif type.is_a?(RBS::Types::Variable)
|
379
|
+
"param<#{type.name}>"
|
380
|
+
elsif type.is_a?(RBS::Types::ClassInstance) #&& !type.args.empty?
|
381
|
+
base = RBS_TO_YARD_TYPE[type.name.relative!.to_s] || type.name.relative!.to_s
|
382
|
+
params = type.args.map { |a| other_type_to_tag(a) }.reject { |t| t == 'undefined' }
|
383
|
+
return base if params.empty?
|
384
|
+
"#{base}<#{params.join(', ')}>"
|
385
|
+
elsif type.respond_to?(:name) && type.name.respond_to?(:relative!)
|
386
|
+
RBS_TO_YARD_TYPE[type.name.relative!.to_s] || type.name.relative!.to_s
|
387
|
+
else
|
388
|
+
Solargraph.logger.warn "Unrecognized RBS type: #{type.class} #{type}"
|
389
|
+
'undefined'
|
390
|
+
end
|
391
|
+
end
|
392
|
+
end
|
393
|
+
end
|
394
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
class RbsMap
|
5
|
+
# Override pins to fill gaps in RbsMap::CoreMap coverage
|
6
|
+
#
|
7
|
+
module CoreFills
|
8
|
+
Override = Pin::Reference::Override
|
9
|
+
|
10
|
+
KEYWORDS = [
|
11
|
+
'__ENCODING__', '__LINE__', '__FILE__', 'BEGIN', 'END', 'alias', 'and',
|
12
|
+
'begin', 'break', 'case', 'class', 'def', 'defined?', 'do', 'else',
|
13
|
+
'elsif', 'end', 'ensure', 'false', 'for', 'if', 'in', 'module', 'next',
|
14
|
+
'nil', 'not', 'or', 'redo', 'rescue', 'retry', 'return', 'self', 'super',
|
15
|
+
'then', 'true', 'undef', 'unless', 'until', 'when', 'while', 'yield'
|
16
|
+
].map { |k| Pin::Keyword.new(k) }
|
17
|
+
|
18
|
+
YIELDPARAMS = [
|
19
|
+
Override.from_comment('Object#tap', %(
|
20
|
+
@return [self]
|
21
|
+
@yieldparam [self]
|
22
|
+
)),
|
23
|
+
Override.from_comment('String#each_line', %(
|
24
|
+
@yieldparam [String]
|
25
|
+
)),
|
26
|
+
]
|
27
|
+
|
28
|
+
methods_with_yieldparam_subtypes = %w[
|
29
|
+
Array#each Array#map Array#map! Array#any? Array#all? Array#index
|
30
|
+
Array#keep_if Array#delete_if
|
31
|
+
Enumerable#each_entry Enumerable#map Enumerable#any? Enumerable#all?
|
32
|
+
Enumerable#select Enumerable#reject
|
33
|
+
Set#each
|
34
|
+
]
|
35
|
+
|
36
|
+
YIELDPARAM_SINGLE_PARAMETERS = methods_with_yieldparam_subtypes.map do |path|
|
37
|
+
Override.from_comment(path, %(
|
38
|
+
@yieldparam_single_parameter
|
39
|
+
))
|
40
|
+
end
|
41
|
+
|
42
|
+
CLASS_RETURN_TYPES = [
|
43
|
+
Override.method_return('Class#new', 'self'),
|
44
|
+
Override.method_return('Class.new', 'Class<BasicObject>'),
|
45
|
+
Override.method_return('Class#allocate', 'self'),
|
46
|
+
Override.method_return('Class.allocate', 'Class<BasicObject>'),
|
47
|
+
]
|
48
|
+
|
49
|
+
# HACK: Add Errno exception classes
|
50
|
+
errno = Solargraph::Pin::Namespace.new(name: 'Errno')
|
51
|
+
errnos = []
|
52
|
+
Errno.constants.each do |const|
|
53
|
+
errnos.push Solargraph::Pin::Namespace.new(type: :class, name: const.to_s, closure: errno)
|
54
|
+
errnos.push Solargraph::Pin::Reference::Superclass.new(closure: errnos.last, name: 'SystemCallError')
|
55
|
+
end
|
56
|
+
ERRNOS = errnos
|
57
|
+
|
58
|
+
ALL = KEYWORDS + YIELDPARAMS + YIELDPARAM_SINGLE_PARAMETERS + CLASS_RETURN_TYPES + ERRNOS
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
class RbsMap
|
5
|
+
# Ruby core pins
|
6
|
+
#
|
7
|
+
class CoreMap
|
8
|
+
include Conversions
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
cache = Cache.load('core.ser')
|
12
|
+
if cache
|
13
|
+
pins.replace cache
|
14
|
+
else
|
15
|
+
loader = RBS::EnvironmentLoader.new(repository: RBS::Repository.new(no_stdlib: true))
|
16
|
+
environment = RBS::Environment.from_loader(loader).resolve_type_names
|
17
|
+
environment.declarations.each { |decl| convert_decl_to_pin(decl, Solargraph::Pin::ROOT_PIN) }
|
18
|
+
pins.concat RbsMap::CoreFills::ALL
|
19
|
+
processed = ApiMap::Store.new(pins).pins.reject { |p| p.is_a?(Solargraph::Pin::Reference::Override) }
|
20
|
+
pins.replace processed
|
21
|
+
|
22
|
+
Cache.save('core.ser', pins)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def method_def_to_sigs decl, pin
|
27
|
+
stubs = CoreSigns.sign(pin.path)
|
28
|
+
return super unless stubs
|
29
|
+
stubs.map do |stub|
|
30
|
+
Pin::Signature.new(
|
31
|
+
[],
|
32
|
+
ComplexType.try_parse(stub.return_type)
|
33
|
+
)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Solargraph
|
2
|
+
class RbsMap
|
3
|
+
module CoreSigns
|
4
|
+
Override = Pin::Reference::Override
|
5
|
+
|
6
|
+
class Stub
|
7
|
+
attr_reader :parameters
|
8
|
+
|
9
|
+
attr_reader :return_type
|
10
|
+
|
11
|
+
def initialize parameters, return_type
|
12
|
+
@parameters = parameters
|
13
|
+
@return_type = return_type
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
SIGNATURE_MAP = {
|
18
|
+
'Object#class' => [
|
19
|
+
Stub.new(
|
20
|
+
[],
|
21
|
+
'Class<self>'
|
22
|
+
)
|
23
|
+
]
|
24
|
+
}
|
25
|
+
|
26
|
+
# @param path [String]
|
27
|
+
# @return [Array<Stub>]
|
28
|
+
def self.sign path
|
29
|
+
SIGNATURE_MAP[path]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rbs'
|
4
|
+
require 'set'
|
5
|
+
|
6
|
+
module Solargraph
|
7
|
+
class RbsMap
|
8
|
+
# Ruby stdlib pins
|
9
|
+
#
|
10
|
+
class StdlibMap < RbsMap
|
11
|
+
# @type [Hash{String => RbsMap}]
|
12
|
+
@stdlib_maps_hash = {}
|
13
|
+
|
14
|
+
# @param library [String]
|
15
|
+
def initialize library
|
16
|
+
cache = Cache.load('stdlib', "#{library}.ser")
|
17
|
+
if cache
|
18
|
+
pins.replace cache
|
19
|
+
else
|
20
|
+
super
|
21
|
+
Cache.save('stdlib', "#{library}.ser", pins)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# @param library [String]
|
26
|
+
# @return [StdlibMap]
|
27
|
+
def self.load library
|
28
|
+
@stdlib_maps_hash[library] ||= StdlibMap.new(library)
|
29
|
+
end
|
30
|
+
|
31
|
+
def repository
|
32
|
+
@repository ||= RBS::Repository.new
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|