* fix(swift): use official prebuilt parser runtime Vendor the official tree-sitter-swift 0.7.1 runtime package so Swift parsing works without source-building, while keeping the repo on the current tree-sitter runtime until the broader upgrade is ready. Also preserves Swift resolver correctness for overloaded owned functions and extension-backed type duplicates now that Swift is available by default. Made-with: Cursor * fix(swift): move duplicate type ordering into provider Keep Swift extension candidate ordering behind the LanguageProvider contract and cover the Swift 0.7 init scanner path so parser runtime changes do not leak language-specific logic into shared resolution. Made-with: Cursor * fix(swift): address parser runtime review Add explicit Swift prebuild checks and vendor guidance so parser runtime packaging remains observable and maintainable. |
||
|---|---|---|
| .. | ||
| bindings/node | ||
| prebuilds | ||
| src | ||
| LICENSE | ||
| package.json | ||
| README.md | ||
GitNexus vendor notice
This directory is a GitNexus-managed vendored copy of the official
tree-sitter-swift@0.7.1 npm runtime package, including its official native
prebuilds. GitNexus keeps the top-level tree-sitter dependency pinned to
^0.21.1 until the broader parser runtime upgrade is handled separately.
When updating this vendor package, replace it from an official
tree-sitter-swift npm release, keep the native prebuilds/ artifacts, update
the _vendoredBy provenance fields in package.json, and verify the packed
GitNexus tarball can load tree-sitter-swift.
tree-sitter-swift
This contains a tree-sitter grammar for the Swift programming language.
Getting started
To use this parser to parse Swift code, you'll want to depend on either the Rust crate or the NPM package.
Rust
To use the Rust crate, you'll add this to your Cargo.toml:
tree-sitter = "0.23.0"
tree-sitter-swift = "=0.7.0"
Then you can use a tree-sitter parser with the language declared here:
let mut parser = tree_sitter::Parser::new();
parser.set_language(tree_sitter_swift::language())?;
// ...
let tree = parser.parse(&my_source_code, None)
.ok_or_else(|| /* error handling code */)?;
Javascript
To use this from NPM, you'll add similar dependencies to package.json:
"dependencies: {
"tree-sitter-swift": "0.7.0",
"tree-sitter": "^0.22.1"
}
Your usage of the parser will look like:
const Parser = require("tree-sitter");
const Swift = require("tree-sitter-swift");
const parser = new Parser();
parser.setLanguage(Swift);
// ...
const tree = parser.parse(mySourceCode);
Editing the grammar
With this package checked out, a common workflow for editing the grammar will look something like:
- Make a change to
grammar.ts. - Run
npm install && npm testto see whether the change has had impact on existing parsing behavior. The defaultnpm testtarget requiresvalgrindto be installed; if you do not have it installed, and do not wish to, you can substitutetree-sitter testdirectly. - Run
tree-sitter parseon some real Swift codebase and see whether (or where) it fails. - Use any failures to create new corpus test cases.
Contributions
All contributions to this repository are welcome.
If said contribution is to check generated files (e.g., parser.c) into the repository, be aware that your contribution will not be accepted. Make sure to read the FAQ entry and the prior discussions and compromises that have occurred already on this topic.
Using tree-sitter-swift in Web Assembly
To use tree-sitter-swift as a language for the web bindings version tree-sitter, which will likely be a more modern version than the published node module. see. Follow the instructions below
- Install the node modules
npm install web-tree-sitter tree-sitter-swift - Run the tree-sitter cli to create the wasm bundle
$ npx tree-sitter build-asm ./node_modules/tree-sitter - Boot tree-sitter wasm like this.
const Parser = require('web-tree-sitter');
async function run() {
//needs to happen first
await Parser.init();
//wait for the load of swift
const Swift = await Parser.Language.load('./tree-sitter-swift.wasm');
const parser = new Parser();
parser.setLanguage(Swift);
//Parse your swift code here.
const tree = parser.parse('print("Hello, World!")');
}
//if you want to run this
run().then(console.log, console.error);
Frequently asked questions
Where is your parser.c?
This repository currently omits most of the code that is autogenerated during a build. This means, for instance, that
grammar.json and parser.c are both only available following a build. It also significantly reduces noise during
diffs.
The side benefit of not checking in parser.c is that you can guarantee backwards compatibility. Parsers generated by
the tree-sitter CLI aren't always backwards compatible. If you need a parser, generate it yourself using the CLI; all
the information to do so is available in this package. By doing that, you'll also know for sure that your parser version
and your library version are compatible.
If you need a parser.c, and you don't care about the tree-sitter version, but you don't have a local setup that would
allow you to obtain the parser, you can just download one from a recent workflow run in this package. To do so:
- Go to the GitHub actions page for this repository.
- Click on the "Publish
grammar.jsonandparser.c" action for the appropriate commit. - Go down to
Artifactsand click ongenerated-parser-src. All the relevant parser files will be available in your download.