From 27332870d93d8602c73463340d256286abb44efb Mon Sep 17 00:00:00 2001 From: Will Hawkins Date: Fri, 30 Jan 2026 08:27:08 -0500 Subject: [PATCH] Factor Tree-Sitter Extensions Don't build. Signed-off-by: Will Hawkins --- Package.swift | 10 ++++- Sources/TreeSitterExtensions/Extensions.swift | 39 +++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 Sources/TreeSitterExtensions/Extensions.swift diff --git a/Package.swift b/Package.swift index e792cd8..7e884f7 100644 --- a/Package.swift +++ b/Package.swift @@ -39,11 +39,17 @@ let package = Package( .product(name: "SwiftTreeSitter", package: "swift-tree-sitter"), .product(name: "SwiftTreeSitterLayer", package: "swift-tree-sitter"), .product(name: "TreeSitterP4", package: "tree-sitter-p4"), + .target(name: "TreeSitterExtensions"), .target(name: "P4"), ], ), - // Targets are the basic building blocks of a package, defining a module or a test suite. - // Targets can depend on other targets in this package and products from dependencies. + .target( + name: "TreeSitterExtensions", + dependencies: [ + .product(name: "SwiftTreeSitter", package: "swift-tree-sitter"), + .product(name: "SwiftTreeSitterLayer", package: "swift-tree-sitter"), + ], + ), .target( name: "P4", dependencies: ["P4Macros"] diff --git a/Sources/TreeSitterExtensions/Extensions.swift b/Sources/TreeSitterExtensions/Extensions.swift new file mode 100644 index 0000000..1c8840f --- /dev/null +++ b/Sources/TreeSitterExtensions/Extensions.swift @@ -0,0 +1,39 @@ +// p4rse, Copyright 2026, Will Hawkins +// +// This file is part of p4rse. + +// This file is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +import SwiftTreeSitter + +extension MutableTree { + public func isError(lang: Language) -> Bool { + guard + let parser_error_query = try? SwiftTreeSitter.Query( + language: lang, + data: String( + "(ERROR)" + ).data(using: String.Encoding.utf8)!) + else { + return false + } + + let error_qr = parser_error_query.execute(in: self) + for _ in error_qr { + return true + } + return false + } +} +