mirror of https://github.com/helix-editor/helix
break out coverage file funciton
parent
b01329eb10
commit
66595771b1
|
@ -73,7 +73,7 @@ struct Line {
|
|||
hits: u32,
|
||||
}
|
||||
|
||||
pub fn parse(path: std::path::PathBuf) -> Option<Coverage> {
|
||||
pub fn parse(path: &std::path::PathBuf) -> Option<Coverage> {
|
||||
let file = File::open(path).ok()?;
|
||||
let metadata = file.metadata().ok()?;
|
||||
let reader = BufReader::new(file);
|
||||
|
@ -82,6 +82,36 @@ pub fn parse(path: std::path::PathBuf) -> Option<Coverage> {
|
|||
Some(tmp.into())
|
||||
}
|
||||
|
||||
pub fn get_coverage(document_path: &std::path::PathBuf) -> Option<FileCoverage> {
|
||||
let coverage_path = std::env::var("HELIX_COVERAGE_FILE").ok()?;
|
||||
log::debug!("coverage file is {}", coverage_path);
|
||||
let cov = parse(&std::path::PathBuf::from(coverage_path))?;
|
||||
log::debug!("coverage is valid");
|
||||
log::debug!("full document path: {:?}", document_path);
|
||||
let cwd = std::env::current_dir().ok()?;
|
||||
let tmp = document_path.strip_prefix(cwd).ok()?;
|
||||
let relative_path: std::path::PathBuf = tmp.into();
|
||||
log::debug!("relative document path: {:?}", relative_path);
|
||||
let file_coverage = cov.files.get(&relative_path)?;
|
||||
log::debug!(
|
||||
"coverage time: {:?} document time: {:?}",
|
||||
file_coverage.modified_time,
|
||||
relative_path.metadata().map(|meta| meta.modified())
|
||||
);
|
||||
let coverage_time = file_coverage.modified_time?;
|
||||
if relative_path
|
||||
.metadata()
|
||||
.is_ok_and(|meta| meta.modified().is_ok_and(|time| time < coverage_time))
|
||||
{
|
||||
log::debug!("file coverage is {:?}", file_coverage.lines);
|
||||
return Some(FileCoverage {
|
||||
lines: file_coverage.lines.clone(),
|
||||
modified_time: file_coverage.modified_time,
|
||||
});
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
impl From<RawCoverage> for Coverage {
|
||||
fn from(coverage: RawCoverage) -> Self {
|
||||
let mut files = HashMap::new();
|
||||
|
|
|
@ -151,41 +151,13 @@ pub fn coverage<'doc>(
|
|||
) -> GutterFn<'doc> {
|
||||
let covered = theme.get("diff.plus.gutter");
|
||||
let not_covered = theme.get("diff.minus.gutter");
|
||||
if let Ok(coverage_path) = std::env::var("HELIX_COVERAGE_FILE") {
|
||||
log::debug!("coverage file is {}", coverage_path);
|
||||
if let Some(cov) = coverage::parse(PathBuf::from(coverage_path)) {
|
||||
log::debug!("coverage is valid");
|
||||
if let Some(mut path) = doc.path.clone() {
|
||||
log::debug!("full document path: {:?}", path);
|
||||
if let Ok(cwd) = std::env::current_dir() {
|
||||
if let Ok(tmp) = path.strip_prefix(cwd) {
|
||||
path = tmp.into();
|
||||
}
|
||||
}
|
||||
log::debug!("relative document path: {:?}", path);
|
||||
if let Some(file_coverage) = cov.files.get(&path) {
|
||||
log::debug!(
|
||||
"coverage time: {:?} document time: {:?}",
|
||||
file_coverage.modified_time,
|
||||
path.metadata().map(|meta| meta.modified())
|
||||
);
|
||||
if let Some(coverage_time) = file_coverage.modified_time {
|
||||
if path.metadata().is_ok_and(|meta| {
|
||||
meta.modified().is_ok_and(|time| time < coverage_time)
|
||||
}) {
|
||||
// clone file coverage so it can be moved into the closure
|
||||
let this_file = coverage::FileCoverage {
|
||||
lines: file_coverage.lines.clone(),
|
||||
modified_time: file_coverage.modified_time,
|
||||
};
|
||||
|
||||
if let Some(document_path) = &doc.path {
|
||||
if let Some(file_coverage) = coverage::get_coverage(document_path) {
|
||||
log::debug!("return valid coverage gutter");
|
||||
return Box::new(
|
||||
move |line: usize,
|
||||
_selected: bool,
|
||||
_first_visual_line: bool,
|
||||
out: &mut String| {
|
||||
if let Some(line_coverage) = this_file.lines.get(&(line as u32))
|
||||
{
|
||||
move |line: usize, _selected: bool, _first_visual_line: bool, out: &mut String| {
|
||||
if let Some(line_coverage) = file_coverage.lines.get(&(line as u32)) {
|
||||
let (icon, style) = if *line_coverage {
|
||||
("┃", covered)
|
||||
} else {
|
||||
|
@ -200,10 +172,6 @@ pub fn coverage<'doc>(
|
|||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
log::debug!("return empty coverage gutter");
|
||||
return Box::new(move |_, _, _, _| None);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue