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 before(_ parser: inout Parser) -> Bool { 12 parser.isAt(kind: .keyword(.where)) 13 } 14 15 static func inside(_ parser: inout Parser) -> ParseResult { 16 parser.expect(kind: .keyword(.where), metadata: TokenMetadata(semanticTokenType: .keyword)) 17 18 parser.eatTrivia() 19 if parser.eat(kind: .blockBegin, metadata: nil) { 20 parser.eatTrivia() 21 22 while Declaration.tryParse(&parser) { 23 parser.eatTrivia() 24 if parser.eat(kind: .blockSep, metadata: nil) { 25 parser.eatTrivia() 26 continue 27 } else { 28 break 29 } 30 } 31 32 _ = parser.eat(kind: .blockEnd, metadata: nil) 33 } 34 35 var metadata = SyntaxTreeMetadata() 36 metadata.delimitedFoldingRangeKind = .region 37 38 return ParseResult(kind: kind, metadata: metadata) 39 } 40} 41 42extension SyntaxView<TheoryBlock> { 43 var declarations: [SyntaxView<Declaration>] { 44 matchingSubviews() 45 } 46}