more tests

This commit is contained in:
nora 2022-12-20 21:14:16 +01:00
parent 75108c8553
commit 4f4afa627d
7 changed files with 69 additions and 24 deletions

View file

@ -15,6 +15,8 @@ mod expand;
use anyhow::{Context, Result}; use anyhow::{Context, Result};
use dylib_flag::RustFunction; use dylib_flag::RustFunction;
use processor::Minimizer; use processor::Minimizer;
use tracing::Level;
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, EnvFilter, Registry};
use crate::processor::Processor; use crate::processor::Processor;
@ -92,6 +94,21 @@ pub fn minimize(options: Options) -> Result<()> {
Ok(()) Ok(())
} }
pub fn init_recommended_tracing_subscriber() {
let registry = Registry::default().with(
EnvFilter::builder()
.with_default_directive(Level::INFO.into())
.from_env()
.unwrap(),
);
let tree_layer = tracing_tree::HierarchicalLayer::new(2)
.with_targets(true)
.with_bracketed_fields(true);
registry.with(tree_layer).init();
}
impl Default for Options { impl Default for Options {
fn default() -> Self { fn default() -> Self {
Self { Self {

View file

@ -1,29 +1,12 @@
use anyhow::Result;
use cargo_minimize::{Cargo, Parser}; use cargo_minimize::{Cargo, Parser};
use tracing::{error, info, Level}; use tracing::error;
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, EnvFilter, Registry};
fn main() -> Result<()> { fn main() {
let Cargo::Minimize(options) = Cargo::parse(); let Cargo::Minimize(options) = Cargo::parse();
let registry = Registry::default().with( cargo_minimize::init_recommended_tracing_subscriber();
EnvFilter::builder()
.with_default_directive(Level::INFO.into())
.from_env()
.unwrap(),
);
info!("Starting cargo-minimize");
let tree_layer = tracing_tree::HierarchicalLayer::new(2)
.with_targets(true)
.with_bracketed_fields(true);
registry.with(tree_layer).init();
if let Err(err) = cargo_minimize::minimize(options) { if let Err(err) = cargo_minimize::minimize(options) {
error!("An error occured:\n{err}"); error!("An error occured:\n{err}");
} }
Ok(())
} }

View file

@ -1,10 +1,11 @@
use anyhow::{Context, Result}; use anyhow::{Context, Result};
use std::{ use std::{
fmt::Debug,
fs, fs,
path::{Path, PathBuf}, path::{Path, PathBuf},
}; };
#[derive(Debug, PartialEq, Eq, Clone, Hash)] #[derive(PartialEq, Eq, Clone, Hash)]
pub(crate) struct SourceFile { pub(crate) struct SourceFile {
pub(crate) path: PathBuf, pub(crate) path: PathBuf,
} }
@ -77,3 +78,9 @@ impl Changes {
self.any_change self.any_change
} }
} }
impl Debug for SourceFile {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
<Path as Debug>::fmt(&self.path, f)
}
}

View file

@ -130,6 +130,7 @@ impl Minimizer {
} }
} }
#[instrument(skip(self, pass, invalidated_files, changes), fields(pass = %pass.name()), level = "debug")]
fn process_file<'file>( fn process_file<'file>(
&self, &self,
pass: &mut dyn Processor, pass: &mut dyn Processor,

View file

@ -32,6 +32,8 @@ impl Minimizer {
.get_diags() .get_diags()
.context("getting suggestions from rustc")?; .context("getting suggestions from rustc")?;
debug!(?diags, "Got diagnostics");
let mut suggestions_for_file = HashMap::<_, Vec<_>>::new(); let mut suggestions_for_file = HashMap::<_, Vec<_>>::new();
for suggestion in &suggestions { for suggestion in &suggestions {
suggestions_for_file suggestions_for_file
@ -197,7 +199,8 @@ impl<'a> FindUnusedFunction<'a> {
"encountered multiline span in dead_code" "encountered multiline span in dead_code"
); );
if Path::new(&span.file_name) != file.path { // When the project directory is remapped, the path may be absolute or generally have some prefix.
if !file.path.ends_with(&span.file_name) {
return None; return None;
} }

View file

@ -1,4 +1,4 @@
use std::process::Command; use std::{process::Command, sync::Mutex};
use anyhow::{bail, Result}; use anyhow::{bail, Result};
use cargo_minimize::Options; use cargo_minimize::Options;
@ -8,7 +8,20 @@ fn canonicalize(code: &str) -> Result<String> {
Ok(prettyplease::unparse(&ast)) Ok(prettyplease::unparse(&ast))
} }
static HAS_SUBSCRIBER: Mutex<bool> = Mutex::new(false);
fn init_subscriber() {
let mut has_subscriber = HAS_SUBSCRIBER.lock().unwrap();
if !*has_subscriber {
cargo_minimize::init_recommended_tracing_subscriber();
*has_subscriber = true;
}
drop(has_subscriber);
}
pub fn run_test(code: &str, minimizes_to: &str, options: impl FnOnce(&mut Options)) -> Result<()> { pub fn run_test(code: &str, minimizes_to: &str, options: impl FnOnce(&mut Options)) -> Result<()> {
init_subscriber();
let dir = tempfile::tempdir()?; let dir = tempfile::tempdir()?;
let mut cargo = Command::new("cargo"); let mut cargo = Command::new("cargo");
@ -48,4 +61,3 @@ pub fn run_test(code: &str, minimizes_to: &str, options: impl FnOnce(&mut Option
Ok(()) Ok(())
} }

View file

@ -22,3 +22,25 @@ fn hello_world_no_verify() -> Result<()> {
}, },
) )
} }
#[test]
fn unused() -> Result<()> {
// After everybody_loops, `unused` becomes dead and should be removed.
run_test(
r##"
fn unused() {}
fn main() {
unused();
}
"##,
r##"
fn main() {
loop {}
}
"##,
|opts| {
opts.no_verify = true;
},
)
}