cli: Strip html comments

This commit is contained in:
Slack Coder 2023-05-29 12:17:37 -05:00 committed by Alexis Sellier
parent a4be8f4fa9
commit 22c7945e7b
No known key found for this signature in database
2 changed files with 88 additions and 2 deletions

View File

@ -45,6 +45,35 @@ pub fn did(did: &Did) -> Paint<String> {
Paint::new(format!("{}{}", &nid[..7], &nid[nid.len() - 7..]))
}
/// Remove html style comments from a string.
///
/// The html comments must start at the beginning of a line and stop at the end.
pub fn strip_comments(s: &str) -> String {
let ends_with_newline = s.ends_with('\n');
let mut is_comment = false;
let mut w = String::new();
for line in s.lines() {
if is_comment {
if line.ends_with("-->") {
is_comment = false;
}
continue;
} else if line.starts_with("<!--") {
is_comment = true;
continue;
}
w.push_str(line);
w.push('\n');
}
if !ends_with_newline {
w.pop();
}
w.to_string()
}
/// Format a timestamp.
pub fn timestamp(time: &Timestamp) -> Paint<String> {
let fmt = timeago::Formatter::new();
@ -105,3 +134,61 @@ impl<'a> fmt::Display for Identity<'a> {
}
}
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn test_strip_comments() {
let test = "\
commit 2\n\
\n\
<!--\n\
Please enter a comment for your patch update. Leaving this\n\
blank is also okay.\n\
-->";
let exp = "\
commit 2\n\
";
let res = strip_comments(test);
assert_eq!(exp, res);
let test = "\
commit 2\n\
-->";
let exp = "\
commit 2\n\
-->";
let res = strip_comments(test);
assert_eq!(exp, res);
let test = "\
<!--\n\
commit 2\n\
";
let exp = "";
let res = strip_comments(test);
assert_eq!(exp, res);
let test = "\
commit 2\n\
\n\
<!--\n\
<!--\n\
Please enter a comment for your patch update. Leaving this\n\
blank is also okay.\n\
-->\n\
-->";
let exp = "\
commit 2\n\
\n\
-->";
let res = strip_comments(test);
assert_eq!(exp, res);
}
}

View File

@ -31,6 +31,7 @@ impl Message {
Message::Text(c) => Some(c),
};
let comment = comment.unwrap_or_default();
let comment = term::format::strip_comments(&comment);
let comment = comment.trim();
Ok(comment.to_owned())
@ -87,7 +88,6 @@ pub fn get_message(
let display_msg = default_msg.trim_end();
let message = message.get(&format!("{display_msg}\n{PATCH_MSG}"))?;
let message = message.replace(PATCH_MSG.trim(), ""); // Delete help message.
let (title, description) = message.split_once('\n').unwrap_or((&message, ""));
let (title, description) = (title.trim().to_string(), description.trim().to_string());
@ -105,7 +105,6 @@ pub fn get_message(
/// Get a patch update message.
pub fn get_update_message(message: term::patch::Message) -> io::Result<String> {
let message = message.get(REVISION_MSG)?;
let message = message.replace(REVISION_MSG.trim(), "");
let message = message.trim();
Ok(message.to_owned())