mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-24 15:54:15 +00:00
Generalize
This commit is contained in:
parent
e1829d8959
commit
383247a9ae
@ -61,8 +61,24 @@ fn extract_comment_blocks(text: &str) -> Vec<Vec<String>> {
|
||||
do_extract_comment_blocks(text, false)
|
||||
}
|
||||
|
||||
fn extract_comment_blocks_with_empty_lines(text: &str) -> Vec<Vec<String>> {
|
||||
do_extract_comment_blocks(text, true)
|
||||
fn extract_comment_blocks_with_empty_lines(tag: &str, text: &str) -> Vec<CommentBlock> {
|
||||
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>> {
|
||||
|
@ -33,22 +33,18 @@ impl Assist {
|
||||
|
||||
fn collect_file(acc: &mut Vec<Assist>, path: &Path) -> Result<()> {
|
||||
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 {
|
||||
// FIXME: doesn't support blank lines yet, need to tweak
|
||||
// `extract_comment_blocks` for that.
|
||||
let mut lines = block.iter();
|
||||
let first_line = lines.next().unwrap();
|
||||
if !first_line.starts_with("Assist: ") {
|
||||
continue;
|
||||
}
|
||||
let id = first_line["Assist: ".len()..].to_string();
|
||||
let id = block.id;
|
||||
assert!(
|
||||
id.chars().all(|it| it.is_ascii_lowercase() || it == '_'),
|
||||
"invalid assist id: {:?}",
|
||||
id
|
||||
);
|
||||
let mut lines = block.contents.iter();
|
||||
|
||||
let doc = take_until(lines.by_ref(), "```").trim().to_string();
|
||||
assert!(
|
||||
|
Loading…
Reference in New Issue
Block a user