pry-sorbet 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +0 -0
- data/Gemfile +0 -0
- data/LICENSE.txt +0 -0
- data/README.md +118 -20
- data/Rakefile +0 -0
- data/lib/pry-sorbet.rb +10 -0
- data/lib/pry-sorbet/commands.rb +3 -0
- data/lib/pry-sorbet/commands/unwrap_command.rb +41 -0
- data/lib/pry-sorbet/extensions.rb +94 -0
- data/lib/pry-sorbet/version.rb +5 -0
- data/pry-sorbet.gemspec +7 -3
- metadata +37 -4
- data/lib/extension.rb +0 -101
- data/lib/pry_sorbet.rb +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a7c71e9c8280b7f14bada6f48eaa62582a74e09f578759dee11dcdcd47cc0d68
|
4
|
+
data.tar.gz: 47d8f52a4134feb895c9177344e658147c4cc15896dea9c2f8abd5d574e44c8f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 122b2f0548e65dd58265eab021a97b5ef16cb30b101cffe467d06ce4ca3fd332e67285da0679ed2af78e2c48539f8cdecfc40c5605612411b6a3f5ae8f04851f
|
7
|
+
data.tar.gz: be0143342a9cdd1f73227348bca5f90dcb0eb6fd8d432f5b175f9a9b3c0c7dc8d099485c2de9dc72d723d9c127fceec34d6649c65ea872c230bf25b3f5bf0dfe
|
data/.gitignore
CHANGED
File without changes
|
data/Gemfile
CHANGED
File without changes
|
data/LICENSE.txt
CHANGED
File without changes
|
data/README.md
CHANGED
@@ -3,11 +3,41 @@
|
|
3
3
|
pry-sorbet is a Pry extension which enables it to work seamlessly with Sorbet
|
4
4
|
projects.
|
5
5
|
|
6
|
-
|
6
|
+
## Installation
|
7
|
+
|
8
|
+
Add this line to your application's Gemfile:
|
7
9
|
|
10
|
+
```ruby
|
11
|
+
gem 'pry-sorbet'
|
8
12
|
```
|
9
|
-
|
10
|
-
|
13
|
+
|
14
|
+
And then execute:
|
15
|
+
|
16
|
+
$ bundle
|
17
|
+
|
18
|
+
Or install it yourself as:
|
19
|
+
|
20
|
+
$ gem install pry-sorbet
|
21
|
+
|
22
|
+
## Usage
|
23
|
+
|
24
|
+
### Fixes method source
|
25
|
+
|
26
|
+
Since Sorbet runtime wraps methods with a signature to execute runtime checks
|
27
|
+
on parameters and return values, the source location of methods end up pointing
|
28
|
+
to a file location in the `sorbet-runtime` gem.
|
29
|
+
|
30
|
+
`pry-sorbet` automatically fixes the information returned by the `show-source`
|
31
|
+
(also known as `$`) command to list the correct method source location.
|
32
|
+
|
33
|
+
Moreover, an extra entry is added to the header of the method listing, named
|
34
|
+
`Sorbet`, which displays the method signature if it exists.
|
35
|
+
|
36
|
+
**Before:** Incorrect method source, no method signature
|
37
|
+
|
38
|
+
```
|
39
|
+
From: /Users/user/.gem/ruby/2.6.5/gems/sorbet-runtime-0.5.5427/lib/types/private/methods/_methods.rb @ line 208:
|
40
|
+
Owner: Foo
|
11
41
|
Visibility: public
|
12
42
|
Number of lines: 35
|
13
43
|
|
@@ -16,42 +46,110 @@ T::Private::ClassUtils.replace_method(mod, method_name) do |*args, &blk|
|
|
16
46
|
# This should only happen if the user used alias_method to grab a handle
|
17
47
|
# to the original pre-unwound `sig` method. I guess we'll just proxy the
|
18
48
|
# call forever since we don't know who is holding onto this handle to
|
49
|
+
# replace it.
|
19
50
|
```
|
20
51
|
|
21
52
|
**After:** Method source and a signature!
|
22
53
|
|
23
54
|
```
|
24
|
-
From:
|
25
|
-
Owner:
|
55
|
+
From: test/test.rb @ line 8:
|
56
|
+
Owner: Foo
|
26
57
|
Visibility: public
|
27
|
-
Sorbet: sig {
|
58
|
+
Sorbet: sig { params(bar: Symbol, baz: Integer).returns(String) }
|
28
59
|
Number of lines: 3
|
29
60
|
|
30
|
-
def
|
31
|
-
|
61
|
+
def foo(bar, baz)
|
62
|
+
[baz.to_s, bar.to_s].join(":")
|
32
63
|
end
|
33
64
|
```
|
34
65
|
|
35
|
-
|
66
|
+
### Helps with debugging
|
36
67
|
|
37
|
-
|
68
|
+
Because of the same method wrapping, debugging source code that has Sorbet signatures
|
69
|
+
becomes really painful. When stepping through the code, one always hits code locations
|
70
|
+
that are in the `sorbet-runtime` library and most of the time it makes people end up
|
71
|
+
missing the actual method invocation.
|
38
72
|
|
39
|
-
|
40
|
-
|
41
|
-
|
73
|
+
`pry-sorbet` adds a Sorbet specific command, `sorbet-unwrap` that can be ran to unwrap
|
74
|
+
all Sorbet wrapped methods. This allows developers to easily step through their code
|
75
|
+
without having to deal with the `sorbet-runtime` library.
|
42
76
|
|
43
|
-
|
77
|
+
**Before**
|
44
78
|
|
45
|
-
|
79
|
+
```
|
80
|
+
$ ruby -I lib -r pry-sorbet test/test.rb
|
81
|
+
|
82
|
+
From: test/test.rb @ line 14 :
|
83
|
+
|
84
|
+
4: class Foo
|
85
|
+
5: extend T::Sig
|
86
|
+
6:
|
87
|
+
7: sig { params(bar: Symbol, baz: Integer).returns(String) }
|
88
|
+
8: def foo(bar, baz)
|
89
|
+
9: [baz.to_s, bar.to_s].join(":")
|
90
|
+
10: end
|
91
|
+
11: end
|
92
|
+
12:
|
93
|
+
13: binding.pry
|
94
|
+
=> 14: puts Foo.new.foo(:bar, 1)
|
95
|
+
|
96
|
+
[1] pry(main)> step
|
97
|
+
|
98
|
+
From: /Users/user/.gem/ruby/2.6.5/gems/sorbet-runtime-0.5.5427/lib/types/private/methods/_methods.rb @ line 209 Foo#foo:
|
99
|
+
|
100
|
+
204: # which is called only on the *first* invocation.
|
101
|
+
205: # This wrapper is very slow, so it will subsequently re-wrap with a much faster wrapper
|
102
|
+
206: # (or unwrap back to the original method).
|
103
|
+
207: new_method = nil
|
104
|
+
208: T::Private::ClassUtils.replace_method(mod, method_name) do |*args, &blk|
|
105
|
+
=> 209: if !T::Private::Methods.has_sig_block_for_method(new_method)
|
106
|
+
210: # This should only happen if the user used alias_method to grab a handle
|
107
|
+
211: # to the original pre-unwound `sig` method. I guess we'll just proxy the
|
108
|
+
212: # call forever since we don't know who is holding onto this handle to
|
109
|
+
213: # replace it.
|
110
|
+
214: new_new_method = mod.instance_method(method_name)
|
111
|
+
```
|
46
112
|
|
47
|
-
|
113
|
+
**After**
|
48
114
|
|
49
|
-
|
115
|
+
```
|
116
|
+
$ ruby -I lib -r pry-sorbet test/test.rb
|
117
|
+
|
118
|
+
From: test/test.rb @ line 14 :
|
119
|
+
|
120
|
+
4: class Foo
|
121
|
+
5: extend T::Sig
|
122
|
+
6:
|
123
|
+
7: sig { params(bar: Symbol, baz: Integer).returns(String) }
|
124
|
+
8: def foo(bar, baz)
|
125
|
+
9: [baz.to_s, bar.to_s].join(":")
|
126
|
+
10: end
|
127
|
+
11: end
|
128
|
+
12:
|
129
|
+
13: binding.pry
|
130
|
+
=> 14: puts Foo.new.foo(:bar, 1)
|
131
|
+
|
132
|
+
[1] pry(main)> sorbet-unwrap
|
133
|
+
[2] pry(main)> step
|
134
|
+
|
135
|
+
From: test/test.rb @ line 9 Foo#foo:
|
136
|
+
|
137
|
+
8: def foo(bar, baz)
|
138
|
+
=> 9: [baz.to_s, bar.to_s].join(":")
|
139
|
+
10: end
|
140
|
+
```
|
50
141
|
|
51
|
-
|
142
|
+
Method unwrapping is not done automatically, you still need to call the `sorbet-unwrap`
|
143
|
+
command before stepping through code. However, you can make this automatic by adding the
|
144
|
+
following snippet to your `~/.pryrc` file:
|
52
145
|
|
53
|
-
|
54
|
-
|
146
|
+
```ruby
|
147
|
+
if defined?(PrySorbet)
|
148
|
+
Pry.hooks.add_hook(:before_session, "sorbet-unwrap") do |output, binding, pry|
|
149
|
+
pry.run_command "sorbet-unwrap"
|
150
|
+
end
|
151
|
+
end
|
152
|
+
```
|
55
153
|
|
56
154
|
## Contributing
|
57
155
|
|
data/Rakefile
CHANGED
File without changes
|
data/lib/pry-sorbet.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PrySorbet
|
4
|
+
class UnwrapCommand < Pry::ClassCommand
|
5
|
+
match "sorbet-unwrap"
|
6
|
+
group "Sorbet"
|
7
|
+
description "Unwrap all methods wrapped by Sorbet runtime"
|
8
|
+
command_options requires_gem: "sorbet-runtime"
|
9
|
+
|
10
|
+
banner <<~BANNER
|
11
|
+
Usage: sorbet-unwrap
|
12
|
+
|
13
|
+
Unwrap all methods wrapped by Sorbet runtime
|
14
|
+
BANNER
|
15
|
+
|
16
|
+
def process
|
17
|
+
return unless defined?(T::Private::Methods)
|
18
|
+
|
19
|
+
# For each signature wrapper, call the lambda associated with the wrapper
|
20
|
+
# to finalize the method wrapping
|
21
|
+
sig_wrappers = T::Private::Methods.instance_variable_get(:@sig_wrappers) || {}
|
22
|
+
sig_wrappers.values.each do |sig_wrapper|
|
23
|
+
sig_wrapper.call
|
24
|
+
rescue NameError
|
25
|
+
end
|
26
|
+
|
27
|
+
# Now that all methods are properly wrapped with optimized wrappers
|
28
|
+
# we can replace them with the original methods
|
29
|
+
signatures_by_method = T::Private::Methods.instance_variable_get(:@signatures_by_method) || {}
|
30
|
+
signatures_by_method.values.each do |signature|
|
31
|
+
T::Configuration.without_ruby_warnings do
|
32
|
+
T::Private::DeclState.current.without_on_method_added do
|
33
|
+
signature.owner.send(:define_method, signature.method_name, signature.method)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
Pry::Commands.add_command(PrySorbet::UnwrapCommand)
|
@@ -0,0 +1,94 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Pry
|
4
|
+
class Command
|
5
|
+
class ShowInfo
|
6
|
+
old_method_sections = instance_method(:method_sections)
|
7
|
+
|
8
|
+
define_method(:method_sections) do |code_object|
|
9
|
+
signature = defined?(T::Private::Methods) && T::Private::Methods.signature_for_method(code_object)
|
10
|
+
|
11
|
+
signature_string = if signature
|
12
|
+
build_signature_string(signature)
|
13
|
+
else
|
14
|
+
"Unknown"
|
15
|
+
end
|
16
|
+
|
17
|
+
old_method_sections.bind(self).(code_object).merge({
|
18
|
+
sorbet: "\n\e[1mSorbet:\e[0m #{signature_string}"
|
19
|
+
})
|
20
|
+
end
|
21
|
+
|
22
|
+
old_method_header = instance_method(:method_header)
|
23
|
+
|
24
|
+
define_method(:method_header) do |code_object, line_num|
|
25
|
+
old_method_header.bind(self).(code_object, line_num) \
|
26
|
+
+ method_sections(code_object)[:sorbet]
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def build_signature_string(signature)
|
32
|
+
call_chain = []
|
33
|
+
|
34
|
+
# Modifiers
|
35
|
+
if signature.mode != "standard"
|
36
|
+
# This is a string like "overridable_override"
|
37
|
+
call_chain += signature.mode.split("_")
|
38
|
+
end
|
39
|
+
|
40
|
+
# Parameters
|
41
|
+
all_parameters = []
|
42
|
+
|
43
|
+
# Positional
|
44
|
+
all_parameters += signature.arg_types.map do |(name, type)|
|
45
|
+
"#{name}: #{type}"
|
46
|
+
end
|
47
|
+
|
48
|
+
# Splat
|
49
|
+
if signature.rest_type
|
50
|
+
all_parameters << "#{signature.rest_name}: #{signature.rest_type}"
|
51
|
+
end
|
52
|
+
|
53
|
+
# Keyword
|
54
|
+
all_parameters += signature.kwarg_types.map do |(name, type)|
|
55
|
+
"#{name}: #{type}"
|
56
|
+
end
|
57
|
+
|
58
|
+
# Double-splat
|
59
|
+
if signature.rest_type
|
60
|
+
all_parameters << "#{signature.keyrest_name}: #{signature.keyrest_type}"
|
61
|
+
end
|
62
|
+
|
63
|
+
# Block
|
64
|
+
if signature.block_type
|
65
|
+
all_parameters << "#{signature.block_name}: #{signature.block_type}"
|
66
|
+
end
|
67
|
+
|
68
|
+
call_chain << "params(#{all_parameters.join(", ")})" if all_parameters.any?
|
69
|
+
|
70
|
+
# Returns
|
71
|
+
if signature.return_type.is_a?(T::Private::Types::Void)
|
72
|
+
call_chain << "void"
|
73
|
+
else
|
74
|
+
call_chain << "returns(#{signature.return_type})"
|
75
|
+
end
|
76
|
+
|
77
|
+
"sig { #{call_chain.join(".")} }"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
class Method
|
83
|
+
# Maybe use a dict or something, I think methods are suitable keys
|
84
|
+
define_method(:source_location) do
|
85
|
+
loc = super()
|
86
|
+
|
87
|
+
return loc unless defined?(T::Private::Methods)
|
88
|
+
signature = T::Private::Methods.signature_for_method(@method)
|
89
|
+
return loc unless signature
|
90
|
+
|
91
|
+
return signature.method.source_location
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
data/pry-sorbet.gemspec
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
lib = File.expand_path("lib", __dir__)
|
2
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require "pry-sorbet"
|
3
4
|
|
4
5
|
Gem::Specification.new do |spec|
|
5
6
|
spec.name = "pry-sorbet"
|
6
|
-
spec.version =
|
7
|
-
spec.authors = ["Aaron Christiansen"]
|
8
|
-
spec.email = ["aaronc20000@gmail.com"]
|
7
|
+
spec.version = PrySorbet::VERSION
|
8
|
+
spec.authors = ["Aaron Christiansen", "Ufuk Kayserilioglu"]
|
9
|
+
spec.email = ["aaronc20000@gmail.com", "ufuk.kayserilioglu@shopify.com"]
|
9
10
|
|
10
11
|
spec.summary = %q{Pry plugin for Sorbet}
|
11
12
|
spec.homepage = "https://github.com/AaronC81/pry-sorbet"
|
@@ -24,6 +25,9 @@ Gem::Specification.new do |spec|
|
|
24
25
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
25
26
|
spec.require_paths = ["lib"]
|
26
27
|
|
28
|
+
spec.add_dependency "pry"
|
29
|
+
|
27
30
|
spec.add_development_dependency "bundler", "~> 2.0"
|
28
31
|
spec.add_development_dependency "rake", "~> 10.0"
|
32
|
+
spec.add_development_dependency "sorbet-runtime"
|
29
33
|
end
|
metadata
CHANGED
@@ -1,15 +1,30 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pry-sorbet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Christiansen
|
8
|
+
- Ufuk Kayserilioglu
|
8
9
|
autorequire:
|
9
10
|
bindir: exe
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2020-03-12 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: pry
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
13
28
|
- !ruby/object:Gem::Dependency
|
14
29
|
name: bundler
|
15
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,9 +53,24 @@ dependencies:
|
|
38
53
|
- - "~>"
|
39
54
|
- !ruby/object:Gem::Version
|
40
55
|
version: '10.0'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: sorbet-runtime
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
41
70
|
description:
|
42
71
|
email:
|
43
72
|
- aaronc20000@gmail.com
|
73
|
+
- ufuk.kayserilioglu@shopify.com
|
44
74
|
executables: []
|
45
75
|
extensions: []
|
46
76
|
extra_rdoc_files: []
|
@@ -50,8 +80,11 @@ files:
|
|
50
80
|
- LICENSE.txt
|
51
81
|
- README.md
|
52
82
|
- Rakefile
|
53
|
-
- lib/
|
54
|
-
- lib/
|
83
|
+
- lib/pry-sorbet.rb
|
84
|
+
- lib/pry-sorbet/commands.rb
|
85
|
+
- lib/pry-sorbet/commands/unwrap_command.rb
|
86
|
+
- lib/pry-sorbet/extensions.rb
|
87
|
+
- lib/pry-sorbet/version.rb
|
55
88
|
- pry-sorbet.gemspec
|
56
89
|
homepage: https://github.com/AaronC81/pry-sorbet
|
57
90
|
licenses:
|
data/lib/extension.rb
DELETED
@@ -1,101 +0,0 @@
|
|
1
|
-
require 'sorbet-runtime'
|
2
|
-
require 'pry'
|
3
|
-
|
4
|
-
class Pry
|
5
|
-
class Command
|
6
|
-
class ShowInfo
|
7
|
-
old_method_sections = instance_method(:method_sections)
|
8
|
-
|
9
|
-
define_method(:method_sections) do |code_object|
|
10
|
-
sorbet_object = T::Private::Methods.signature_for_method(code_object)
|
11
|
-
|
12
|
-
if sorbet_object
|
13
|
-
call_chain = []
|
14
|
-
|
15
|
-
# Modifiers
|
16
|
-
call_chain << "generated" if sorbet_object.generated
|
17
|
-
|
18
|
-
if sorbet_object.mode != "standard"
|
19
|
-
# This is a string like "overridable_override"
|
20
|
-
call_chain += sorbet_object.mode.split("_")
|
21
|
-
end
|
22
|
-
|
23
|
-
# Parameters
|
24
|
-
all_parameters = []
|
25
|
-
|
26
|
-
# Positional
|
27
|
-
all_parameters += sorbet_object.arg_types.map do |(name, type)|
|
28
|
-
"#{name}: #{type}"
|
29
|
-
end
|
30
|
-
|
31
|
-
# Splat
|
32
|
-
if sorbet_object.rest_type
|
33
|
-
all_parameters << "#{sorbet_object.rest_name}: #{sorbet_object.rest_type}"
|
34
|
-
end
|
35
|
-
|
36
|
-
# Keyword
|
37
|
-
all_parameters += sorbet_object.kwarg_types.map do |(name, type)|
|
38
|
-
"#{name}: #{type}"
|
39
|
-
end
|
40
|
-
|
41
|
-
# Double-splat
|
42
|
-
if sorbet_object.rest_type
|
43
|
-
all_parameters << "#{sorbet_object.keyrest_name}: #{sorbet_object.keyrest_type}"
|
44
|
-
end
|
45
|
-
|
46
|
-
# Block
|
47
|
-
if sorbet_object.block_type
|
48
|
-
all_parameters << "#{sorbet_object.block_name}: #{sorbet_object.block_type}"
|
49
|
-
end
|
50
|
-
|
51
|
-
call_chain << "params(#{all_parameters.join(", ")})" if all_parameters.any?
|
52
|
-
|
53
|
-
# Returns
|
54
|
-
if sorbet_object.return_type.is_a?(T::Private::Types::Void)
|
55
|
-
call_chain << "void"
|
56
|
-
else
|
57
|
-
call_chain << "returns(#{sorbet_object.return_type})"
|
58
|
-
end
|
59
|
-
|
60
|
-
sorbet_string = "sig { #{call_chain.join(".")} }"
|
61
|
-
else
|
62
|
-
sorbet_string = "Unknown"
|
63
|
-
end
|
64
|
-
|
65
|
-
old_method_sections.bind(self).(code_object).merge({
|
66
|
-
sorbet: "\n\e[1mSorbet:\e[0m #{sorbet_string}"
|
67
|
-
})
|
68
|
-
end
|
69
|
-
|
70
|
-
old_method_header = instance_method(:method_header)
|
71
|
-
|
72
|
-
define_method(:method_header) do |code_object, line_num|
|
73
|
-
old_method_header.bind(self).(code_object, line_num) \
|
74
|
-
+ method_sections(code_object)[:sorbet]
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
class Method
|
80
|
-
# Maybe use a dict or something, I think methods are suitable keys
|
81
|
-
define_method(:source_location) do
|
82
|
-
loc = super()
|
83
|
-
|
84
|
-
file_path, line = loc
|
85
|
-
return loc unless file_path && File.exists?(file_path)
|
86
|
-
|
87
|
-
first_source_line = IO.readlines(file_path)[line - 1]
|
88
|
-
|
89
|
-
# This is how Sorbet replaces methods.
|
90
|
-
# If Sorbet undergoes drastic refactorings, this may need to be updated!
|
91
|
-
initial_sorbet_line = "T::Private::ClassUtils.replace_method(mod, method_name) do |*args, &blk|"
|
92
|
-
replaced_sorbet_line = "mod.send(:define_method, method_sig.method_name) do |*args, &blk|"
|
93
|
-
|
94
|
-
if [initial_sorbet_line, replaced_sorbet_line].include?(first_source_line.strip)
|
95
|
-
T::Private::Methods.signature_for_method(@method).method.source_location
|
96
|
-
else
|
97
|
-
loc
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
data/lib/pry_sorbet.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require_relative 'extension.rb'
|