Created
November 29, 2011 07:17
-
-
Save kennethkalmer/1403835 to your computer and use it in GitHub Desktop.
Find unused helpers in a Rails app (slow)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
# | |
# Shotgun approach (read: slow and dirty hack) to help find unused helpers in a Rails application | |
# | |
puts "Loading all source files into memory :(" | |
source = {} | |
Dir["app/**/**/*.*"].each do |f| | |
source[ f ] = File.readlines( f ) | |
end | |
puts "#{source.size} files loaded into memory" | |
helpers = [] | |
source.keys.grep(/app\/helpers/).each do |f| | |
code = source[ f ] | |
code.each do |line| | |
if line =~ /def ([^\(\s]+)/ | |
helpers << $1.chomp | |
end | |
end | |
end | |
puts "Scanning for #{helpers.size} helpers" | |
# combine the source code | |
complete_code = source.values.flatten | |
# Find occurances | |
helpers.each do |name| | |
found = false | |
complete_code.each do |line| | |
next if line =~ /def #{name}/ | |
found = true if line =~ /#{name}/ | |
end | |
puts "No traces found of #{name}..." unless found | |
end |
@moneypenny skipping asset files made me avoid it.
Thanks for this. My hack amendment to make it work in Ruby 2.0 was
complete_code.each do |line|
next if line != 'UTF-8'
next if line =~ /def #{name}/
found = true if line =~ /#{name}/
end
I rewrote some of this to be much faster (about 80% faster in my case):
https://gist.github.com/kylefox/617b0bead5f53dc53a224a8651328c92
@cheshire137 As @markoa mentioned, you likely ran into the UTF errors while processing a binary file (i.e. a bitmap image). My update whitelists the file types to search, which avoids the UTF error and greatly speeds up the script overall.
@tylerlee FYI your change seems to cause every single helper to be flagged as unused because you're checking the line against the literal 'UTF-'8'
string.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I wish this was updated for Ruby 1.9. I get an
invalid byte sequence in UTF-8 (ArgumentError)
error on yourline =~ /dev #{name}/
.