{"record":{"id":"6f85992c8a689274","repo":"diesel-rs/diesel","slug":"expect-last-arguments","errorCode":null,"errorMessage":"expect `last_arguments`","messagePattern":"expect `last_arguments`","errorType":"exception","errorClass":"syn::Error","httpStatus":null,"severity":"error","filePath":"diesel_derives/src/sql_function.rs","lineNumber":1418,"sourceCode":"        }),\n        syn::Meta::List(syn::MetaList {\n            path,\n            delimiter: syn::MacroDelimiter::Paren(_),\n            tokens: _,\n        }) if path.is_ident(\"variadic\") => {\n            let (count, flag) = attr\n                .parse_args_with(|input: syn::parse::ParseStream| {\n                    if input.peek(LitInt){\n                        let count = input.parse::<LitInt>()?;\n                        if !input.is_empty(){\n                            return Err(syn::Error::new(input.span(), \"unexpected token after positional `#[variadic(..)]`\"));\n                        }\n                        Ok((count, LitBool::new(false, Span::call_site())))\n                    }\n                    else {\n                        let key: Ident = input.parse()?;\n                        if key != \"last_arguments\" {\n                            return Err(syn::Error::new(key.span(), \"expect `last_arguments`\"));\n                        }\n                        let _eq: Token![=] = input.parse()?;\n                        let count: LitInt = input.parse()?;\n                        let skip_zero: LitBool = if input.peek(Token![,]) {\n                            let _: Token![,] = input.parse()?;\n                            let key: Ident = input.parse()?;\n                            if key != \"skip_zero_argument_variant\" {\n                                return Err(\n                                    syn::Error::new(\n                                        key.span(), \"expect `skip_zero_argument_variant`\"\n                                    )\n                                );\n                            }\n                            let _eq: Token![=] = input.parse()?;\n                            input.parse()?\n                        } else {\n                            LitBool::new(false, Span::call_site())\n                        };","sourceCodeStart":1400,"sourceCodeEnd":1436,"githubUrl":"https://github.com/diesel-rs/diesel/blob/6fa6ed01b24b24248ab2a611698d0a7c6a2e9120/diesel_derives/src/sql_function.rs#L1400-L1436","documentation":"The named form of the variadic attribute requires the key `last_arguments` (e.g. `#[variadic(last_arguments = 2)]`). If the first token inside `#[variadic(..)]` is an identifier but it is not exactly `last_arguments`, `parse_attribute` raises this error at the key's span.","triggerScenarios":"Writing `#[variadic(last_arg = 2)]`, `#[variadic(count = 2)]`, or any other key name inside `#[variadic(..)]` on a `#[sql_function]` item.","commonSituations":"Guessing the key name instead of consulting docs; abbreviating `last_arguments`; copying a variant from an older diesel version with different syntax.","solutions":["Rename the key to exactly `last_arguments`.","Or use the positional form `#[variadic(2)]` instead of the named form.","Check the diesel version: the key-value syntax (`last_arguments`, optional skip-zero flag) is version-specific."],"exampleFix":"// before\n#[sql_function]\n#[variadic(last_args = 2)]\nfn json_build_object();\n\n// after\n#[sql_function]\n#[variadic(last_arguments = 2)]\nfn json_build_object();","handlingStrategy":"validation","validationCode":"// Named form requires the exact key:\n// #[variadic(last_arguments = 2)]\nlet key = \"last_arguments\";\nassert_eq!(key, \"last_arguments\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Spell the key exactly as `last_arguments`; no abbreviations.","Prefer the simpler positional form `#[variadic(N)]` when no extra flags are needed.","Confirm the key-value syntax against your diesel version."],"tags":["rust","proc-macro","diesel","attributes","syntax"],"backgroundTag":"invalid-argument-format","analyzedSha":"6fa6ed01b24b24248ab2a611698d0a7c6a2e9120","analyzedAt":"2026-09-07T01:50:13.074Z","contentChangedAt":"2026-09-07T01:50:13.074Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}