1// SPDX-FileCopyrightText: 2025 The Project Pterodactyl Developers 2// 3// SPDX-License-Identifier: MPL-2.0 4 5import Foundation 6 7enum TheoryBlock: Grammar { 8 static let kind = SyntaxTreeKind(name: "theory.block") 9 static let kinds = [kind] 10 11 static func precondition(_ parser: inout Parser) -> Bool { 12 parser.isAt(kind: .keyword(.where)) 13 } 14 15 static func inside(_ parser: inout Parser, recovery: Set<TokenKind>) -> ParseResult { 16 parser.expect(kind: .keyword(.where), metadata: TokenMetadata(semanticTokenType: .keyword), recovery: recovery.union([.keyword(.theory), .blockComment(terminated: true), .lineComment])) 17 18 if parser.eat(kind: .blockBegin, metadata: nil) { 19 parser.eatTrivia() 20 while parser.eat(kind: .blockSep, metadata: nil) { 21 Declaration.parse(&parser, recovery: recovery.union([.blockSep, .blockEnd])) 22 parser.eatTrivia() 23 } 24 _ = parser.eat(kind: .blockEnd, metadata: nil) 25 } 26 27 var metadata = SyntaxTreeMetadata() 28 metadata.delimitedFoldingRangeKind = .region 29 30 return ParseResult(kind: kind, metadata: metadata) 31 } 32} 33 34extension SyntaxView<TheoryBlock> { 35 var declarations: [SyntaxView<Declaration>] { 36 matchingSubviews() 37 } 38}