{"record":{"id":"02668dd5f8b2309a","repo":"rust-lang/rust","slug":"expected-an-identifier","errorCode":null,"errorMessage":"expected an identifier","messagePattern":"expected an identifier","errorType":"validation","errorClass":"syn::Error","httpStatus":null,"severity":"error","filePath":"library/compiler-builtins/crates/libm-macros/src/enums.rs","lineNumber":25,"sourceCode":"\nuse crate::{ALL_OPERATIONS, base_name};\n\n/// Implement `#[function_enum]`, see documentation in `lib.rs`.\npub fn function_enum(\n    mut item: ItemEnum,\n    attributes: pm2::TokenStream,\n) -> syn::Result<pm2::TokenStream> {\n    expect_empty_enum(&item)?;\n    let attr_span = attributes.span();\n    let mut attr = attributes.into_iter();\n\n    // Attribute should be the identifier of the `BaseName` enum.\n    let Some(tt) = attr.next() else {\n        return Err(syn::Error::new(attr_span, \"expected one attribute\"));\n    };\n\n    let pm2::TokenTree::Ident(base_enum) = tt else {\n        return Err(syn::Error::new(tt.span(), \"expected an identifier\"));\n    };\n\n    if let Some(tt) = attr.next() {\n        return Err(syn::Error::new(\n            tt.span(),\n            \"unexpected token after identifier\",\n        ));\n    }\n\n    let enum_name = &item.ident;\n    let mut as_str_arms = Vec::new();\n    let mut from_str_arms = Vec::new();\n    let mut base_arms = Vec::new();\n\n    for func in ALL_OPERATIONS.iter() {\n        let fn_name = func.name;\n        let ident = Ident::new(&fn_name.to_upper_camel_case(), Span::call_site());\n        let bname_ident = Ident::new(&base_name(fn_name).to_upper_camel_case(), Span::call_site());","sourceCodeStart":7,"sourceCodeEnd":43,"githubUrl":"https://github.com/rust-lang/rust/blob/7088e4b63a9516ebfbfe2ab2d999cf01a528ac14/library/compiler-builtins/crates/libm-macros/src/enums.rs#L7-L43","documentation":"Thrown by `#[function_enum]` (enums.rs:25) when the single attribute is not an identifier. The attribute must be the name of the `BaseName` enum, so literals, punctuation, or groups are rejected.","triggerScenarios":"Providing a non-identifier token as the attribute, e.g. `#[function_enum(\"BaseName\")]`, `#[function_enum(123)]`, or `#[function_enum(::BaseName)]`.","commonSituations":"Mis-typing the enum name; attempting to pass a path/string instead of a bare identifier.","solutions":["Pass a single bare identifier: `#[function_enum(BaseName)]`.","Avoid paths, strings, or fully-qualified names in the attribute."],"exampleFix":"// before\n#[function_enum(\"BaseName\")]\nenum Func {}\n\n// after\n#[function_enum(BaseName)]\nenum Func {}","handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":["The attribute must be a bare identifier, not a string or path.","Match the identifier exactly to the BaseName enum's name."],"tags":["proc-macro","libm","function-enum","validation"],"backgroundTag":null,"analyzedSha":"7088e4b63a9516ebfbfe2ab2d999cf01a528ac14","analyzedAt":"2026-08-10T14:17:03.603Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}