debride 1.11.0 → 1.13.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a3d7a09de612d4aa5772fbc3db3e26f51a06331c360c62d359acb8465f3f242a
4
- data.tar.gz: 95ce5aff93c1900456ad929a959d60f275feb036ecbb890edd590246d284c5eb
3
+ metadata.gz: 31ff20d8c8b7d749e113ffd4eac634fa13c52e9c84461e52e92c07bbd98a40f1
4
+ data.tar.gz: dbeb5f7cc0129cc46f38f2a0b68d4b30d5b70d9f0dd7e3581a006e82adfcf2de
5
5
  SHA512:
6
- metadata.gz: b8c4f5575198e3d8de1c7486cf5b2a6e43e2f2d8ec61af07b3e6d8f5e101cd5343acb108a55468b1e19e8605c3c27acad32918084c4165a666f58e6d367fb72b
7
- data.tar.gz: 17dbd73820e02cea048e1cdc61d4811e3d00702f0d2fcc58098e56982205b80e1932cf6358d3692a7647da0de67251c2cab22e274598b420eae48cedeff94726
6
+ metadata.gz: 293fc6a6d550e86d05a8d4784956fd1a886fea928b9b562a06502a0732e4f34af79aaebbd4f85ebe7aa9bc31fdb7281ec66487a73a2ef2853df467888197eac7
7
+ data.tar.gz: 9de34932869d721f0f2b98fd719ad0ef07d632d8588542cd4c1d4c3d5f7a57539dad80d858acfd2fb37b3a94b7d26f36ee8204e92a7cefeefd37e11653b9fe30
checksums.yaml.gz.sig CHANGED
Binary file
data/History.rdoc CHANGED
@@ -1,3 +1,34 @@
1
+ === 1.13.0 / 2025-06-10
2
+
3
+ * 2 minor enhancements:
4
+
5
+ * Added -y to debride_rm to opt-in to running autoclave.
6
+ * Print command for autoclave to help see what's happening.
7
+
8
+ * 1 bug fix:
9
+
10
+ * Fixed shebangs on all bin/* files, added -w for all.
11
+
12
+ === 1.12.0 / 2023-05-18
13
+
14
+ * 1 major enhancement:
15
+
16
+ * Massive overhaul of bin/debride_rm: faster, cleaner, can run a command between each deletion.
17
+
18
+ * 2 minor enhancements:
19
+
20
+ * Added alias_method and alias as pseudo-calls to source method.
21
+ * Whitelist extended/included/prepended etc by default.
22
+
23
+ * 6 bug fixes:
24
+
25
+ * Added missing rails validation.
26
+ * Bumped sexp_processor and ruby_parser dependencies.
27
+ * Fix --exclude <dir> to properly exclude whole tree.
28
+ * Fixed --exclude option to make it repeatable.
29
+ * Fixed bug on anonymous block forwarding (eg fn(&)). (afuno)
30
+ * Use RubyParser.new instead of RubyParser.for_current_ruby.
31
+
1
32
  === 1.11.0 / 2023-03-24
2
33
 
3
34
  * 6 minor enhancements:
data/README.rdoc CHANGED
@@ -42,7 +42,7 @@ API), then you can whitelist it:
42
42
  MyClass
43
43
  bad_method lib/some/file.rb:20
44
44
  ...
45
-
45
+
46
46
  Usage example for a typical rails application:
47
47
  # dump rake routes into a file
48
48
  % rake routes > routes.txt
@@ -53,13 +53,48 @@ Usage example for a typical rails application:
53
53
  % echo down >> whitelist.txt
54
54
  % echo change >> whitelist.txt
55
55
  # output debride report co standard output with the following options:
56
- # ignore typical rails methods,
56
+ # ignore typical rails methods,
57
57
  # specify generated whitelist,
58
58
  # run in current directory (".")
59
59
  % debride --rails --whitelist whitelist.txt .
60
60
 
61
61
  You can also use regexps in your whitelist by delimiting them with //'s.
62
62
 
63
+ To generate a whitelist for the last 28 days worth of logs on papertrail:
64
+
65
+ % seq 2 29 | xargs -I {} date -u -v-{}d +%Y-%m-%d | \
66
+ xargs -I {} curl --progress-bar -f --no-include -L -H "X-Papertrail-Token: $PAPERTRAIL_APIKEY" https://papertrailapp.com/api/v1/archives/{}/download | \
67
+ gzip -dc | grep production.log | cut -f 10- | \
68
+ debride_rails_whitelist routes.txt - | sort -u > whitelist.txt
69
+
70
+ == debride_rm
71
+
72
+ debride_rm will automatically remove dead code and optionally run a
73
+ command in between each removal. The command will automatically
74
+ substitute "NAME" and "PATH" with the name and path of the thing being
75
+ removed. Eg:
76
+
77
+ % debride_rm -C="git commit -m 'debride NAME in PATH' ." \
78
+ --rails \
79
+ --whitelist whitelist.txt \
80
+ --exclude test \
81
+ --exclude script \
82
+ --exclude bin \
83
+ --minimum 30
84
+
85
+ This command will:
86
+
87
+ 1. run with rails extensions on
88
+ 2. treat anything named in whitelist.txt as "called"
89
+ 3. exclude directories that shouldn't be scanned or mutated
90
+ 4. exclude anything under 30 lines long
91
+
92
+ One thing to note, debride_rm doesn't do terribly well with things
93
+ like attr_accessor lists, so running debride_rm with --minimum 2 (or
94
+ more) is wise.
95
+
96
+ Strategy: start large (40+) and work your way down.
97
+
63
98
  == PLUGINS:
64
99
 
65
100
  debride-erb :: Extends debride to analyze erb files (via erubis ala rails).
@@ -69,7 +104,7 @@ debride-slim :: Extends debride to analyze Slim files
69
104
 
70
105
  == EDITOR INTEGRATION:
71
106
 
72
- TextMate 2 :: * {Debride-Rails.tmbundle}[https://github.com/jjuliano/Debride-Rails.tmbundle] - Debride with Rails support
107
+ TextMate 2 :: * {Debride-Rails.tmbundle}[https://github.com/jjuliano/Debride-Rails.tmbundle] - Debride with Rails support
73
108
  * {Debride.tmbundle}[https://github.com/jjuliano/Debride-Rails.tmbundle] - Debride for Ruby
74
109
 
75
110
  == REQUIREMENTS:
data/Rakefile CHANGED
@@ -7,6 +7,7 @@ Hoe::add_include_dirs("../../sexp_processor/dev/lib",
7
7
  "../../ruby_parser/dev/lib",
8
8
  "../../ruby2ruby/dev/lib",
9
9
  "../../ZenTest/dev/lib",
10
+ "../../debride-erb/dev/lib",
10
11
  "../../path_expander/dev/lib",
11
12
  "lib")
12
13
 
@@ -19,8 +20,8 @@ Hoe.spec "debride" do
19
20
  developer "Ryan Davis", "ryand-ruby@zenspider.com"
20
21
  license "MIT"
21
22
 
22
- dependency "sexp_processor", "~> 4.5"
23
- dependency "ruby_parser", "~> 3.6"
23
+ dependency "sexp_processor", "~> 4.17"
24
+ dependency "ruby_parser", "~> 3.20"
24
25
  dependency "path_expander", "~> 1.0"
25
26
  end
26
27
 
@@ -28,7 +29,9 @@ def run dir, whitelist
28
29
  abort "Specify dir to scan with D=<path>" unless dir
29
30
 
30
31
  ENV["GEM_HOME"] = "tmp/isolate"
31
- ENV["GEM_PATH"] = "../../debride-erb/dev/tmp/isolate"
32
+ ENV["GEM_PATH"] = "#{Gem.paths.path.join ":"}:../../debride-erb/dev/tmp/isolate"
33
+
34
+ Gem.paths = ENV
32
35
 
33
36
  whitelist = whitelist && ["--whitelist", whitelist]
34
37
  verbose = ENV["V"] && "-v"
data/bin/debride CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env ruby
1
+ #!/usr/bin/env -S ruby -w
2
2
 
3
3
  require "debride"
4
4
 
@@ -1,4 +1,4 @@
1
- #!/usr/bin/ruby -w
1
+ #!/usr/bin/env -S ruby -w
2
2
 
3
3
  route = ARGV.shift
4
4
  routes = {}
data/bin/debride_rm CHANGED
@@ -1,96 +1,66 @@
1
- #!/usr/bin/ruby -w
1
+ #!/usr/bin/env -S ruby -ws
2
2
 
3
- def autoclave nuke
4
- skips = 0
3
+ $C ||= false # command to run between deletions
4
+ $y ||= false # yes, actually execute autoclave
5
5
 
6
- nuke.each do |path, ary|
7
- # warn path
6
+ require "set"
7
+ require_relative "../lib/debride"
8
8
 
9
- file = File.readlines path
9
+ def autoclave nuke, cmd
10
+ nuke.each do |path, lines_to_remove, klass, name|
11
+ warn "#{path} #{lines_to_remove} #{klass}##{name}"
10
12
 
11
- ary.each do |(line, name)|
12
- opener = file[line-1]
13
-
14
- case opener
15
- when /^\s*def/
16
- # do nothing
17
- else # attr_accessor, etc
18
- # warn " unsupported: #{opener.strip}"
19
- skips += 1
20
- next
21
- end
22
-
23
- leader = opener[/^\s+/]
24
- end_line = file[line..-1].find_index { |l| l =~ /^#{leader}end/ }
25
-
26
- if end_line then
27
- end_line += line + 1
28
- end_line += 1 while file[end_line] =~ /^\s*$/
29
- end_line += 1 while file[end_line] =~ /^\s*alias.*?\b#{name}$/
30
- end_line += 1 while file[end_line] =~ /^\s*$/
31
-
32
- end_line.downto line do |i|
33
- file.delete_at(i-1)
34
- end
35
- else
36
- warn "NOT FOUND: ending for #{name} #{path}:#{line}"
37
- end
38
- end
13
+ file = File.foreach(path).with_index.map { |l, i| [i+1, l] }
39
14
 
40
15
  File.open path, "w" do |f|
41
- f.write file.join
16
+ file.each do |idx, line|
17
+ # skip empty line after a removed line
18
+ next if line.chomp.empty? && lines_to_remove.include?(idx-1)
19
+ f.write line unless lines_to_remove.include? idx
20
+ end
42
21
  end
43
- end
44
-
45
- print " skips = %3d" % skips if skips > 0
46
- end
47
22
 
48
- def read_debride path
49
- nuke = Hash.new { |h,k| h[k] = [] }
50
-
51
- count = 0
52
-
53
- File.foreach path do |line|
54
- case line
55
- when /^ (\S+)\s+(\S+):(\d+)$/ then
56
- name, path, line = $1, $2, $3.to_i
57
- nuke[path] << [line, name]
58
- count += 1
59
- when /^[\w:]+$/, "\n", /:$/ then
60
- # ignore
61
- else
62
- warn "unparsed: #{line.chomp}"
23
+ if cmd then
24
+ expanded = cmd.gsub(/\bNAME\b/, "#{klass}##{name}").gsub(/\bPATH\b/, path)
25
+ warn "CMD = %p" % [expanded]
26
+ `#{expanded}` if $y
63
27
  end
64
28
  end
65
-
66
- nuke.each do |k, ary|
67
- nuke[k] = ary.sort.reverse
68
- end
69
-
70
- [nuke, count]
71
29
  end
72
30
 
73
31
  iter = 0
74
32
  old_count = nil
75
33
 
76
- abort "usage: #{$0} [debride args]+" if ARGV.empty? or ARGV.include? "-h"
34
+ abort "usage: #{$0} [-y] [-C=cmd] [debride args]+" if ARGV.empty? or ARGV.include? "-h"
77
35
 
78
- cmd = %w[debride] + ARGV + %w[> dummy_for_cmd_below]
36
+ warn "NOT running commands, use -y to execute" unless $y
79
37
 
80
38
  loop do
81
39
  iter += 1
82
- dead = "dead%02d.txt" % iter
83
- cmd[-1] = dead
84
40
 
85
- Process.wait Process.spawn cmd.join " "
86
- abort "debride failed: #{$?}" unless $?.success?
41
+ debride = Debride.run ARGV.dup
42
+
43
+ min = debride.option[:minimum] || 0
44
+
45
+ nuke = debride.missing_locations
46
+ .flat_map { |klass, meths|
47
+ meths
48
+ .reject { |(meth, loc)| !loc }
49
+ .map { |(meth, loc)|
50
+ path, start, finish = /^(.+):(\d+)(?:-(\d+))?$/.match(loc).captures
51
+ finish ||= start
52
+ [path, start.to_i..finish.to_i, klass, meth]
53
+ }
54
+ .reject { |p,r,k,m| r.size <= min }
55
+ }
56
+ .sort_by { |p,r,k,m| [p, -r.begin, m] }
87
57
 
88
- nuke, count = read_debride dead
58
+ count = nuke.size
89
59
 
90
- break if old_count == count
60
+ break if count.zero? || old_count == count
91
61
  old_count = count
92
62
 
93
- print "iter = %2d count = %4d" % [iter, count]
94
- autoclave nuke
63
+ puts "iter = %2d count = %4d" % [iter, count]
64
+ autoclave nuke, $C
95
65
  puts
96
66
  end
data/lib/debride.rb CHANGED
@@ -12,7 +12,7 @@ require "path_expander"
12
12
  # A static code analyzer that points out possible dead methods.
13
13
 
14
14
  class Debride < MethodBasedSexpProcessor
15
- VERSION = "1.11.0" # :nodoc:
15
+ VERSION = "1.13.0" # :nodoc:
16
16
  PROJECT = "debride"
17
17
 
18
18
  def self.load_plugins proj = PROJECT
@@ -56,7 +56,7 @@ class Debride < MethodBasedSexpProcessor
56
56
  expander = PathExpander.new(args, glob)
57
57
  files = expander.process
58
58
  excl = debride.option[:exclude]
59
- excl.map! { |fd| File.directory?(fd) ? "#{fd}/" : fd } if excl
59
+ excl.map! { |fd| File.directory?(fd) ? "#{fd}/**/*" : fd } if excl
60
60
 
61
61
  files = expander.filter_files files, StringIO.new(excl.join "\n") if excl
62
62
 
@@ -97,8 +97,7 @@ class Debride < MethodBasedSexpProcessor
97
97
  raise "Unhandled type: #{path_or_io.class}:#{path_or_io.inspect}"
98
98
  end
99
99
 
100
- rp = RubyParser.for_current_ruby rescue RubyParser.new
101
- rp.process(file, path, option[:timeout])
100
+ RubyParser.new.process(file, path, option[:timeout])
102
101
  rescue Racc::ParseError, RegexpError => e
103
102
  warn "Parse Error parsing #{path}. Skipping."
104
103
  warn " #{e.message}"
@@ -111,7 +110,15 @@ class Debride < MethodBasedSexpProcessor
111
110
 
112
111
  def self.parse_options args
113
112
  options = {
114
- :whitelist => [],
113
+ :whitelist => %i[
114
+ extended
115
+ included
116
+ inherited
117
+ method_added
118
+ method_missing
119
+ prepended
120
+ ],
121
+ :exclude => [],
115
122
  :format => :text,
116
123
  }
117
124
 
@@ -129,7 +136,7 @@ class Debride < MethodBasedSexpProcessor
129
136
  end
130
137
 
131
138
  opts.on("-e", "--exclude FILE1,FILE2,ETC", Array, "Exclude files or directories in comma-separated list.") do |list|
132
- options[:exclude] = list
139
+ options[:exclude].concat list
133
140
  end
134
141
 
135
142
  opts.on("-w", "--whitelist FILE", String, "Whitelist these messages.") do |s|
@@ -334,6 +341,17 @@ class Debride < MethodBasedSexpProcessor
334
341
  method_name = method_name.to_s.delete_suffix("_path").to_sym if option[:rails]
335
342
  when /^deliver_/ then
336
343
  method_name = method_name.to_s.delete_prefix("deliver_").to_sym if option[:rails]
344
+ when :alias_method then
345
+ _, _, _, lhs, rhs = sexp
346
+
347
+ if Sexp === lhs and Sexp === rhs then
348
+ lhs = lhs.last
349
+ rhs = rhs.last
350
+
351
+ record_method lhs, sexp.file, sexp.line
352
+
353
+ called << rhs
354
+ end
337
355
  end
338
356
 
339
357
  called << method_name
@@ -343,9 +361,21 @@ class Debride < MethodBasedSexpProcessor
343
361
  sexp
344
362
  end
345
363
 
364
+ def process_alias exp
365
+ _, (_, lhs), (_, rhs) = exp
366
+
367
+ record_method lhs, exp.file, exp.line
368
+
369
+ called << rhs
370
+
371
+ exp
372
+ end
373
+
346
374
  def process_block_pass exp # :nodoc:
347
375
  _, name = exp
348
376
 
377
+ return exp unless name
378
+
349
379
  case name.sexp_type
350
380
  when :lit then # eg &:to_sym
351
381
  called << name.last
@@ -576,7 +606,7 @@ class Debride < MethodBasedSexpProcessor
576
606
  :around_action,
577
607
  :before_action,
578
608
 
579
- # https://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html
609
+ # https://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html (at bottom)
580
610
  :after_commit,
581
611
  :after_create,
582
612
  :after_destroy,
@@ -610,6 +640,7 @@ class Debride < MethodBasedSexpProcessor
610
640
  :validates,
611
641
  :validates_absence_of,
612
642
  :validates_acceptance_of,
643
+ :validates_comparison_of,
613
644
  :validates_confirmation_of,
614
645
  :validates_exclusion_of,
615
646
  :validates_format_of,
data/test/test_debride.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require "minitest/autorun"
2
2
  require "debride"
3
3
 
4
+ $: << "../../debride-erb/dev/tmp/isolate"
5
+
4
6
  class SafeDebride < Debride
5
7
  def self.abort s
6
8
  raise s
@@ -9,9 +11,9 @@ end
9
11
 
10
12
  class TestDebride < Minitest::Test
11
13
  EXP_LIST = [["Debride",
12
- [:process_attrasgn,
14
+ [:process_alias,
15
+ :process_attrasgn,
13
16
  :process_block_pass,
14
- :process_call,
15
17
  :process_cdecl,
16
18
  :process_colon2,
17
19
  :process_colon3,
@@ -20,6 +22,7 @@ class TestDebride < Minitest::Test
20
22
  :process_defs,
21
23
  :process_op_asgn2,
22
24
  :process_rb,
25
+ :process_safe_call,
23
26
  :report,
24
27
  :report_json,
25
28
  :report_text,
@@ -31,10 +34,14 @@ class TestDebride < Minitest::Test
31
34
 
32
35
  EXP_FORMATTED = { :missing => formatted_vals }
33
36
 
37
+ make_my_diffs_pretty!
38
+
34
39
  def assert_option arg, exp_arg, exp_opt
35
40
  opt = SafeDebride.parse_options arg
36
41
 
37
- exp_opt = {:whitelist => [], :format => :text}.merge exp_opt
42
+ wl = [:extended, :included, :inherited, :method_added, :method_missing, :prepended]
43
+
44
+ exp_opt = {:whitelist => wl, :exclude => [], :format => :text}.merge exp_opt
38
45
  assert_equal exp_opt, opt
39
46
  assert_equal exp_arg, arg
40
47
  end
@@ -143,7 +150,7 @@ class TestDebride < Minitest::Test
143
150
  debride.report(io)
144
151
 
145
152
  exp = JSON.load JSON.dump EXP_FORMATTED # force stringify
146
- data = JSON.load io.string.gsub(/\d+-\d+/, "###")
153
+ data = JSON.load io.string.gsub(/:\d+(-\d+)?/, ":###")
147
154
 
148
155
  assert_equal exp, data
149
156
  end
@@ -155,7 +162,7 @@ class TestDebride < Minitest::Test
155
162
  debride.report(io)
156
163
 
157
164
  exp = EXP_FORMATTED
158
- data = YAML.load io.string.gsub(/\d+-\d+/, "###")
165
+ data = YAML.load io.string.gsub(/:\d+(-\d+)?/, ":###")
159
166
 
160
167
  assert_equal exp, data
161
168
  end
@@ -334,6 +341,14 @@ class TestDebride < Minitest::Test
334
341
  assert_process [["Seattle", [:uncalled]]], ruby
335
342
  end
336
343
 
344
+ def test_block_pass_empty
345
+ ruby = <<-RUBY.strip
346
+ f(&) # block forwarding
347
+ RUBY
348
+
349
+ assert_process [], ruby
350
+ end
351
+
337
352
  def test_safe_navigation_operator
338
353
  ruby = <<-RUBY.strip
339
354
  class Seattle
@@ -500,8 +515,8 @@ class TestDebride < Minitest::Test
500
515
  "AttributeAccessor#w4=" => "(io):3",
501
516
  "AttributeAccessor#r1" => "(io):4",
502
517
  "AttributeAccessor#r2" => "(io):4",
503
- "AttributeAccessor#initialize" => "(io):5-9",
504
- "AttributeAccessor::class_method" => "(io):12-13"
518
+ "AttributeAccessor#initialize" => "(io):5-10",
519
+ "AttributeAccessor::class_method" => "(io):12-14"
505
520
  }
506
521
 
507
522
  assert_equal exp, d.method_locations
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,18 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: debride
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.11.0
4
+ version: 1.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Davis
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain:
11
10
  - |
12
11
  -----BEGIN CERTIFICATE-----
13
- MIIDPjCCAiagAwIBAgIBBzANBgkqhkiG9w0BAQsFADBFMRMwEQYDVQQDDApyeWFu
12
+ MIIDPjCCAiagAwIBAgIBCTANBgkqhkiG9w0BAQsFADBFMRMwEQYDVQQDDApyeWFu
14
13
  ZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB
15
- GRYDY29tMB4XDTIzMDEwMTA3NTExN1oXDTI0MDEwMTA3NTExN1owRTETMBEGA1UE
14
+ GRYDY29tMB4XDTI1MDEwNjIzMjcwMVoXDTI2MDEwNjIzMjcwMVowRTETMBEGA1UE
16
15
  AwwKcnlhbmQtcnVieTEZMBcGCgmSJomT8ixkARkWCXplbnNwaWRlcjETMBEGCgmS
17
16
  JomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALda
18
17
  b9DCgK+627gPJkB6XfjZ1itoOQvpqH1EXScSaba9/S2VF22VYQbXU1xQXL/WzCkx
@@ -22,14 +21,14 @@ cert_chain:
22
21
  qhtV7HJxNKuPj/JFH0D2cswvzznE/a5FOYO68g+YCuFi5L8wZuuM8zzdwjrWHqSV
23
22
  gBEfoTEGr7Zii72cx+sCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
24
23
  HQYDVR0OBBYEFEfFe9md/r/tj/Wmwpy+MI8d9k/hMA0GCSqGSIb3DQEBCwUAA4IB
25
- AQAkg3y+PBnBAPWdxxITm5sPHqdWQgSyCpRA20o4LTuWr8BWhSXBkfQNa7cY6fOn
26
- xyM34VPzBFbExv6XOGDfOMFBVaYTHuN9peC/5/umL7kLl+nflXzL2QA7K6LYj5Bg
27
- sM574Onr0dZDM6Vn69bzQ7rBIFDfK/OhlPzqKZad4nsdcsVH8ODCiT+ATMIZyz5K
28
- WCnNtqlyiWXI8tdTpahDgcUwfcN/oN7v4K8iU5IbLJX6HQ5DKgmKjfb6XyMth16k
29
- ROfWo9Uyp8ba/j9eVG14KkYRaLydAY1MNQk2yd3R5CGfeOpD1kttxjoypoUJ2dOG
30
- nsNBRuQJ1UfiCG97a6DNm+Fr
24
+ AQAC0WQJcPOWPFwkojhzweilRVjTJ19UiLhiBTw3C1wJO3LVdBkWDmnnhAmKuX4D
25
+ r7vjQvESlABGIPdutI1Yl7mrHQzTkfLfXvNN6MT0nLChPyIYauT6SZZxubwJrUfA
26
+ 7R0c2CJTIboZ0XaGpLsXqHEF1c29H7TV1QvVuqKAN2mCjh4N82QVn+ZKtys28AwT
27
+ 6GfQX2fqLoi4KSc7xIzHKaNzqxeOICmJofk9w5VZ2rRN6yes8jvFYwz9HR41wdj8
28
+ bwfinv7Yp5fA6AysuZLhCykyfDuZVRrUp0Vb68YCKsLjJly/Theak+euNTxvHsB+
29
+ al9oSgPPHICMEX65qvLywitx
31
30
  -----END CERTIFICATE-----
32
- date: 2023-03-24 00:00:00.000000000 Z
31
+ date: 1980-01-02 00:00:00.000000000 Z
33
32
  dependencies:
34
33
  - !ruby/object:Gem::Dependency
35
34
  name: sexp_processor
@@ -37,28 +36,28 @@ dependencies:
37
36
  requirements:
38
37
  - - "~>"
39
38
  - !ruby/object:Gem::Version
40
- version: '4.5'
39
+ version: '4.17'
41
40
  type: :runtime
42
41
  prerelease: false
43
42
  version_requirements: !ruby/object:Gem::Requirement
44
43
  requirements:
45
44
  - - "~>"
46
45
  - !ruby/object:Gem::Version
47
- version: '4.5'
46
+ version: '4.17'
48
47
  - !ruby/object:Gem::Dependency
49
48
  name: ruby_parser
50
49
  requirement: !ruby/object:Gem::Requirement
51
50
  requirements:
52
51
  - - "~>"
53
52
  - !ruby/object:Gem::Version
54
- version: '3.6'
53
+ version: '3.20'
55
54
  type: :runtime
56
55
  prerelease: false
57
56
  version_requirements: !ruby/object:Gem::Requirement
58
57
  requirements:
59
58
  - - "~>"
60
59
  - !ruby/object:Gem::Version
61
- version: '3.6'
60
+ version: '3.20'
62
61
  - !ruby/object:Gem::Dependency
63
62
  name: path_expander
64
63
  requirement: !ruby/object:Gem::Requirement
@@ -113,14 +112,14 @@ dependencies:
113
112
  requirements:
114
113
  - - "~>"
115
114
  - !ruby/object:Gem::Version
116
- version: '4.0'
115
+ version: '4.2'
117
116
  type: :development
118
117
  prerelease: false
119
118
  version_requirements: !ruby/object:Gem::Requirement
120
119
  requirements:
121
120
  - - "~>"
122
121
  - !ruby/object:Gem::Version
123
- version: '4.0'
122
+ version: '4.2'
124
123
  description: Analyze code for potentially uncalled / dead methods, now with auto-removal.
125
124
  email:
126
125
  - ryand-ruby@zenspider.com
@@ -149,7 +148,6 @@ licenses:
149
148
  - MIT
150
149
  metadata:
151
150
  homepage_uri: https://github.com/seattlerb/debride
152
- post_install_message:
153
151
  rdoc_options:
154
152
  - "--main"
155
153
  - README.rdoc
@@ -166,8 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
166
164
  - !ruby/object:Gem::Version
167
165
  version: '0'
168
166
  requirements: []
169
- rubygems_version: 3.4.6
170
- signing_key:
167
+ rubygems_version: 3.6.9
171
168
  specification_version: 4
172
169
  summary: Analyze code for potentially uncalled / dead methods, now with auto-removal.
173
170
  test_files: []
metadata.gz.sig CHANGED
Binary file