func quote_pattern(input: MacroInput, splices: [SyntaxSplice<Pattern>], context: &QuoteContext) -> SyntaxResult<Pattern>Quotes pattern tokens, applies hygiene, and validates the completed pattern.
Pattern splices are grouped as single grammar nodes. Missing, duplicate, or category-incompatible antiquotations return a SyntaxFailure.
View Source
pub func quote_pattern(input: MacroInput, splices: [SyntaxSplice<Pattern>], context: &QuoteContext) -> SyntaxResult<Pattern> {
let result = quote_raw(input: input, splices: raw_pattern_splices(splices: splices), context: context, category: .pattern)
if let .some(failure) = result.failure { return SyntaxResult<Pattern>(value: .none, failure: .some(failure)) }
if let .some(raw) = result.raw {
let materialized = materialize(raw: raw, group_splices: false)
if let .some(failure) = parse_failure(outcome: parse_pattern_tokens(source: materialized.source, input: materialized.input), fallback: materialized.input.span) {
return SyntaxResult<Pattern>(value: .none, failure: .some(failure))
}
return SyntaxResult<Pattern>(value: .some(Syntax<Pattern>(raw: raw)), failure: .none)
}
SyntaxResult<Pattern>(value: .none, failure: .some(SyntaxFailure(code: "syntax.quote.invalid", message: "Invalid pattern quotation", span: 0..<0)))
}