diff --git a/src/gh_range_diff.rs b/src/gh_range_diff.rs index a470a545..680ac173 100644 --- a/src/gh_range_diff.rs +++ b/src/gh_range_diff.rs @@ -281,6 +281,15 @@ fn process_old_new( color: white; background-color: rgb(63, 128, 94); }} + .spacer {{ + margin-bottom: 1rem; + }} + .hide {{ + display: none; + }} + #show-context-only-changes-cb:checked ~ .hide {{ + display: block; + }} @media (prefers-color-scheme: dark) {{ body {{ background: #0C0C0C; @@ -330,7 +339,10 @@ fn process_old_new(

range-diff of {a_oldbase}..{a_oldhead} {a_newbase}..{a_newhead} in {owner}/{repo}

-

Legend: {REMOVED_BLOCK_SIGN} before | {ADDED_BLOCK_SIGN} after

+Legend: {REMOVED_BLOCK_SIGN} before | {ADDED_BLOCK_SIGN} after + + +
"# )?; @@ -355,6 +367,22 @@ fn process_old_new( let has_hunks = diff.hunks().next().is_some(); if has_hunks { + let has_content_changes = 'context: { + for mut hunk in diff.hunks() { + let contains_diff_marker = |idx: u32, source: &[Token]| { + let line = &input.interner[source[idx as usize]]; + line.starts_with('+') || line.starts_with('-') + }; + + if hunk.before.any(|i| contains_diff_marker(i, &input.before)) + || hunk.after.any(|i| contains_diff_marker(i, &input.after)) + { + break 'context true; + } + } + false + }; + let printer = HtmlDiffPrinter(&input.interner); let diff = diff.unified_diff(&printer, config.clone(), &input); @@ -363,10 +391,22 @@ fn process_old_new( let after_href = format_args!("https://github.com/{owner}/{repo}/blob/{newhead}/{filename}"); - writeln!( + if has_content_changes { + write!(html, r#"
{filename}"#)?; + } else { + /* Context only changes, hide by default */ + write!( + html, + r#"
{filename} (context-only changes)"# + )?; + } + + write!( html, - r#"
{filename} before after
{diff}
"# + r#" before after
{diff}
"# )?; + writeln!(html, "
")?; + diff_displayed += 1; } Ok(())