From 2d17365ed3ff9feaac27bfccaa3a07a844072507 Mon Sep 17 00:00:00 2001
From: Nik Revenco <154856872+NikitaRevenco@users.noreply.github.com>
Date: Thu, 20 Mar 2025 02:18:03 +0000
Subject: [PATCH] test: add documentation for macro

---
 helix-vcs/src/git/blame.rs | 74 ++++++++++++++++++++++++++------------
 1 file changed, 51 insertions(+), 23 deletions(-)

diff --git a/helix-vcs/src/git/blame.rs b/helix-vcs/src/git/blame.rs
index c8ec987b..6342fc21 100644
--- a/helix-vcs/src/git/blame.rs
+++ b/helix-vcs/src/git/blame.rs
@@ -207,6 +207,18 @@ mod test {
 
     use super::*;
 
+    /// describes how a line was modified
+    #[derive(PartialEq, PartialOrd, Ord, Eq)]
+    enum LineDiff {
+        /// this line is added
+        Insert,
+        /// this line is deleted
+        Delete,
+        /// no changes for this line
+        None,
+    }
+
+    /// checks if the first argument is `no_commit` or not
     macro_rules! no_commit_flag {
         (no_commit, $commit_msg:literal) => {
             false
@@ -222,13 +234,7 @@ mod test {
         };
     }
 
-    #[derive(PartialEq, PartialOrd, Ord, Eq)]
-    enum LineDiff {
-        Insert,
-        Delete,
-        None,
-    }
-
+    /// checks if the first argument is `insert` or `delete`
     macro_rules! line_diff_flag {
         (insert, $commit_msg:literal, $line:expr) => {
             LineDiff::Insert
@@ -249,8 +255,8 @@ mod test {
         };
     }
 
-    /// this utility macro exists because we can't pass a `match` statement into `concat!`
-    /// we wouldl like to exclude any lines that are "delete"
+    /// This macro exists because we can't pass a `match` statement into `concat!`
+    /// we would like to exclude any lines that are `delete`
     macro_rules! line_diff_flag_str {
         (insert, $commit_msg:literal, $line:expr) => {
             concat!($line, path_separator_literal!())
@@ -271,8 +277,7 @@ mod test {
         };
     }
 
-    /// We need to use it in `concat!` so we can't use std::path::MAIN_SEPARATOR_STR
-    /// Also, attributes on expressions are experimental so we have to use a whole macro for this
+    /// Attributes on expressions are experimental so we have to use a whole macro for this
     #[cfg(windows)]
     macro_rules! path_separator_literal {
         () => {
@@ -287,16 +292,29 @@ mod test {
     }
 
     /// Helper macro to create a history of the same file being modified.
-    ///
-    /// Each $commit_msg is a unique identifier for a commit message.
-    /// Each $line is a string line of the file. These $lines are collected into a single String
-    /// which then becomes the new contents of the $file
-    ///
-    /// Each $line gets blamed using blame_line. The $expected is the commit identifier that we are expecting for that line.
-    ///
-    /// $commit_msg can also have a `no_commit` ident next to it, in which case this block won't be committed
     macro_rules! assert_line_blame_progress {
-        ($($commit_msg:literal $($no_commit:ident)? => $($line:literal $($expected:literal)? $($line_diff:ident)? ),+);+ $(;)?) => {{
+        (
+            $(
+                // a unique identifier for the commit, other commits must not use this
+                // If `no_commit` option is used, use the identifier of the previous commit
+                $commit_msg:literal
+                // must be `no_commit` if exists.
+                // If exists, this block won't be committed
+                $($no_commit:ident)? =>
+                $(
+                    // contents of a line in the file
+                    $line:literal
+                    // what commit identifier we are expecting for this line
+                    $($expected:literal)?
+                    // must be `insert` or `delete` if exists
+                    // if exists, must be used with `no_commit`
+                    // - `insert`: this line is added
+                    // - `delete`: this line is deleted
+                    $($line_diff:ident)?
+                ),+
+            );+
+            $(;)?
+        ) => {{
             use std::fs::OpenOptions;
             use std::io::Write;
 
@@ -317,6 +335,7 @@ mod test {
                     .truncate(true)
                     .open(&file)
                     .unwrap();
+
                 f.write_all(file_content.as_bytes()).unwrap();
 
                 let should_commit = no_commit_flag!($($no_commit)?, $commit_msg);
@@ -340,16 +359,25 @@ mod test {
                         // because we won't show it to the user.
                         $(
 
-                            let blame_result = blame_line(&file, line_number, added_lines, removed_lines).unwrap().commit_message;
+                            let blame_result =
+                                blame_line(&file, line_number, added_lines, removed_lines)
+                                    .unwrap()
+                                    .commit_message;
                             assert_eq!(
                                 blame_result,
                                 Some(concat!(stringify!($expected), path_separator_literal!()).to_owned()),
                                 "Blame mismatch\nat commit: {}\nat line: {}\nline contents: {}\nexpected commit: {}\nbut got commit: {}",
                                 $commit_msg,
                                 line_number,
-                                file_content.lines().nth(line_number.try_into().unwrap()).unwrap(),
+                                file_content
+                                    .lines()
+                                    .nth(line_number.try_into().unwrap())
+                                    .unwrap(),
                                 stringify!($expected),
-                                blame_result.as_ref().map(|blame| blame.trim_end()).unwrap_or("<no commit>")
+                                blame_result
+                                    .as_ref()
+                                    .map(|blame| blame.trim_end())
+                                    .unwrap_or("<no commit>")
                             );
                         )?
                         line_number += 1;