require 'toml-rb'
require 'colorize'
def crates_in_rust_files(folder)
Dir["#{folder}/**/*.rs"].inject([]) do |crates, file_name|
File.readlines(file_name).grep(/use (\w*)(?:::|;)/) {|_| crates << $1}
crates
end.uniq
end
def crates_in_cargo_toml(folder)
(TomlRB.load_file(File.join(folder, 'Cargo.toml'))['dependencies'] || {}).keys.map{|s| s.gsub(/-/, '_')}
end
def find_unused_dependencies(folder)
puts "checking #{folder}/Cargo.toml"
unused = crates_in_cargo_toml(folder) - crates_in_rust_files(folder)
puts unused.empty? ? "OK".green : "Found #{unused}".red
end
folders = TomlRB.load_file(File.join(ARGV[0], 'Cargo.toml'))['workspace']['members'] + [ARGV[0]]
folders.each do |folder|
find_unused_dependencies(folder)
end