1// SPDX-FileCopyrightText: 2025 The Project Pterodactyl Developers 2// 3// SPDX-License-Identifier: MPL-2.0 4 5import Foundation 6 7enum ImportName: Grammar { 8 static let kind = SyntaxTreeKind(name: "import.name") 9 static let kinds = [kind] 10 11 static func before(_ parser: inout Parser) -> Bool { 12 parser.isAt(kind: .identifier) 13 } 14 15 static func inside(_ parser: inout Parser) -> ParseResult { 16 parser.expect(kind: .identifier, metadata: TokenMetadata(semanticTokenType: .namespace)) 17 return ParseResult(kind: Self.kind) 18 } 19} 20 21enum Import: Grammar { 22 static let kind = SyntaxTreeKind(name: "import") 23 static let kinds = [kind] 24 25 static func before(_ parser: inout Parser) -> Bool { 26 parser.isAt(kind: .keyword(.import)) 27 } 28 29 static func inside(_ parser: inout Parser) -> ParseResult { 30 parser.expect(kind: .keyword(.import), metadata: TokenMetadata(semanticTokenType: .keyword)) 31 parser.eatTrivia() 32 ImportName.parse(&parser) 33 return ParseResult(kind: Self.kind) 34 } 35} 36 37 38extension SyntaxView<ImportName> { 39 var text: String { cursor.node.text } 40} 41 42extension SyntaxView<Import> { 43 var name: SyntaxView<ImportName>? { 44 matchingSubview() 45 } 46}