// SPDX-FileCopyrightText: 2025 The Project Pterodactyl Developers // // SPDX-License-Identifier: MPL-2.0 import Foundation enum TheoryBlock: Grammar { static let kind = SyntaxTreeKind(name: "theory.block") static let kinds = [kind] static func precondition(_ parser: inout Parser) -> Bool { parser.isAt(kind: .keyword(.where)) } static func inside(_ parser: inout Parser, recovery: Set) -> ParseResult { parser.expect(kind: .keyword(.where), metadata: TokenMetadata(semanticTokenType: .keyword), recovery: recovery.union([.keyword(.theory), .blockComment(terminated: true), .lineComment])) if parser.eat(kind: .blockBegin, metadata: nil) { parser.eatTrivia() while parser.eat(kind: .blockSep, metadata: nil) { Declaration.parse(&parser, recovery: recovery.union([.blockSep, .blockEnd])) parser.eatTrivia() } _ = parser.eat(kind: .blockEnd, metadata: nil) } var metadata = SyntaxTreeMetadata() metadata.delimitedFoldingRangeKind = .region return ParseResult(kind: kind, metadata: metadata) } } extension SyntaxView { var declarations: [SyntaxView] { matchingSubviews() } }