Organize how the caller determines which attrs to parse

In preparation for parsing even more attributes, such as `repr`.
diff --git a/syntax/parse.rs b/syntax/parse.rs
index 0640e7f..b5070c7 100644
--- a/syntax/parse.rs
+++ b/syntax/parse.rs
@@ -56,7 +56,13 @@
 
     let mut doc = Doc::new();
     let mut derives = Vec::new();
-    attrs::parse(&item.attrs, &mut doc, Some(&mut derives))?;
+    attrs::parse(
+        &item.attrs,
+        attrs::Parser {
+            doc: Some(&mut doc),
+            derives: Some(&mut derives),
+        },
+    )?;
 
     let fields = match item.fields {
         Fields::Named(fields) => fields,