{"record":{"id":"52cec1f7549e0f92","repo":"swc-project/swc","slug":"expected-string-url-or-function-token","errorCode":null,"errorMessage":"Expected string, url or function token","messagePattern":"Expected string, url or function token","errorType":"validation","errorClass":"swc_css_parser::Error","httpStatus":null,"severity":"error","filePath":"crates/swc_css_parser/src/parser/at_rules/mod.rs","lineNumber":160,"sourceCode":"                if !is!(self, EOF) {\n                    let span = self.input.cur_span();\n\n                    return Err(Error::new(span, ErrorKind::Expected(\"'{' token\")));\n                }\n\n                None\n            }\n            \"import\" => {\n                self.input.skip_ws();\n\n                let span = self.input.cur_span();\n                let href = Box::new(match cur!(self) {\n                    tok!(\"string\") => ImportHref::Str(self.parse()?),\n                    tok!(\"url\") => ImportHref::Url(self.parse()?),\n                    // TODO why we need it?\n                    tok!(\"function\") => ImportHref::Url(self.parse()?),\n                    _ => {\n                        return Err(Error::new(\n                            span,\n                            ErrorKind::Expected(\"string, url or function token\"),\n                        ))\n                    }\n                });\n\n                self.input.skip_ws();\n\n                let layer_name = if !is!(self, EOF) {\n                    match cur!(self) {\n                        Token::Ident { value, .. }\n                            if matches_eq_ignore_ascii_case!(value, \"layer\") =>\n                        {\n                            let name = ImportLayerName::Ident(self.parse()?);\n\n                            self.input.skip_ws();\n\n                            Some(Box::new(name))","sourceCodeStart":142,"sourceCodeEnd":178,"githubUrl":"https://github.com/swc-project/swc/blob/5176682b65416c6b5de6b47379ae1588ea3ecb3f/crates/swc_css_parser/src/parser/at_rules/mod.rs#L142-L178","documentation":"Fired while parsing the prelude of an @import at-rule: after skipping whitespace, the parser looked at the current token to read the import href and it was neither a string nor a url(...) token. Per CSS syntax, @import's href must be a <string> or a <url>; anything else (e.g. an identifier or bare delimiter) is rejected. The input at fault is a malformed @import prelude such as `@import foo;`.","triggerScenarios":"Thrown at crates/swc_css_parser/src/parser/at_rules/mod.rs:160 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Write the @import target as a string or url()","Report the error from the parse result","Skip the invalid at-rule"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"5176682b65416c6b5de6b47379ae1588ea3ecb3f","analyzedAt":"2026-08-17T16:16:52.067Z","contentChangedAt":"2026-08-17T16:16:52.067Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}