48 lines
1.5 KiB
Rust
48 lines
1.5 KiB
Rust
//! This module contains tests for doc-expression parsing.
|
|
//! Currently, it tests `#[doc(hidden)]` and `#[doc(alias)]`.
|
|
|
|
use triomphe::Arc;
|
|
|
|
use base_db::FileId;
|
|
use hir_expand::span_map::{RealSpanMap, SpanMap};
|
|
use mbe::syntax_node_to_token_tree;
|
|
use syntax::{ast, AstNode, TextRange};
|
|
|
|
use crate::attr::{DocAtom, DocExpr};
|
|
|
|
fn assert_parse_result(input: &str, expected: DocExpr) {
|
|
let source_file = ast::SourceFile::parse(input).ok().unwrap();
|
|
let tt = source_file.syntax().descendants().find_map(ast::TokenTree::cast).unwrap();
|
|
let map = SpanMap::RealSpanMap(Arc::new(RealSpanMap::absolute(FileId::from_raw(0))));
|
|
let tt = syntax_node_to_token_tree(
|
|
tt.syntax(),
|
|
map.as_ref(),
|
|
map.span_for_range(TextRange::empty(0.into())),
|
|
);
|
|
let cfg = DocExpr::parse(&tt);
|
|
assert_eq!(cfg, expected);
|
|
}
|
|
|
|
#[test]
|
|
fn test_doc_expr_parser() {
|
|
assert_parse_result("#![doc(hidden)]", DocAtom::Flag("hidden".into()).into());
|
|
|
|
assert_parse_result(
|
|
r#"#![doc(alias = "foo")]"#,
|
|
DocAtom::KeyValue { key: "alias".into(), value: "foo".into() }.into(),
|
|
);
|
|
|
|
assert_parse_result(r#"#![doc(alias("foo"))]"#, DocExpr::Alias(["foo".into()].into()));
|
|
assert_parse_result(
|
|
r#"#![doc(alias("foo", "bar", "baz"))]"#,
|
|
DocExpr::Alias(["foo".into(), "bar".into(), "baz".into()].into()),
|
|
);
|
|
|
|
assert_parse_result(
|
|
r#"
|
|
#[doc(alias("Bar", "Qux"))]
|
|
struct Foo;"#,
|
|
DocExpr::Alias(["Bar".into(), "Qux".into()].into()),
|
|
);
|
|
}
|