lib/spoom/cli/deadcode.rb in spoom-1.3.2 vs lib/spoom/cli/deadcode.rb in spoom-1.3.3
- old
+ new
@@ -22,11 +22,11 @@
default: ["text/x-ruby", "text/x-ruby-script"],
aliases: :m,
desc: "Allowed mime types"
option :exclude,
type: :array,
- default: ["vendor/", "sorbet/"],
+ default: ["vendor/", "sorbet/", "tmp/", "log/", "node_modules/"],
aliases: :x,
desc: "Exclude paths"
option :show_files,
type: :boolean,
default: false,
@@ -56,11 +56,13 @@
$stderr.puts "Collecting files..."
collector = FileCollector.new(
allow_extensions: options[:allowed_extensions],
allow_mime_types: options[:allowed_mime_types],
- exclude_patterns: options[:exclude].map { |p| Pathname.new(File.join(exec_path, p, "**")).cleanpath.to_s },
+ exclude_patterns: paths.flat_map do |path|
+ options[:exclude].map { |excluded| Pathname.new(File.join(path, excluded, "**")).cleanpath.to_s }
+ end,
)
collector.visit_paths(paths)
files = collector.files.sort
if options[:show_files]
@@ -69,36 +71,39 @@
$stderr.puts " #{gray(file)}"
end
$stderr.puts
end
- plugins = Spoom::Deadcode.plugins_from_gemfile_lock(context)
+ plugin_classes = Spoom::Deadcode.plugins_from_gemfile_lock(context)
+ plugin_classes.merge(Spoom::Deadcode.load_custom_plugins(context))
if options[:show_plugins]
- $stderr.puts "\nLoaded #{blue(plugins.size.to_s)} plugins\n"
- plugins.each do |plugin|
- $stderr.puts " #{gray(plugin.class.to_s)}"
+ $stderr.puts "\nLoaded #{blue(plugin_classes.size.to_s)} plugins\n"
+ plugin_classes.each do |plugin|
+ $stderr.puts " #{gray(plugin.to_s)}"
end
$stderr.puts
end
- index = Spoom::Deadcode::Index.new
+ model = Spoom::Model.new
+ index = Spoom::Deadcode::Index.new(model)
+ plugins = plugin_classes.map { |plugin| plugin.new(index) }
$stderr.puts "Indexing #{blue(files.size.to_s)} files..."
files.each do |file|
- content = File.read(file)
- content = ERB.new(content).src if file.end_with?(".erb")
-
- tree = Spoom::Deadcode.parse_ruby(content, file: file)
- Spoom::Deadcode.index_node(index, tree, content, file: file, plugins: plugins)
- rescue Spoom::Deadcode::ParserError => e
+ index.index_file(file, plugins: plugins)
+ rescue ParseError => e
say_error("Error parsing #{file}: #{e.message}")
next
- rescue Spoom::Deadcode::IndexerError => e
+ rescue Spoom::Deadcode::Index::Error => e
say_error("Error indexing #{file}: #{e.message}")
next
end
+ model.finalize!
+ index.apply_plugins!(plugins)
+ index.finalize!
+
if options[:show_defs]
$stderr.puts "\nDefinitions:"
index.definitions.each do |name, definitions|
$stderr.puts " #{blue(name)}"
definitions.each do |definition|
@@ -121,11 +126,10 @@
definitions_count = index.definitions.size.to_s
references_count = index.references.size.to_s
$stderr.puts "Analyzing #{blue(definitions_count)} definitions against #{blue(references_count)} references..."
- index.finalize!
dead = index.definitions.values.flatten.select(&:dead?)
if options[:sort] == "name"
dead.sort_by!(&:name)
else
@@ -146,11 +150,11 @@
end
end
desc "remove LOCATION", "Remove dead code at LOCATION"
def remove(location_string)
- location = Spoom::Deadcode::Location.from_string(location_string)
+ location = Location.from_string(location_string)
context = self.context
remover = Spoom::Deadcode::Remover.new(context)
new_source = remover.remove_location(nil, location)
context.write!("PATCH", new_source)
@@ -161,10 +165,10 @@
context.write!(location.file, new_source)
rescue Spoom::Deadcode::Remover::Error => e
say_error("Can't remove code at #{location_string}: #{e.message}")
exit(1)
- rescue Spoom::Deadcode::Location::LocationError => e
+ rescue Location::LocationError => e
say_error(e.message)
exit(1)
end
end
end