void
AttributeChecker::check_attribute (const AST::Attribute &attribute)
{
+ if (!attribute.empty_input ())
+ {
+ const auto &attr_input = attribute.get_attr_input ();
+ auto type = attr_input.get_attr_input_type ();
+ if (type == AST::AttrInput::AttrInputType::TOKEN_TREE)
+ {
+ const auto &option = static_cast<const AST::DelimTokenTree &> (
+ attribute.get_attr_input ());
+ std::unique_ptr<AST::AttrInputMetaItemContainer> meta_item (
+ option.parse_to_meta_item ());
+ AST::DefaultASTVisitor::visit (meta_item);
+ }
+ }
+
BuiltinAttrDefinition result;
// This checker does not check non-builtin attributes
AttributeChecker::visit (AST::DelimTokenTree &)
{}
-void
-AttributeChecker::visit (AST::AttrInputMetaItemContainer &)
-{}
-
void
AttributeChecker::visit (AST::IdentifierExpr &)
{}
{}
void
-AttributeChecker::visit (AST::MetaItemPathExpr &)
-{}
+AttributeChecker::visit (AST::MetaItemPathExpr &attribute)
+{
+ if (!attribute.get_expr ().is_literal ())
+ {
+ rust_error_at (attribute.get_locus (),
+ "malformed %<path%> attribute input");
+ rust_inform (attribute.get_locus (),
+ "must be of the form: %<#[path = \"file\"]%>");
+ }
+}
void
AttributeChecker::visit (AST::BorrowExpr &)
void
AttributeChecker::visit (AST::Module &module)
{
+ check_attributes (module.get_outer_attrs ());
check_proc_macro_non_function (module.get_outer_attrs ());
for (auto &item : module.get_items ())
{
AttributeChecker::visit (AST::MetaItemPath &)
{}
-void
-AttributeChecker::visit (AST::MetaItemSeq &)
-{}
-
void
AttributeChecker::visit (AST::MetaWord &)
{}
void visit (AST::Crate &crate) override;
void visit (AST::Token &tok) override;
void visit (AST::DelimTokenTree &delim_tok_tree) override;
- void visit (AST::AttrInputMetaItemContainer &input) override;
void visit (AST::IdentifierExpr &ident_expr) override;
void visit (AST::Lifetime &lifetime) override;
void visit (AST::LifetimeParam &lifetime_param) override;
void visit (AST::MacroRulesDefinition &rules_def) override;
void visit (AST::MacroInvocation ¯o_invoc) override;
void visit (AST::MetaItemPath &meta_item) override;
- void visit (AST::MetaItemSeq &meta_item) override;
void visit (AST::MetaWord &meta_item) override;
void visit (AST::MetaNameValueStr &meta_item) override;
void visit (AST::MetaListPaths &meta_item) override;