9 个版本
0.3.4 | 2021 年 1 月 12 日 |
---|---|
0.3.3 | 2021 年 1 月 11 日 |
0.2.2 | 2021 年 1 月 8 日 |
0.1.0 | 2021 年 1 月 6 日 |
#1788 在 解析器实现
63 每月下载次数
42KB
969 行
示例
use doctor::parse;
use doctor::ast::{DocComment, Description, BodyItem, BlockTag, InlineTag};
assert_eq!(
parse(
r#"/**
* This is a doc comment.
* It contains an {@inlineTag with some body} in its description.
*
* @blockTag1
* @blockTag2 with body text
* @blockTag3 with body text and {@inlineTag}
*/"#
),
Ok(DocComment {
description: Some(Description {
body_items: vec![
BodyItem::TextSegment("This is a doc comment.\n"),
BodyItem::TextSegment("It contains an "),
BodyItem::InlineTag(InlineTag {
name: "inlineTag",
body_lines: vec!["with some body"],
}),
BodyItem::TextSegment("in its description.\n"),
BodyItem::TextSegment("\n"),
]
}),
block_tags: vec![
BlockTag {
name: "blockTag1",
body_items: vec![]
},
BlockTag {
name: "blockTag2",
body_items: vec![BodyItem::TextSegment("with body text\n"),]
},
BlockTag {
name: "blockTag3",
body_items: vec![
BodyItem::TextSegment("with body text and "),
BodyItem::InlineTag(InlineTag {
name: "inlineTag",
body_lines: vec![]
}),
BodyItem::TextSegment("\n"),
]
},
]
})
);
有关更多信息,请参阅 文档。
🔮 设计目标
- 该库对有效标签的具体集合不可知,以便可以在此之上构建更多高级解析器(JSDoc、TSDoc 等)。
- 解析器尝试分配尽可能少的内存,以确保出色的性能,因此 AST 格式被设计为尽可能多地使用输入数据的切片。
👯 Contributing
请参阅 贡献文档
许可证:MIT
依赖关系
~2.5MB
~49K SLoC