solargraph 0.54.4 → 0.57.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/linting.yml +125 -0
- data/.github/workflows/plugins.yml +149 -5
- data/.github/workflows/rspec.yml +39 -4
- data/.github/workflows/typecheck.yml +8 -3
- data/.gitignore +7 -0
- data/.overcommit.yml +72 -0
- data/.rspec +1 -0
- data/.rubocop.yml +66 -0
- data/.rubocop_todo.yml +2627 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +104 -0
- data/README.md +20 -6
- data/Rakefile +125 -13
- data/lib/solargraph/api_map/cache.rb +3 -2
- data/lib/solargraph/api_map/constants.rb +218 -0
- data/lib/solargraph/api_map/index.rb +44 -42
- data/lib/solargraph/api_map/source_to_yard.rb +10 -4
- data/lib/solargraph/api_map/store.rb +165 -32
- data/lib/solargraph/api_map.rb +319 -243
- data/lib/solargraph/bench.rb +18 -1
- data/lib/solargraph/complex_type/type_methods.rb +7 -1
- data/lib/solargraph/complex_type/unique_type.rb +105 -16
- data/lib/solargraph/complex_type.rb +40 -7
- data/lib/solargraph/convention/active_support_concern.rb +111 -0
- data/lib/solargraph/convention/base.rb +20 -3
- data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -0
- data/lib/solargraph/convention/data_definition/data_definition_node.rb +91 -0
- data/lib/solargraph/convention/data_definition.rb +105 -0
- data/lib/solargraph/convention/gemspec.rb +3 -2
- data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +61 -0
- data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +102 -0
- data/lib/solargraph/convention/struct_definition.rb +164 -0
- data/lib/solargraph/convention.rb +35 -4
- data/lib/solargraph/diagnostics/rubocop.rb +6 -1
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +1 -1
- data/lib/solargraph/doc_map.rb +313 -65
- data/lib/solargraph/environ.rb +9 -2
- data/lib/solargraph/gem_pins.rb +60 -38
- data/lib/solargraph/language_server/host/dispatch.rb +2 -0
- data/lib/solargraph/language_server/host/message_worker.rb +13 -7
- data/lib/solargraph/language_server/host.rb +14 -3
- data/lib/solargraph/language_server/message/base.rb +2 -1
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +2 -0
- data/lib/solargraph/language_server/message/extended/document.rb +5 -2
- data/lib/solargraph/language_server/message/extended/document_gems.rb +3 -3
- data/lib/solargraph/language_server/message/text_document/definition.rb +2 -0
- data/lib/solargraph/language_server/message/text_document/formatting.rb +16 -2
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +1 -0
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +2 -0
- data/lib/solargraph/language_server/progress.rb +8 -0
- data/lib/solargraph/language_server/request.rb +1 -0
- data/lib/solargraph/library.rb +53 -32
- data/lib/solargraph/location.rb +23 -0
- data/lib/solargraph/logging.rb +12 -2
- data/lib/solargraph/page.rb +4 -0
- data/lib/solargraph/parser/comment_ripper.rb +20 -7
- data/lib/solargraph/parser/flow_sensitive_typing.rb +255 -0
- data/lib/solargraph/parser/node_methods.rb +16 -2
- data/lib/solargraph/parser/node_processor/base.rb +10 -5
- data/lib/solargraph/parser/node_processor.rb +26 -9
- data/lib/solargraph/parser/parser_gem/class_methods.rb +17 -15
- data/lib/solargraph/parser/parser_gem/flawed_builder.rb +1 -0
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +13 -11
- data/lib/solargraph/parser/parser_gem/node_methods.rb +8 -4
- data/lib/solargraph/parser/parser_gem/node_processors/alias_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +21 -0
- data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +4 -2
- data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +7 -4
- data/lib/solargraph/parser/parser_gem/node_processors/casgn_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/cvasgn_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +6 -3
- data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/gvasgn_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +23 -0
- data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +4 -2
- data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +7 -1
- data/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb +8 -7
- data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +42 -0
- data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +1 -0
- data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +3 -1
- data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +4 -3
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +63 -30
- data/lib/solargraph/parser/parser_gem/node_processors/sym_node.rb +3 -1
- data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -0
- data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +29 -0
- data/lib/solargraph/parser/parser_gem/node_processors.rb +14 -0
- data/lib/solargraph/parser/region.rb +4 -1
- data/lib/solargraph/parser/snippet.rb +2 -0
- data/lib/solargraph/parser.rb +1 -0
- data/lib/solargraph/pin/base.rb +360 -30
- data/lib/solargraph/pin/base_variable.rb +16 -10
- data/lib/solargraph/pin/block.rb +2 -0
- data/lib/solargraph/pin/breakable.rb +9 -0
- data/lib/solargraph/pin/callable.rb +83 -3
- data/lib/solargraph/pin/closure.rb +20 -1
- data/lib/solargraph/pin/common.rb +10 -1
- data/lib/solargraph/pin/constant.rb +2 -0
- data/lib/solargraph/pin/delegated_method.rb +21 -1
- data/lib/solargraph/pin/documenting.rb +16 -0
- data/lib/solargraph/pin/keyword.rb +7 -2
- data/lib/solargraph/pin/local_variable.rb +18 -6
- data/lib/solargraph/pin/method.rb +175 -46
- data/lib/solargraph/pin/method_alias.rb +3 -0
- data/lib/solargraph/pin/namespace.rb +17 -9
- data/lib/solargraph/pin/parameter.rb +78 -19
- data/lib/solargraph/pin/proxy_type.rb +13 -6
- data/lib/solargraph/pin/reference/override.rb +24 -6
- data/lib/solargraph/pin/reference/require.rb +2 -2
- data/lib/solargraph/pin/reference/superclass.rb +5 -0
- data/lib/solargraph/pin/reference.rb +26 -0
- data/lib/solargraph/pin/search.rb +3 -1
- data/lib/solargraph/pin/signature.rb +44 -0
- data/lib/solargraph/pin/singleton.rb +1 -1
- data/lib/solargraph/pin/symbol.rb +8 -2
- data/lib/solargraph/pin/until.rb +18 -0
- data/lib/solargraph/pin/while.rb +18 -0
- data/lib/solargraph/pin.rb +4 -1
- data/lib/solargraph/pin_cache.rb +245 -0
- data/lib/solargraph/position.rb +11 -0
- data/lib/solargraph/range.rb +10 -0
- data/lib/solargraph/rbs_map/conversions.rb +226 -70
- data/lib/solargraph/rbs_map/core_fills.rb +32 -16
- data/lib/solargraph/rbs_map/core_map.rb +37 -11
- data/lib/solargraph/rbs_map/stdlib_map.rb +15 -5
- data/lib/solargraph/rbs_map.rb +88 -18
- data/lib/solargraph/shell.rb +20 -18
- data/lib/solargraph/source/chain/array.rb +11 -7
- data/lib/solargraph/source/chain/block_symbol.rb +1 -1
- data/lib/solargraph/source/chain/block_variable.rb +1 -1
- data/lib/solargraph/source/chain/call.rb +53 -23
- data/lib/solargraph/source/chain/constant.rb +1 -1
- data/lib/solargraph/source/chain/hash.rb +4 -3
- data/lib/solargraph/source/chain/head.rb +1 -1
- data/lib/solargraph/source/chain/if.rb +1 -1
- data/lib/solargraph/source/chain/link.rb +12 -1
- data/lib/solargraph/source/chain/literal.rb +22 -2
- data/lib/solargraph/source/chain/or.rb +1 -1
- data/lib/solargraph/source/chain/z_super.rb +1 -1
- data/lib/solargraph/source/chain.rb +84 -47
- data/lib/solargraph/source/change.rb +2 -2
- data/lib/solargraph/source/cursor.rb +2 -3
- data/lib/solargraph/source/source_chainer.rb +3 -3
- data/lib/solargraph/source.rb +5 -2
- data/lib/solargraph/source_map/clip.rb +4 -2
- data/lib/solargraph/source_map/data.rb +4 -0
- data/lib/solargraph/source_map/mapper.rb +13 -7
- data/lib/solargraph/source_map.rb +21 -31
- data/lib/solargraph/type_checker/checks.rb +4 -0
- data/lib/solargraph/type_checker/param_def.rb +2 -0
- data/lib/solargraph/type_checker/rules.rb +8 -0
- data/lib/solargraph/type_checker.rb +208 -128
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/views/_method.erb +10 -10
- data/lib/solargraph/views/_namespace.erb +3 -3
- data/lib/solargraph/views/document.erb +10 -10
- data/lib/solargraph/workspace/config.rb +1 -3
- data/lib/solargraph/workspace/require_paths.rb +98 -0
- data/lib/solargraph/workspace.rb +38 -52
- data/lib/solargraph/yard_map/helpers.rb +29 -1
- data/lib/solargraph/yard_map/mapper/to_constant.rb +7 -5
- data/lib/solargraph/yard_map/mapper/to_method.rb +53 -18
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +9 -7
- data/lib/solargraph/yard_map/mapper.rb +4 -3
- data/lib/solargraph/yard_map/to_method.rb +4 -2
- data/lib/solargraph/yardoc.rb +22 -10
- data/lib/solargraph.rb +34 -1
- data/rbs/fills/tuple.rbs +149 -0
- data/rbs_collection.yaml +19 -0
- data/sig/shims/parser/3.2.0.1/builders/default.rbs +195 -0
- data/sig/shims/thor/1.2.0.1/.rbs_meta.yaml +9 -0
- data/sig/shims/thor/1.2.0.1/manifest.yaml +7 -0
- data/sig/shims/thor/1.2.0.1/thor.rbs +17 -0
- data/solargraph.gemspec +15 -4
- metadata +157 -15
- data/lib/.rubocop.yml +0 -22
- data/lib/solargraph/cache.rb +0 -77
@@ -6,7 +6,7 @@ module Solargraph
|
|
6
6
|
# @return [Signature]
|
7
7
|
attr_reader :block
|
8
8
|
|
9
|
-
|
9
|
+
attr_accessor :parameters
|
10
10
|
|
11
11
|
# @return [ComplexType, nil]
|
12
12
|
attr_reader :return_type
|
@@ -21,11 +21,74 @@ module Solargraph
|
|
21
21
|
@parameters = parameters
|
22
22
|
end
|
23
23
|
|
24
|
+
# @return [String]
|
25
|
+
def method_namespace
|
26
|
+
closure.namespace
|
27
|
+
end
|
28
|
+
|
29
|
+
# @param other [self]
|
30
|
+
# @return [Pin::Block, nil]
|
31
|
+
def combine_blocks(other)
|
32
|
+
if block.nil?
|
33
|
+
other.block
|
34
|
+
elsif other.block.nil?
|
35
|
+
block
|
36
|
+
else
|
37
|
+
choose_pin_attr(other, :block)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
# @param other [self]
|
42
|
+
# @param attrs [Hash{Symbol => Object}]
|
43
|
+
#
|
44
|
+
# @return [self]
|
45
|
+
def combine_with(other, attrs={})
|
46
|
+
new_attrs = {
|
47
|
+
block: combine_blocks(other),
|
48
|
+
return_type: combine_return_type(other),
|
49
|
+
}.merge(attrs)
|
50
|
+
new_attrs[:parameters] = choose_parameters(other).clone.freeze unless new_attrs.key?(:parameters)
|
51
|
+
super(other, new_attrs)
|
52
|
+
end
|
53
|
+
|
24
54
|
# @return [::Array<String>]
|
25
55
|
def parameter_names
|
26
56
|
@parameter_names ||= parameters.map(&:name)
|
27
57
|
end
|
28
58
|
|
59
|
+
def generics
|
60
|
+
[]
|
61
|
+
end
|
62
|
+
|
63
|
+
# @param other [self]
|
64
|
+
# @return [Array<Pin::Parameter>]
|
65
|
+
def choose_parameters(other)
|
66
|
+
raise "Trying to combine two pins with different arities - \nself =#{inspect}, \nother=#{other.inspect}, \n\n self.arity=#{self.arity}, \nother.arity=#{other.arity}" if other.arity != arity
|
67
|
+
parameters.zip(other.parameters).map do |param, other_param|
|
68
|
+
if param.nil? && other_param.block?
|
69
|
+
other_param
|
70
|
+
elsif other_param.nil? && param.block?
|
71
|
+
param
|
72
|
+
else
|
73
|
+
param.combine_with(other_param)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
# @return [Array<Pin::Parameter>]
|
79
|
+
def blockless_parameters
|
80
|
+
if parameters.last&.block?
|
81
|
+
parameters[0..-2]
|
82
|
+
else
|
83
|
+
parameters
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
# @return [Array]
|
88
|
+
def arity
|
89
|
+
[generics, blockless_parameters.map(&:arity_decl), block&.arity]
|
90
|
+
end
|
91
|
+
|
29
92
|
# @param generics_to_resolve [Enumerable<String>]
|
30
93
|
# @param arg_types [Array<ComplexType>, nil]
|
31
94
|
# @param return_type_context [ComplexType, nil]
|
@@ -57,6 +120,24 @@ module Solargraph
|
|
57
120
|
callable
|
58
121
|
end
|
59
122
|
|
123
|
+
def typify api_map
|
124
|
+
type = super
|
125
|
+
return type if type.defined?
|
126
|
+
if method_name.end_with?('?')
|
127
|
+
logger.debug { "Callable#typify(self=#{self}) => Boolean (? suffix)" }
|
128
|
+
ComplexType::BOOLEAN
|
129
|
+
else
|
130
|
+
logger.debug { "Callable#typify(self=#{self}) => undefined" }
|
131
|
+
ComplexType::UNDEFINED
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
# @return [String]
|
136
|
+
def method_name
|
137
|
+
raise "closure was nil in #{self.inspect}" if closure.nil?
|
138
|
+
@method_name ||= closure.name
|
139
|
+
end
|
140
|
+
|
60
141
|
# @param generics_to_resolve [::Array<String>]
|
61
142
|
# @param arg_types [Array<ComplexType>, nil]
|
62
143
|
# @param return_type_context [ComplexType, nil]
|
@@ -124,6 +205,7 @@ module Solargraph
|
|
124
205
|
true
|
125
206
|
end
|
126
207
|
|
208
|
+
# @return [Integer]
|
127
209
|
def mandatory_positional_param_count
|
128
210
|
parameters.count(&:arg?)
|
129
211
|
end
|
@@ -140,8 +222,6 @@ module Solargraph
|
|
140
222
|
protected
|
141
223
|
|
142
224
|
attr_writer :block
|
143
|
-
|
144
|
-
attr_writer :parameters
|
145
225
|
end
|
146
226
|
end
|
147
227
|
end
|
@@ -8,10 +8,29 @@ module Solargraph
|
|
8
8
|
|
9
9
|
# @param scope [::Symbol] :class or :instance
|
10
10
|
# @param generics [::Array<Pin::Parameter>, nil]
|
11
|
-
|
11
|
+
# @param generic_defaults [Hash{String => ComplexType}]
|
12
|
+
def initialize scope: :class, generics: nil, generic_defaults: {}, **splat
|
12
13
|
super(**splat)
|
13
14
|
@scope = scope
|
14
15
|
@generics = generics
|
16
|
+
@generic_defaults = generic_defaults
|
17
|
+
end
|
18
|
+
|
19
|
+
# @return [Hash{String => ComplexType}]
|
20
|
+
def generic_defaults
|
21
|
+
@generic_defaults ||= {}
|
22
|
+
end
|
23
|
+
|
24
|
+
# @param other [self]
|
25
|
+
# @param attrs [Hash{Symbol => Object}]
|
26
|
+
#
|
27
|
+
# @return [self]
|
28
|
+
def combine_with(other, attrs={})
|
29
|
+
new_attrs = {
|
30
|
+
scope: assert_same(other, :scope),
|
31
|
+
generics: generics.empty? ? other.generics : generics,
|
32
|
+
}.merge(attrs)
|
33
|
+
super(other, new_attrs)
|
15
34
|
end
|
16
35
|
|
17
36
|
def context
|
@@ -3,11 +3,20 @@
|
|
3
3
|
module Solargraph
|
4
4
|
module Pin
|
5
5
|
module Common
|
6
|
+
# @!method source
|
7
|
+
# @abstract
|
8
|
+
# @return [Source, nil]
|
9
|
+
# @type @closure [Pin::Closure, nil]
|
10
|
+
|
6
11
|
# @return [Location]
|
7
12
|
attr_reader :location
|
8
13
|
|
14
|
+
# @sg-ignore Solargraph::Pin::Common#closure return type could not be inferred
|
9
15
|
# @return [Pin::Closure, nil]
|
10
|
-
|
16
|
+
def closure
|
17
|
+
Solargraph.assert_or_log(:closure, "Closure not set on #{self.class} #{name.inspect} from #{source.inspect}") unless @closure
|
18
|
+
@closure
|
19
|
+
end
|
11
20
|
|
12
21
|
# @return [String]
|
13
22
|
def name
|
@@ -5,6 +5,8 @@ module Solargraph
|
|
5
5
|
class Constant < BaseVariable
|
6
6
|
attr_reader :visibility
|
7
7
|
|
8
|
+
# @param visibility [::Symbol] The visibility of the constant (:public, :protected, or :private)
|
9
|
+
# @param splat [Hash] Additional options supported by superclasses
|
8
10
|
def initialize visibility: :public, **splat
|
9
11
|
super(**splat)
|
10
12
|
@visibility = visibility
|
@@ -24,8 +24,26 @@ module Solargraph
|
|
24
24
|
@receiver_method_name = receiver_method_name
|
25
25
|
end
|
26
26
|
|
27
|
-
|
27
|
+
def inner_desc
|
28
|
+
"#{name} => #{@receiver_chain}##{@receiver_method_name}"
|
29
|
+
end
|
30
|
+
|
31
|
+
def location
|
32
|
+
return super if super
|
33
|
+
|
34
|
+
@resolved_method&.send(:location)
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
def type_location
|
39
|
+
return super if super
|
40
|
+
|
41
|
+
@resolved_method&.send(:type_location)
|
42
|
+
end
|
43
|
+
|
44
|
+
%i[comments parameters return_type signatures].each do |method|
|
28
45
|
define_method(method) do
|
46
|
+
# @sg-ignore Need to set context correctly in define_method blocks
|
29
47
|
@resolved_method ? @resolved_method.send(method) : super()
|
30
48
|
end
|
31
49
|
end
|
@@ -33,7 +51,9 @@ module Solargraph
|
|
33
51
|
%i[typify realize infer probe].each do |method|
|
34
52
|
# @param api_map [ApiMap]
|
35
53
|
define_method(method) do |api_map|
|
54
|
+
# @sg-ignore Unresolved call to resolve_method
|
36
55
|
resolve_method(api_map)
|
56
|
+
# @sg-ignore Need to set context correctly in define_method blocks
|
37
57
|
@resolved_method ? @resolved_method.send(method, api_map) : super(api_map)
|
38
58
|
end
|
39
59
|
end
|
@@ -9,6 +9,22 @@ require 'solargraph/converters/dt'
|
|
9
9
|
require 'solargraph/converters/dd'
|
10
10
|
require 'solargraph/converters/misc'
|
11
11
|
|
12
|
+
# @todo upstream this definition
|
13
|
+
|
14
|
+
# @!parse
|
15
|
+
# module ::Kramdown
|
16
|
+
# class Document
|
17
|
+
# # @return [String]
|
18
|
+
# def to_html; end
|
19
|
+
# end
|
20
|
+
# end
|
21
|
+
# module ReverseMarkdown
|
22
|
+
# # @param input [String]
|
23
|
+
# # @param options [Hash]
|
24
|
+
# # @return [String]
|
25
|
+
# def self.convert(input, options = {}); end
|
26
|
+
# end
|
27
|
+
|
12
28
|
module Solargraph
|
13
29
|
module Pin
|
14
30
|
# A module to add the Pin::Base#documentation method.
|
@@ -3,8 +3,13 @@
|
|
3
3
|
module Solargraph
|
4
4
|
module Pin
|
5
5
|
class Keyword < Base
|
6
|
-
def initialize
|
7
|
-
|
6
|
+
def initialize(name, **kwargs)
|
7
|
+
# @sg-ignore "Unrecognized keyword argument kwargs to Solargraph::Pin::Base#initialize"
|
8
|
+
super(name: name, **kwargs)
|
9
|
+
end
|
10
|
+
|
11
|
+
def closure
|
12
|
+
@closure ||= Pin::ROOT_PIN
|
8
13
|
end
|
9
14
|
|
10
15
|
def name
|
@@ -6,20 +6,32 @@ module Solargraph
|
|
6
6
|
# @return [Range]
|
7
7
|
attr_reader :presence
|
8
8
|
|
9
|
+
def presence_certain?
|
10
|
+
@presence_certain
|
11
|
+
end
|
12
|
+
|
9
13
|
# @param assignment [AST::Node, nil]
|
10
14
|
# @param presence [Range, nil]
|
15
|
+
# @param presence_certain [Boolean]
|
11
16
|
# @param splat [Hash]
|
12
|
-
def initialize assignment: nil, presence: nil, **splat
|
17
|
+
def initialize assignment: nil, presence: nil, presence_certain: false, **splat
|
13
18
|
super(**splat)
|
14
19
|
@assignment = assignment
|
15
20
|
@presence = presence
|
21
|
+
@presence_certain = presence_certain
|
16
22
|
end
|
17
23
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
24
|
+
def combine_with(other, attrs={})
|
25
|
+
new_attrs = {
|
26
|
+
assignment: assert_same(other, :assignment),
|
27
|
+
presence_certain: assert_same(other, :presence_certain?),
|
28
|
+
}.merge(attrs)
|
29
|
+
# @sg-ignore Wrong argument type for
|
30
|
+
# Solargraph::Pin::Base#assert_same: other expected
|
31
|
+
# Solargraph::Pin::Base, received self
|
32
|
+
new_attrs[:presence] = assert_same(other, :presence) unless attrs.key?(:presence)
|
33
|
+
|
34
|
+
super(other, new_attrs)
|
23
35
|
end
|
24
36
|
|
25
37
|
# @param other_closure [Pin::Closure]
|