crystal-tree-sitter
crystal-tree-sitter
Crystal bindings for the tree-sitter API.
It works by reading the tree-sitter CLI configuration file to locate where the parsers can be found, then it loads the parsers shared objects at runtime when needed. So any parser available on tree-sitter-cli must be available on Crystal.
This is not to be confused with crystal-lang-tools/tree-sitter-crystal, which is a tree sitter parser for parsing Crystal lang.
Installation
-
Add the dependency to your
shard.yml
:dependencies: tree_sitter: github: crystal-lang-tools/crystal-tree-sitter
-
Run
shards install
Usage
API still not stable at all and subject to change. Meanwhile look at the spec tests to guess hwo to use it 😁️.
The code used in the Using Parsers tree-sitter tutorial was ported as a spec test at spec/tree_sitter_spec.cr, the API documentation is being ported as well, not yet on github-pages, but run crystal doc
and have fun.
require "tree_sitter"
parser = TreeSitter::Parser.new("crystal")
source = <<-CRYSTAL
class Name
end
CRYSTAL
tree = parser.parse nil, source
query = TreeSitter::Query.new(parser.language, <<-SCM)
(class_def) @class
(constant) @constant
SCM
cursor = TreeSitter::QueryCursor.new(query)
cursor.exec(tree.root_node)
cursor.each_capture do |capture|
p capture
end
Contributing
- Fork it (https://github.com/crystal-lang-tools/crystal-tree-sitter/fork)
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request
Contributors
- Hugo Parente Lima - creator
- Margret Riegert - maintainer
crystal-tree-sitter
- 0
- 0
- 1
- 1
- 0
- about 19 hours ago
- January 20, 2025
MIT License
Tue, 21 Jan 2025 04:14:03 GMT