Generalize

This commit is contained in:
Aleksey Kladov 2020-05-31 00:33:37 +02:00
parent e1829d8959
commit 383247a9ae
2 changed files with 21 additions and 9 deletions

View File

@ -61,8 +61,24 @@ fn extract_comment_blocks(text: &str) -> Vec<Vec<String>> {
do_extract_comment_blocks(text, false) do_extract_comment_blocks(text, false)
} }
fn extract_comment_blocks_with_empty_lines(text: &str) -> Vec<Vec<String>> { fn extract_comment_blocks_with_empty_lines(tag: &str, text: &str) -> Vec<CommentBlock> {
do_extract_comment_blocks(text, true) assert!(tag.starts_with(char::is_uppercase));
let tag = format!("{}:", tag);
let mut res = Vec::new();
for mut block in do_extract_comment_blocks(text, true) {
let first = block.remove(0);
if first.starts_with(&tag) {
let id = first[tag.len()..].trim().to_string();
let block = CommentBlock { id, contents: block };
res.push(block);
}
}
res
}
struct CommentBlock {
id: String,
contents: Vec<String>,
} }
fn do_extract_comment_blocks(text: &str, allow_blocks_with_empty_lines: bool) -> Vec<Vec<String>> { fn do_extract_comment_blocks(text: &str, allow_blocks_with_empty_lines: bool) -> Vec<Vec<String>> {

View File

@ -33,22 +33,18 @@ impl Assist {
fn collect_file(acc: &mut Vec<Assist>, path: &Path) -> Result<()> { fn collect_file(acc: &mut Vec<Assist>, path: &Path) -> Result<()> {
let text = fs::read_to_string(path)?; let text = fs::read_to_string(path)?;
let comment_blocks = extract_comment_blocks_with_empty_lines(&text); let comment_blocks = extract_comment_blocks_with_empty_lines("Assist", &text);
for block in comment_blocks { for block in comment_blocks {
// FIXME: doesn't support blank lines yet, need to tweak // FIXME: doesn't support blank lines yet, need to tweak
// `extract_comment_blocks` for that. // `extract_comment_blocks` for that.
let mut lines = block.iter(); let id = block.id;
let first_line = lines.next().unwrap();
if !first_line.starts_with("Assist: ") {
continue;
}
let id = first_line["Assist: ".len()..].to_string();
assert!( assert!(
id.chars().all(|it| it.is_ascii_lowercase() || it == '_'), id.chars().all(|it| it.is_ascii_lowercase() || it == '_'),
"invalid assist id: {:?}", "invalid assist id: {:?}",
id id
); );
let mut lines = block.contents.iter();
let doc = take_until(lines.by_ref(), "```").trim().to_string(); let doc = take_until(lines.by_ref(), "```").trim().to_string();
assert!( assert!(