diff --git a/Package.resolved b/Package.resolved index ffc010f2f..d643428ed 100644 --- a/Package.resolved +++ b/Package.resolved @@ -6,8 +6,8 @@ "repositoryURL": "https://github.com/tree-sitter/tree-sitter", "state": { "branch": null, - "revision": "98be227227af10cc7a269cb3ffb23686c0610b17", - "version": "0.20.9" + "revision": "bf655c0beaf4943573543fa77c58e8006ff34971", + "version": "0.25.6" } } ] diff --git a/Package.swift b/Package.swift index 9359a393b..e181b8ff5 100644 --- a/Package.swift +++ b/Package.swift @@ -13,7 +13,7 @@ let package = Package( .library(name: "Runestone", targets: ["Runestone"]) ], dependencies: [ - .package(url: "https://github.com/tree-sitter/tree-sitter", .upToNextMinor(from: "0.20.9")) + .package(url: "https://github.com/tree-sitter/tree-sitter", .upToNextMinor(from: "0.25.6")) ], targets: [ .target(name: "Runestone", dependencies: [ diff --git a/Sources/Runestone/TextView/SyntaxHighlighting/Internal/TreeSitter/TreeSitterInternalLanguage.swift b/Sources/Runestone/TextView/SyntaxHighlighting/Internal/TreeSitter/TreeSitterInternalLanguage.swift index ccfb5c6a1..83b4ce7e8 100644 --- a/Sources/Runestone/TextView/SyntaxHighlighting/Internal/TreeSitter/TreeSitterInternalLanguage.swift +++ b/Sources/Runestone/TextView/SyntaxHighlighting/Internal/TreeSitter/TreeSitterInternalLanguage.swift @@ -1,12 +1,12 @@ import TreeSitter final class TreeSitterInternalLanguage { - let languagePointer: UnsafePointer + let languagePointer: OpaquePointer let highlightsQuery: TreeSitterQuery? let injectionsQuery: TreeSitterQuery? let indentationScopes: TreeSitterIndentationScopes? - init(languagePointer: UnsafePointer, + init(languagePointer: OpaquePointer, highlightsQuery: TreeSitterQuery?, injectionsQuery: TreeSitterQuery?, indentationScopes: TreeSitterIndentationScopes?) { diff --git a/Sources/Runestone/TextView/SyntaxHighlighting/Internal/TreeSitter/TreeSitterInternalLanguageMode.swift b/Sources/Runestone/TextView/SyntaxHighlighting/Internal/TreeSitter/TreeSitterInternalLanguageMode.swift index d089d7682..b32f43beb 100644 --- a/Sources/Runestone/TextView/SyntaxHighlighting/Internal/TreeSitter/TreeSitterInternalLanguageMode.swift +++ b/Sources/Runestone/TextView/SyntaxHighlighting/Internal/TreeSitter/TreeSitterInternalLanguageMode.swift @@ -23,7 +23,7 @@ final class TreeSitterInternalLanguageMode: InternalLanguageMode { self.lineManager = lineManager operationQueue.name = "TreeSitterLanguageMode" operationQueue.qualityOfService = .default - parser = TreeSitterParser(encoding: TSInputEncodingUTF16) + parser = TreeSitterParser(encoding: TSInputEncodingUTF16LE) rootLanguageLayer = TreeSitterLanguageLayer( language: language, languageProvider: languageProvider, diff --git a/Sources/Runestone/TextView/SyntaxHighlighting/TreeSitter/TreeSitterLanguage.swift b/Sources/Runestone/TextView/SyntaxHighlighting/TreeSitter/TreeSitterLanguage.swift index 35c6b97a6..63916238c 100644 --- a/Sources/Runestone/TextView/SyntaxHighlighting/TreeSitter/TreeSitterLanguage.swift +++ b/Sources/Runestone/TextView/SyntaxHighlighting/TreeSitter/TreeSitterLanguage.swift @@ -8,7 +8,7 @@ import TreeSitter /// Refer to for more information on adding a Tree-sitter language to your project. public final class TreeSitterLanguage { /// Reference to the raw Tree-sitter language. - public let languagePointer: UnsafePointer + public let languagePointer: OpaquePointer /// Query used for syntax highlighting. public let highlightsQuery: TreeSitterLanguage.Query? /// Query used for detecting injected languages. @@ -34,7 +34,7 @@ public final class TreeSitterLanguage { /// - highlightsQuery: Query used for syntax highlighting. /// - injectionsQuery: Query used for detecting injected languages. /// - indentationScopes: Rules used for indenting text. - public init(_ language: UnsafePointer, + public init(_ language: OpaquePointer, highlightsQuery: TreeSitterLanguage.Query? = nil, injectionsQuery: TreeSitterLanguage.Query? = nil, indentationScopes: TreeSitterIndentationScopes? = nil) { @@ -93,7 +93,7 @@ private extension TreeSitterInternalLanguage { indentationScopes: language.indentationScopes) } - private static func makeInternalQuery(from query: TreeSitterLanguage.Query?, with language: UnsafePointer) -> TreeSitterQuery? { + private static func makeInternalQuery(from query: TreeSitterLanguage.Query?, with language: OpaquePointer) -> TreeSitterQuery? { if let string = query?.string { do { return try TreeSitterQuery(source: string, language: language) diff --git a/Sources/Runestone/TreeSitter/TreeSitterParser.swift b/Sources/Runestone/TreeSitter/TreeSitterParser.swift index d7073445e..b236edb3f 100644 --- a/Sources/Runestone/TreeSitter/TreeSitterParser.swift +++ b/Sources/Runestone/TreeSitter/TreeSitterParser.swift @@ -8,7 +8,7 @@ protocol TreeSitterParserDelegate: AnyObject { final class TreeSitterParser { weak var delegate: TreeSitterParserDelegate? let encoding: TSInputEncoding - var language: UnsafePointer? { + var language: OpaquePointer? { didSet { ts_parser_set_language(pointer, language) } @@ -81,8 +81,10 @@ private extension TSInputEncoding { switch self { case TSInputEncodingUTF8: return .utf8 - case TSInputEncodingUTF16: - return String.preferredUTF16Encoding + case TSInputEncodingUTF16LE: + return .utf16LittleEndian + case TSInputEncodingUTF16BE: + return .utf16BigEndian default: return nil } diff --git a/Sources/Runestone/TreeSitter/TreeSitterQuery.swift b/Sources/Runestone/TreeSitter/TreeSitterQuery.swift index 1619d2575..aaa1f2036 100644 --- a/Sources/Runestone/TreeSitter/TreeSitterQuery.swift +++ b/Sources/Runestone/TreeSitter/TreeSitterQuery.swift @@ -12,12 +12,12 @@ enum TreeSitterQueryError: Error { final class TreeSitterQuery { let pointer: OpaquePointer - private let language: UnsafePointer + private let language: OpaquePointer private var patternCount: UInt32 { ts_query_pattern_count(pointer) } - init(source: String, language: UnsafePointer) throws { + init(source: String, language: OpaquePointer) throws { let errorOffset = UnsafeMutablePointer.allocate(capacity: 1) let errorType = UnsafeMutablePointer.allocate(capacity: 1) let pointer = source.withCString { cstr in diff --git a/Sources/Runestone/TreeSitter/TreeSitterTextInput.swift b/Sources/Runestone/TreeSitter/TreeSitterTextInput.swift index df03614b3..6509189dc 100644 --- a/Sources/Runestone/TreeSitter/TreeSitterTextInput.swift +++ b/Sources/Runestone/TreeSitter/TreeSitterTextInput.swift @@ -21,7 +21,7 @@ final class TreeSitterTextInput { func makeTSInput() -> TSInput { let payload = Unmanaged.passUnretained(self).toOpaque() - return TSInput(payload: payload, read: read, encoding: encoding) + return TSInput(payload: payload, read: read, encoding: encoding, decode: nil) } func deallocate() { diff --git a/Tests/RunestoneTests/Helpers/LanguageModeFactory.swift b/Tests/RunestoneTests/Helpers/LanguageModeFactory.swift index f3ae7a33d..c49a56b70 100644 --- a/Tests/RunestoneTests/Helpers/LanguageModeFactory.swift +++ b/Tests/RunestoneTests/Helpers/LanguageModeFactory.swift @@ -22,7 +22,7 @@ enum LanguageModeFactory { "}", "]" ]) - let language = TreeSitterLanguage(tree_sitter_javascript(), indentationScopes: indentationScopes) + let language = TreeSitterLanguage(OpaquePointer(tree_sitter_javascript()), indentationScopes: indentationScopes) let languageMode = languageMode(language: language, text: text) languageMode.parse(text as NSString) return languageMode @@ -30,7 +30,7 @@ enum LanguageModeFactory { static func jsonLanguageMode(text: String) -> TreeSitterInternalLanguageMode { let indentationScopes = TreeSitterIndentationScopes(indent: ["object", "array"], outdent: ["}", "]"]) - let language = TreeSitterLanguage(tree_sitter_json(), indentationScopes: indentationScopes) + let language = TreeSitterLanguage(OpaquePointer(tree_sitter_json()), indentationScopes: indentationScopes) let languageMode = languageMode(language: language, text: text) languageMode.parse(text as NSString) return languageMode @@ -38,7 +38,7 @@ enum LanguageModeFactory { static func htmlLanguageMode(text: String) -> TreeSitterInternalLanguageMode { let indentationScopes = TreeSitterIndentationScopes(indent: ["start_tag", "element"], outdent: ["end_tag"]) - let language = TreeSitterLanguage(tree_sitter_html(), indentationScopes: indentationScopes) + let language = TreeSitterLanguage(OpaquePointer(tree_sitter_html()), indentationScopes: indentationScopes) let languageMode = languageMode(language: language, text: text) languageMode.parse(text as NSString) return languageMode @@ -58,7 +58,7 @@ enum LanguageModeFactory { "try_statement" ], whitespaceDenotesBlocks: true) - let language = TreeSitterLanguage(tree_sitter_python(), indentationScopes: indentationScopes) + let language = TreeSitterLanguage(OpaquePointer(tree_sitter_python()), indentationScopes: indentationScopes) let languageMode = languageMode(language: language, text: text) languageMode.parse(text as NSString) return languageMode @@ -66,7 +66,7 @@ enum LanguageModeFactory { static func yamlLanguageMode(text: String) -> TreeSitterInternalLanguageMode { let indentationScopes = TreeSitterIndentationScopes(indent: ["block_mapping_pair"], whitespaceDenotesBlocks: true) - let language = TreeSitterLanguage(tree_sitter_yaml(), indentationScopes: indentationScopes) + let language = TreeSitterLanguage(OpaquePointer(tree_sitter_yaml()), indentationScopes: indentationScopes) let languageMode = languageMode(language: language, text: text) languageMode.parse(text as NSString) return languageMode diff --git a/Tests/RunestoneTests/TreeSitterParserTests.swift b/Tests/RunestoneTests/TreeSitterParserTests.swift index 6b952a346..19d0be026 100644 --- a/Tests/RunestoneTests/TreeSitterParserTests.swift +++ b/Tests/RunestoneTests/TreeSitterParserTests.swift @@ -8,9 +8,9 @@ final class TreeSitterParserTests: XCTestCase { func testParseString() { let string: NSString = "let foo = \"Hello world\"" - let parser = TreeSitterParser(encoding: TSInputEncodingUTF16) + let parser = TreeSitterParser(encoding: TSInputEncodingUTF16LE) parser.delegate = delegate - parser.language = tree_sitter_javascript() + parser.language = OpaquePointer(tree_sitter_javascript()) let tree = parser.parse(string) let expressionString = "(program (lexical_declaration (variable_declarator name: (identifier) value: (string))))" XCTAssertEqual(tree?.rootNode.expressionString, expressionString) @@ -18,9 +18,9 @@ final class TreeSitterParserTests: XCTestCase { func testReplaceShortTextWithSameShortText() { let string: NSString = "let foo = \"Hello world\"" - let parser = TreeSitterParser(encoding: TSInputEncodingUTF16) + let parser = TreeSitterParser(encoding: TSInputEncodingUTF16LE) parser.delegate = delegate - parser.language = tree_sitter_javascript() + parser.language = OpaquePointer(tree_sitter_javascript()) let oldTree = parser.parse(string) // Replace the entire text but with the same text (Select all and paste: CMD + A, CMD + V) let inputEdit = TreeSitterInputEdit( @@ -55,9 +55,9 @@ final class TreeSitterParserTests: XCTestCase { } """ - let parser = TreeSitterParser(encoding: TSInputEncodingUTF16) + let parser = TreeSitterParser(encoding: TSInputEncodingUTF16LE) parser.delegate = delegate - parser.language = tree_sitter_javascript() + parser.language = OpaquePointer(tree_sitter_javascript()) let oldTree = parser.parse(string) // Replace the entire text but with the same text (Select all and paste: CMD + A, CMD + V) let inputEdit = TreeSitterInputEdit(