{"record":{"id":"b0cc4edc12eb1618","repo":"zed-industries/zed","slug":"on-failure-argument-must-be-a-string","errorCode":null,"errorMessage":"on_failure argument must be a string","messagePattern":"on_failure argument must be a string","errorType":"validation","errorClass":"syn::Error","httpStatus":null,"severity":"error","filePath":"crates/gpui_macros/src/test.rs","lineNumber":57,"sourceCode":"                    return Err(syn::Error::new(meta_path.span(), \"unexpected path\"));\n                };\n                ident.to_string()\n            };\n\n            match (&meta, ident.as_str()) {\n                (Meta::NameValue(meta), \"retries\") => {\n                    max_retries = parse_usize_from_expr(&meta.value)?\n                }\n                (Meta::NameValue(meta), \"iterations\") => {\n                    max_iterations = parse_usize_from_expr(&meta.value)?\n                }\n                (Meta::NameValue(meta), \"on_failure\") => {\n                    let Expr::Lit(ExprLit {\n                        lit: Lit::Str(name),\n                        ..\n                    }) = &meta.value\n                    else {\n                        return Err(syn::Error::new(\n                            meta.value.span(),\n                            \"on_failure argument must be a string\",\n                        ));\n                    };\n                    let segments = name\n                        .value()\n                        .split(\"::\")\n                        .map(|part| PathSegment::from(Ident::new(part, name.span())))\n                        .collect();\n                    let path = syn::Path {\n                        leading_colon: None,\n                        segments,\n                    };\n                    on_failure_fn_name = quote!(Some(#path));\n                }\n                (Meta::NameValue(meta), \"seed\") => {\n                    seeds = vec![parse_usize_from_expr(&meta.value)? as u64]\n                }","sourceCodeStart":39,"sourceCodeEnd":75,"githubUrl":"https://github.com/zed-industries/zed/blob/f4178619acd0d47ea1f76a2025c42962c6d6638c/crates/gpui_macros/src/test.rs#L39-L75","documentation":"Returned while parsing the on_failure = ... argument of #[gpui::test] when its expression is not a string literal. The macro needs a literal function-name string to resolve the on-failure callback; any other expression type is rejected at that span.","triggerScenarios":"Thrown at crates/gpui_macros/src/test.rs:57 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Quote the function name: on_failure = \"my_failure_handler\"","Define the named function in the same scope as the test"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"f4178619acd0d47ea1f76a2025c42962c6d6638c","analyzedAt":"2026-08-20T19:29:52.058Z","contentChangedAt":"2026-08-20T19:29:52.058Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}