# tree-sitter-scheme

[![Build/test](https://github.com/6cdh/tree-sitter-scheme/workflows/Build/test/badge.svg)](https://github.com/6cdh/tree-sitter-scheme/actions/workflows/test.yml)

Scheme grammar for tree-sitter.

## Recent News

* With R7RS support, a single `|` can no longer appear in the middle of an identifier.
* The node `directive` no longer contains the sub node `symbol`. It is now a single node.
* Some extensions were added, see below.

## Status

~~tree-sitter-scheme should work on a superset of Scheme.~~

Different implementations might have conflicting grammars. I am not sure if I should support
them. If you need some implementation-specific features, please open an issue, then I will consider supporting it.

current status:

* [x] R5RS
* [x] R6RS
* [x] R7RS
* [ ] Extensions
  * [x] `{}` as replacement for `()` or `[]`
  * [x] extend symbols which can start with digits, period, ... etc as long as it's not a number
  * [x] keyword `#:symbol`
  * [x] escape sequence in string `\` + any character
  * [x] characters `#\bel`, `#\ls`, `#\nel`, `#\rubout`, `#\vt`
  * [x] character `#\u[A-Fa-f0-9]+`

Please open an issue to let me know it's really used if you want to add new extensions.

## Implementation

* [ ] Support for implementation
  * [ ] Chez Scheme ([#1](https://github.com/6cdh/tree-sitter-scheme/issues/1))
  * [ ] Chicken Scheme ([#3](https://github.com/6cdh/tree-sitter-scheme/issues/3))
  * [ ] Guile Scheme ([#7](https://github.com/6cdh/tree-sitter-scheme/issues/7))
  * [ ] Steel Scheme ([#17](https://github.com/6cdh/tree-sitter-scheme/issues/17))

## Usage

See [nodes.md](./nodes.md) for all visible nodes.

This parser doesn't parse language constructs. Instead, it parses code as lists.

If you want language constructs support, use custom queries (see [#5](https://github.com/6cdh/tree-sitter-scheme/issues/5)), also see [thchha/tree-sitter-scheme](https://gitlab.com/thchha/tree-sitter-scheme).

## Query

The queries here are too simple and not intended to be useful in an editor.
Please open an issue if you have suggestions.

## Reference

Scheme

* [R5RS](https://schemers.org/Documents/Standards/R5RS/)
* [R6RS](http://www.r6rs.org/)
* [R7RS](https://small.r7rs.org/)
* [The Scheme Programming Language](https://www.scheme.com/tspl4/)

Tree-sitter

* [official documents](https://tree-sitter.github.io/tree-sitter)
* [Guide to your first Tree-sitter grammar](https://gist.github.com/Aerijo/df27228d70c633e088b0591b8857eeef)
* [tree-sitter-clojure](https://github.com/sogaiu/tree-sitter-clojure)
* [tree-sitter-commonlisp](https://github.com/theHamsta/tree-sitter-commonlisp)
* [tree-sitter-fennel](https://github.com/TravonteD/tree-sitter-fennel)

