File: disable-prism.patch

package info (click to toggle)
ruby-minitest 6.0.1-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 588 kB
  • sloc: ruby: 6,908; makefile: 7
file content (78 lines) | stat: -rw-r--r-- 2,593 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
Description: prism is not in the archive
Author: Simon Quigley <tsimonq2@debian.org>
Origin: vendor
Last-Update: 2026-02-10
---
This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
--- a/lib/minitest/path_expander.rb
+++ b/lib/minitest/path_expander.rb
@@ -1,4 +1,3 @@
-require "prism"
 require "pathname" # for ruby 3
 
 module Minitest; end # :nodoc:
@@ -408,7 +407,7 @@ class Minitest::PathExpander < Minitest:
 
       file[line-1..].each do |l|
         ruby << l
-        return ruby if Prism.parse_success? ruby
+        return ruby
       end
 
       nil
--- a/lib/minitest/complete.rb
+++ b/lib/minitest/complete.rb
@@ -38,16 +38,36 @@ path = argv.find_all { |f| File.file? f
 
 exit unless comp_re && path
 
-require "prism"
+require "ripper"
 
-names, queue = [], [Prism.parse_file(path).value]
+source = File.read(path)
+root = Ripper.sexp(source)
 
-while node = queue.shift do
-  if node.type == :def_node then
-    name = node.name
-    names << name if name =~ comp_re
+# Ripper returns nil on parse failure (e.g. syntax error in newer Ruby features)
+if root.nil?
+  warn "Ripper failed to parse #{path} — skipping or aborting as appropriate"
+  exit 1  # or handle however the original script does
+end
+
+names, queue = [], [root]
+
+while node = queue.shift
+  if node.is_a?(Array) && node[0] == :def
+    # Normal instance method def — corresponds to Prism's :def_node
+    name_node = node[1]
+    if name_node.is_a?(Array) && name_node[0].is_a?(Symbol) && name_node[0].to_s.start_with?("@")
+      name = name_node[1]  # the actual method name string
+      names << name if name =~ comp_re
+    end
+
+    # Skip the method body (bodystmt, usually node[3])
+    # but still traverse params (node[2]) — defaults can have expressions,
+    # but they almost never contain nested defs, so it's safe and matches
+    # the "no need to process def body" intent.
+    queue << node[2] if node.size > 2 && node[2]
   else
-    queue.concat node.compact_child_nodes # no need to process def body
+    # Everything else (program, class, module, block, etc.) — recurse fully
+    queue += node.drop(1) if node.is_a?(Array)
   end
 end
 
--- a/minitest.gemspec
+++ b/minitest.gemspec
@@ -29,7 +29,6 @@ Gem::Specification.new do |s|
   s.specification_version = 4
 
   s.add_development_dependency(%q<hoe>.freeze, ["~> 4.5".freeze])
-  s.add_runtime_dependency(%q<prism>.freeze, ["~> 1.5".freeze])
   s.add_development_dependency(%q<rdoc>.freeze, [">= 6.0".freeze, "< 8".freeze])
   s.add_development_dependency(%q<simplecov>.freeze, ["~> 0.21".freeze])
 end