#docs #parser #jsdoc #javadoc #tsdoc

doctor

适用于 Javadoc 风格文档注释的灵活底层解析器:Javadoc、JSDoc、TSDoc 等

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解析器实现

Download history 47/week @ 2024-03-30 10/week @ 2024-04-06 3/week @ 2024-06-29 60/week @ 2024-07-06

63 每月下载次数

MIT 许可证

42KB
969

🩺 doctor

快速且灵活的底层解析器,用于 JavaDoc 风格的文档注释。

docs.rs

示例

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