{"record":{"id":"6554fa8097a81a17","repo":"influxdata/influxdb","slug":"expected-an-argument-name","errorCode":null,"errorMessage":"expected an argument name","messagePattern":"expected an argument name","errorType":"validation","errorClass":"syn::Error","httpStatus":null,"severity":"error","filePath":"influxdb3_catalog_macros/src/lib.rs","lineNumber":88,"sourceCode":"}\n\nimpl Args {\n    fn parse(metas: Punctuated<Meta, Token![,]>) -> syn::Result<Self> {\n        let mut id = None;\n        let mut shape = None;\n        let mut flags = None;\n\n        for meta in metas {\n            let Meta::NameValue(nv) = meta else {\n                return Err(syn::Error::new(\n                    meta.span(),\n                    \"expected `name = value`; supported arguments are `id`, `shape`, `flags`\",\n                ));\n            };\n            let key = nv\n                .path\n                .get_ident()\n                .ok_or_else(|| syn::Error::new(nv.path.span(), \"expected an argument name\"))?\n                .to_string();\n\n            match key.as_str() {\n                \"id\" => {\n                    if id.replace(nv.value).is_some() {\n                        return Err(syn::Error::new(nv.path.span(), \"duplicate `id`\"));\n                    }\n                }\n                \"shape\" => {\n                    let span = nv.value.span();\n                    let Expr::Lit(syn::ExprLit {\n                        lit: syn::Lit::Int(lit),\n                        ..\n                    }) = nv.value\n                    else {\n                        return Err(syn::Error::new(\n                            span,\n                            \"`shape` must be an integer literal, e.g. `shape = 0xbba17476`\",","sourceCodeStart":70,"sourceCodeEnd":106,"githubUrl":"https://github.com/influxdata/influxdb/blob/06200ef96ba82c5f6727e5038a83af8e722c6875/influxdb3_catalog_macros/src/lib.rs#L70-L106","documentation":"When parsing a `name = value` attribute argument, the macro extracts the key as a single identifier. A multi-segment path key like `some::key = v` cannot be a single ident, so the macro rejects it with this error.","triggerScenarios":"Using a qualified path as an argument name, e.g. `#[catalog(my::id = 5)]` or `foo.bar = 1`, inside the macro attribute.","commonSituations":"Copy-pasting key names with module paths; IDE auto-completion inserting qualified names; misunderstanding that keys must be plain identifiers.","solutions":["Use a plain single-word key: id, shape, or flags","Remove any `::` or `.` from the argument name"],"exampleFix":"// before\n#[catalog(record::id = record_ids::MyRecord)]\n// after\n#[catalog(id = record_ids::MyRecord)]","handlingStrategy":"validation","validationCode":"// Argument keys must be plain identifiers, not paths:\n// bad:  #[catalog(my::id = record_ids::X)]\n// good: #[catalog(id = record_ids::X)]","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep argument keys as single lowercase words","Avoid IDE auto-complete inserting qualified paths as keys","Review attribute syntax after copy-paste"],"tags":["rust","proc-macro","syntax","attribute"],"backgroundTag":"invalid-argument-format","analyzedSha":"06200ef96ba82c5f6727e5038a83af8e722c6875","analyzedAt":"2026-09-19T12:55:30.003Z","contentChangedAt":"2026-09-19T12:55:30.003Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}