{"record":{"id":"84baa88ce628a3fd","repo":"swc-project/swc","slug":"invalid-syntax","errorCode":null,"errorMessage":"invalid syntax","messagePattern":"invalid syntax","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/swc_ecma_transforms_react/src/display_name/mod.rs","lineNumber":215,"sourceCode":"fn is_key_display_name(prop: &PropOrSpread) -> bool {\n    match *prop {\n        PropOrSpread::Prop(ref prop) => match **prop {\n            Prop::Shorthand(ref i) => i.sym == \"displayName\",\n            Prop::Method(MethodProp { ref key, .. })\n            | Prop::Getter(GetterProp { ref key, .. })\n            | Prop::Setter(SetterProp { ref key, .. })\n            | Prop::KeyValue(KeyValueProp { ref key, .. }) => match *key {\n                PropName::Ident(ref i) => i.sym == \"displayName\",\n                PropName::Str(ref s) => {\n                    matches!(s.value.as_str(), Some(value) if value == \"displayName\")\n                }\n                PropName::Num(..) => false,\n                PropName::BigInt(..) => false,\n                PropName::Computed(..) => false,\n                #[cfg(swc_ast_unknown)]\n                _ => panic!(\"unable to access unknown nodes\"),\n            },\n            Prop::Assign(..) => unreachable!(\"invalid syntax\"),\n            #[cfg(swc_ast_unknown)]\n            _ => panic!(\"unable to access unknown nodes\"),\n        },\n        _ => false,\n        // TODO(kdy1): maybe.. handle spread\n    }\n}\n","sourceCodeStart":197,"sourceCodeEnd":223,"githubUrl":"https://github.com/swc-project/swc/blob/5176682b65416c6b5de6b47379ae1588ea3ecb3f/crates/swc_ecma_transforms_react/src/display_name/mod.rs#L197-L223","documentation":"The React display_name pass scans object literals (e.g. options passed to forwardRef/memo/createReactClass-like calls) for a `displayName` key. While matching property keys it treats Prop::Assign as impossible: `{a = 1}` assignment shorthand is cover grammar that is only valid inside destructuring patterns, so an object literal expression containing it is invalid syntax, hence unreachable!(\"invalid syntax\").","triggerScenarios":"Feeding the React display_name transform an object expression containing Prop::Assign nodes — produced by custom transforms that turn object/array patterns into object literals, by lenient parsers, or by hand-built ASTs. Not reproducible from normal parsed source because the parser rejects it.","commonSituations":"Codemods migrating destructuring patterns into object expressions; ESLint/AST tooling feeding modified ASTs back into swc; tests constructing ObjectLit props manually.","solutions":["Normalize the AST before the React transform: convert Prop::Assign to Prop::KeyValue (and bare shorthand to key:value).","Fix the generator/codemod that produced `{a = b}` in expression position — it is invalid JavaScript.","Report to the producer tool, not swc, when the AST provably contains Prop::Assign in an expression."],"exampleFix":"// before: cover-grammar node left in an object expression\n// ast: ObjectLit { props: [Prop::Assign { key: displayName, value }) }] }\n\n// after\n// ast: ObjectLit { props: [Prop::KeyValue { key: displayName, value }) }] }\n// source equivalent: ({ displayName: 'Foo' })","handlingStrategy":"type-guard","validationCode":"use swc_ecma_ast::{ObjectLit, Prop, PropOrSpread};\nfn no_assign_props(o: &ObjectLit) -> bool {\n    o.props.iter().all(|p| !matches!(p, PropOrSpread::Prop(p) if matches!(**p, Prop::Assign(_))))\n}","typeGuard":"fn is_plain_object_expr(o: &ObjectLit) -> bool {\n    o.props.iter().all(|p| match p {\n        PropOrSpread::Prop(p) => !matches!(**p, Prop::Assign(_)),\n        PropOrSpread::Spread(_) => true,\n    })\n}","tryCatchPattern":null,"preventionTips":["Normalize cover-grammar nodes (Prop::Assign) to KeyValue when moving patterns into expressions.","Validate third-party ASTs before React/Babel-compat passes.","Remember `{a = 1}` only parses inside destructuring patterns."],"tags":["swc","react","display-name","prop-assign","cover-grammar","invalid-ast","panic"],"backgroundTag":"invalid-syntax-ast","analyzedSha":"5176682b65416c6b5de6b47379ae1588ea3ecb3f","analyzedAt":"2026-08-17T16:16:52.067Z","schemaVersion":2},"datasetVersion":"2026-08-22T20:17:22.307Z"}