sorbet-eraser 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fb18fb992ca140f69b3971850f1aa3da26091b6d01ba133656c13d6c2427a80a
4
- data.tar.gz: 7e00f8f81e9b90b23bec44a9e943322eddbf51d75f5ae6491787a7674ce3ca6f
3
+ metadata.gz: 1ad0af501c0fd60762345ff02fdca609a9380405416e686776afc349de9b50e1
4
+ data.tar.gz: b53c44b99f68070cdeff20fb98946c9ad36865f0713ae827e7a668eed72d927f
5
5
  SHA512:
6
- metadata.gz: c5309fc61086dcd2371ab5784847ffa4695ed99fffe18ee25e74b568bf75e75c6ba8d79baedfd3403471fc11008242ccbc453a39517d1b1ff9863d23240f7e6d
7
- data.tar.gz: b8599cb21d63143a9ed9ff27df14849c40422d8425b07552b874a69efee908168f01b6862ac05033551b992f998fd934cdd24c5bd0f177094ca63bbb6dafe92d
6
+ metadata.gz: 9522badb70d5cf342fdd35d9d017d989c042dd1cbab76c341a6f890cc9992e2a33f4c8e6c3e031f9e579c0b0e0b164f272defc8660a4ce0247fc00bc8c933e01
7
+ data.tar.gz: 1e60091bdc1def556f37d0021fb683632196f08c4cbc01ad9163c0f7930043cee1c85b03109d53a1c7140fd78a517dc579dc4f98c198fb741a00d17a8770a726
data/CHANGELOG.md CHANGED
@@ -6,6 +6,17 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) a
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.7.0] - 2024-02-14
10
+
11
+ ### Added
12
+
13
+ - Use `prism` as the parser, not `yarp`.
14
+
15
+ ### Changed
16
+
17
+ - Fix the return value of `T::Private:Methods.signature_for_method`.
18
+ - `T::Props#props` is expected to be a hash not an array.
19
+
9
20
  ## [0.6.0] - 2023-09-11
10
21
 
11
22
  ### Added
data/Gemfile.lock CHANGED
@@ -1,15 +1,15 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sorbet-eraser (0.6.0)
5
- yarp
4
+ sorbet-eraser (0.7.0)
5
+ prism
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- minitest (5.20.0)
11
- rake (13.0.6)
12
- yarp (0.11.0)
10
+ minitest (5.22.2)
11
+ prism (0.22.0)
12
+ rake (13.1.0)
13
13
 
14
14
  PLATFORMS
15
15
  arm64-darwin-21
@@ -16,7 +16,7 @@ module T
16
16
  # them and not raise errors and for bookkeeping.
17
17
  module ClassMethods
18
18
  def props
19
- @props ||= []
19
+ @props ||= {}
20
20
  end
21
21
 
22
22
  def prop(name, rules = {})
@@ -32,8 +32,7 @@ module T
32
32
  private
33
33
 
34
34
  def create_prop(name, rules)
35
- props << [name, rules]
36
- props.sort_by!(&:first)
35
+ props[name] = rules
37
36
  end
38
37
  end
39
38
 
@@ -47,7 +47,7 @@ module T
47
47
  module SingletonMethodHooks
48
48
  end
49
49
 
50
- def self.signature_for_method(method); method; end
50
+ def self.signature_for_method(method); nil; end
51
51
  end
52
52
  end
53
53
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Sorbet
4
4
  module Eraser
5
- VERSION = "0.6.0"
5
+ VERSION = "0.7.0"
6
6
  end
7
7
  end
data/lib/sorbet/eraser.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "yarp"
3
+ require "prism"
4
4
 
5
5
  require "sorbet/eraser/version"
6
6
  require "sorbet/eraser/t"
@@ -23,7 +23,7 @@ module Sorbet
23
23
  module Eraser
24
24
  # This class is a YARP visitor that finds the ranges of bytes that should be
25
25
  # erased from the source code.
26
- class Ranges < YARP::Visitor
26
+ class Ranges < Prism::Visitor
27
27
  attr_reader :ranges
28
28
 
29
29
  def initialize(ranges)
@@ -32,7 +32,7 @@ module Sorbet
32
32
 
33
33
  def visit_call_node(node)
34
34
  case node.name
35
- when "abstract!", "final!", "interface!"
35
+ when :abstract!, :final!, :interface!
36
36
  # abstract!
37
37
  # abstract!()
38
38
  # final!
@@ -42,7 +42,7 @@ module Sorbet
42
42
  if !node.receiver && !node.arguments && !node.block
43
43
  ranges << (node.location.start_offset...node.location.end_offset)
44
44
  end
45
- when "assert_type!", "bind", "cast", "let"
45
+ when :assert_type!, :bind, :cast, :let
46
46
  # T.assert_type! foo, String
47
47
  # T.assert_type!(foo, String)
48
48
  # T.bind self, String
@@ -51,9 +51,7 @@ module Sorbet
51
51
  # T.cast(foo, String)
52
52
  # T.let foo, String
53
53
  # T.let(foo, String)
54
- if node.receiver.is_a?(YARP::ConstantReadNode) && node.receiver.name == :T && node.arguments && !node.block && node.arguments.arguments.length == 2
55
- arguments = node.arguments.arguments
56
-
54
+ if node.receiver.is_a?(Prism::ConstantReadNode) && node.receiver.name == :T && (arguments = node.arguments&.arguments) && !node.block && arguments.length == 2
57
55
  if node.opening_loc
58
56
  ranges << (node.location.start_offset...node.opening_loc.start_offset)
59
57
  ranges << (arguments.first.location.end_offset...node.closing_loc.start_offset)
@@ -62,7 +60,7 @@ module Sorbet
62
60
  ranges << (arguments.last.location.end_offset...node.location.end_offset)
63
61
  end
64
62
  end
65
- when "const", "prop"
63
+ when :const, :prop
66
64
  # const :foo, String
67
65
  # const :foo, String, required: true
68
66
  # const(:foo, String)
@@ -71,8 +69,8 @@ module Sorbet
71
69
  # prop :foo, String, required: true
72
70
  # prop(:foo, String)
73
71
  # prop(:foo, String, required: true)
74
- if !node.receiver && node.arguments && !node.block
75
- arguments = node.arguments.arguments
72
+ if !node.receiver && (arguments = node.arguments) && !node.block
73
+ arguments = arguments.arguments
76
74
 
77
75
  case arguments.length
78
76
  when 2
@@ -81,21 +79,21 @@ module Sorbet
81
79
  ranges << (arguments[1].location.start_offset...arguments[2].location.start_offset)
82
80
  end
83
81
  end
84
- when "mixes_in_class_methods"
82
+ when :mixes_in_class_methods
85
83
  # mixes_in_class_methods Foo
86
84
  # mixes_in_class_methods(Foo)
87
- if !node.receiver && node.arguments && !node.block && node.arguments.arguments.length == 1
85
+ if !node.receiver && (arguments = node.arguments&.arguments) && !node.block && arguments.length == 1
88
86
  ranges << (node.location.start_offset...node.location.end_offset)
89
87
  end
90
- when "must", "reveal_type", "unsafe"
88
+ when :must, :reveal_type, :unsafe
91
89
  # T.must foo
92
90
  # T.must(foo)
93
91
  # T.reveal_type foo
94
92
  # T.reveal_type(foo)
95
93
  # T.unsafe foo
96
94
  # T.unsafe(foo)
97
- if node.receiver.is_a?(YARP::ConstantReadNode) && node.receiver.name == :T && node.arguments && !node.block && node.arguments.arguments.length == 1
98
- argument = node.arguments.arguments.first
95
+ if (receiver = node.receiver).is_a?(Prism::ConstantReadNode) && receiver.name == :T && (arguments = node.arguments&.arguments) && !node.block && arguments.length == 1
96
+ argument = arguments.first
99
97
 
100
98
  if node.opening_loc
101
99
  ranges << (node.location.start_offset...node.opening_loc.start_offset)
@@ -105,7 +103,7 @@ module Sorbet
105
103
  ranges << (argument.location.end_offset...node.location.end_offset)
106
104
  end
107
105
  end
108
- when "sig"
106
+ when :sig
109
107
  # sig { ... }
110
108
  # sig do ... end
111
109
  if !node.receiver && !node.arguments && node.block
@@ -122,14 +120,14 @@ module Sorbet
122
120
  # with a string that contains Ruby source. It returns the modified Ruby
123
121
  # source.
124
122
  def erase(source)
125
- erase_result(YARP.parse(source), source)
123
+ erase_result(Prism.parse(source), source)
126
124
  end
127
125
 
128
126
  # This is one of the two entrypoints to the module. This should be called
129
127
  # with a filepath that points to a file that contains Ruby source. It
130
128
  # returns the modified Ruby source.
131
129
  def erase_file(filepath)
132
- erase_result(YARP.parse_file(filepath), File.read(filepath))
130
+ erase_result(Prism.parse_file(filepath), File.read(filepath))
133
131
  end
134
132
 
135
133
  private
@@ -144,7 +142,7 @@ module Sorbet
144
142
  # Implicitly assuming that comments are in order.
145
143
  break if comment.location.start_line >= minimum
146
144
 
147
- if comment.type == :inline && comment.location.slice.match?(/\A#\s*typed:\s*(?:ignore|false|true|strict|strong)\s*\z/)
145
+ if comment.is_a?(Prism::InlineComment) && comment.location.slice.match?(/\A#\s*typed:\s*(?:ignore|false|true|strict|strong)\s*\z/)
148
146
  ranges << ((comment.location.start_offset + 1)...comment.location.end_offset)
149
147
  end
150
148
  end
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
30
30
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
31
  spec.require_paths = ["lib"]
32
32
 
33
- spec.add_dependency "yarp"
33
+ spec.add_dependency "prism"
34
34
 
35
35
  spec.add_development_dependency "bundler"
36
36
  spec.add_development_dependency "rake"
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sorbet-eraser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Newton
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-09-11 00:00:00.000000000 Z
11
+ date: 2024-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: yarp
14
+ name: prism
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -103,7 +103,7 @@ licenses:
103
103
  - MIT
104
104
  metadata:
105
105
  bug_tracker_uri: https://github.com/kddnewton/sorbet-eraser/issues
106
- changelog_uri: https://github.com/kddnewton/sorbet-eraser/blob/v0.6.0/CHANGELOG.md
106
+ changelog_uri: https://github.com/kddnewton/sorbet-eraser/blob/v0.7.0/CHANGELOG.md
107
107
  source_code_uri: https://github.com/kddnewton/sorbet-eraser
108
108
  rubygems_mfa_required: 'true'
109
109
  post_install_message: