Skip to content

Commit 6374c3b

Browse files
authored
Merge pull request #527 from Shopify/at-deadcode-prism
Migrate dead code detection to Prism
2 parents cbb9789 + 35b15d8 commit 6374c3b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+37033
-40430
lines changed

Gemfile.lock

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ PATH
33
specs:
44
spoom (1.2.4)
55
erubi (>= 1.10.0)
6+
prism (>= 0.19.0)
67
sorbet-static-and-runtime (>= 0.5.10187)
7-
syntax_tree (>= 6.1.1)
88
thor (>= 0.19.2)
99

1010
GEM
@@ -34,7 +34,6 @@ GEM
3434
parser (3.3.0.5)
3535
ast (~> 2.4.1)
3636
racc
37-
prettier_print (1.2.1)
3837
prism (0.19.0)
3938
psych (5.1.2)
4039
stringio
@@ -77,8 +76,6 @@ GEM
7776
sorbet (= 0.5.11287)
7877
sorbet-runtime (= 0.5.11287)
7978
stringio (3.1.0)
80-
syntax_tree (6.2.0)
81-
prettier_print (>= 1.2.0)
8279
tapioca (0.12.0)
8380
bundler (>= 2.2.25)
8481
netrc (>= 0.11.0)

lib/spoom/deadcode.rb

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22
# frozen_string_literal: true
33

44
require "erubi"
5-
require "syntax_tree"
5+
require "prism"
66

7+
require_relative "deadcode/visitor"
78
require_relative "deadcode/erb"
89
require_relative "deadcode/index"
910
require_relative "deadcode/indexer"
@@ -18,10 +19,15 @@
1819
module Spoom
1920
module Deadcode
2021
class Error < Spoom::Error
21-
extend T::Sig
2222
extend T::Helpers
2323

2424
abstract!
25+
end
26+
27+
class ParserError < Error; end
28+
29+
class IndexerError < Error
30+
extend T::Sig
2531

2632
sig { params(message: String, parent: Exception).void }
2733
def initialize(message, parent:)
@@ -30,23 +36,29 @@ def initialize(message, parent:)
3036
end
3137
end
3238

33-
class ParserError < Error; end
34-
class IndexerError < Error; end
35-
3639
class << self
3740
extend T::Sig
3841

39-
sig { params(ruby: String, file: String).returns(SyntaxTree::Node) }
42+
sig { params(ruby: String, file: String).returns(Prism::Node) }
4043
def parse_ruby(ruby, file:)
41-
SyntaxTree.parse(ruby)
42-
rescue SyntaxTree::Parser::ParseError => e
43-
raise ParserError.new("Error while parsing #{file} (#{e.message} at #{e.lineno}:#{e.column})", parent: e)
44+
result = Prism.parse(ruby)
45+
unless result.success?
46+
message = +"Error while parsing #{file}:\n"
47+
48+
result.errors.each do |e|
49+
message << "- #{e.message} (at #{e.location.start_line}:#{e.location.start_column})\n"
50+
end
51+
52+
raise ParserError, message
53+
end
54+
55+
result.value
4456
end
4557

4658
sig do
4759
params(
4860
index: Index,
49-
node: SyntaxTree::Node,
61+
node: Prism::Node,
5062
ruby: String,
5163
file: String,
5264
plugins: T::Array[Deadcode::Plugins::Base],

0 commit comments

Comments
 (0)