{"id":13480744,"url":"https://github.com/emacs-tree-sitter/elisp-tree-sitter","last_synced_at":"2025-10-25T06:08:07.795Z","repository":{"id":37961859,"uuid":"195978598","full_name":"emacs-tree-sitter/elisp-tree-sitter","owner":"emacs-tree-sitter","description":"Emacs Lisp bindings for tree-sitter","archived":false,"fork":false,"pushed_at":"2025-01-08T05:31:57.000Z","size":1415,"stargazers_count":830,"open_issues_count":78,"forks_count":74,"subscribers_count":26,"default_branch":"master","last_synced_at":"2025-01-29T15:38:05.066Z","etag":null,"topics":["binding","emacs","emacs-modules","incremental","parsing","rust","tree-sitter"],"latest_commit_sha":null,"homepage":"https://emacs-tree-sitter.github.io","language":"Emacs Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/emacs-tree-sitter.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-07-09T09:36:13.000Z","updated_at":"2025-01-13T02:11:31.000Z","dependencies_parsed_at":"2024-03-04T20:37:51.388Z","dependency_job_id":"3dceb24d-cb22-48ed-958e-4513470a3719","html_url":"https://github.com/emacs-tree-sitter/elisp-tree-sitter","commit_stats":{"total_commits":705,"total_committers":23,"mean_commits":"30.652173913043477","dds":"0.14184397163120566","last_synced_commit":"02fe7b86d92b1aab954045146469b7893f0ab371"},"previous_names":[],"tags_count":32,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emacs-tree-sitter%2Felisp-tree-sitter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emacs-tree-sitter%2Felisp-tree-sitter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emacs-tree-sitter%2Felisp-tree-sitter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emacs-tree-sitter%2Felisp-tree-sitter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/emacs-tree-sitter","download_url":"https://codeload.github.com/emacs-tree-sitter/elisp-tree-sitter/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237886844,"owners_count":19381910,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["binding","emacs","emacs-modules","incremental","parsing","rust","tree-sitter"],"created_at":"2024-07-31T17:00:44.513Z","updated_at":"2025-10-23T20:32:16.178Z","avatar_url":"https://github.com/emacs-tree-sitter.png","language":"Emacs Lisp","funding_links":[],"categories":["Emacs Lisp"],"sub_categories":[],"readme":"# ELisp Tree-sitter \u003cimg src=\"doc/static/img/emacs-tree-sitter-96x96.png\" align=\"left\"\u003e\n[![Documentation](https://img.shields.io/badge/documentation-latest-blue)](https://emacs-tree-sitter.github.io/)\n[![GitHub Actions](https://github.com/emacs-tree-sitter/elisp-tree-sitter/actions/workflows/main.yml/badge.svg)](https://github.com/emacs-tree-sitter/elisp-tree-sitter/actions/workflows/main.yml)\n\nFor Emacs 29+, please use [the built-in integration](https://lists.gnu.org/archive/html/emacs-devel/2022-11/msg01443.html) instead of this package.\n\nThis is an Emacs Lisp binding for [tree-sitter](https://tree-sitter.github.io/tree-sitter/), an incremental parsing library. It requires Emacs 25.1 or above, built with dynamic module support.\n\nIt aims to be the foundation for a new breed of Emacs packages that understand code structurally. For example:\n- Faster, fine-grained code highlighting.\n- More flexible code folding.\n- Structural editing (like Paredit, or even better) for non-Lisp code.\n- More informative indexing for imenu.\n\nThe author of tree-sitter articulated its merits a lot better in this [Strange Loop talk](https://www.thestrangeloop.com/2018/tree-sitter---a-new-parsing-system-for-programming-tools.html).\n\n## Installation\n\nSee the [installation section](https://emacs-tree-sitter.github.io/installation/) in the documentation.\n\nIf you want to hack on `emacs-tree-sitter` itself, see the next section instead.\n\n## Setup for Development\n**Note**: On Windows, use Powershell instead of Bash or cmd.exe.\n\n- Clone this repo with the `--recursive` flag.\n- Add 3 of its directories to `load-path`: `core/`, `lisp/` and `langs/`.\n- Install [eask](https://emacs-eask.github.io/).\n- Run `bin/setup`.\n\nIf you want to hack on the high-level features (in Lisp) only:\n- Make changes to the `.el` files.\n- Add tests to `tree-sitter-tests.el` and run them with `bin/test`.\n\nIf you want to build additional (or all) grammars from source, or work on the core dynamic module, see the next 2 sections.\n\n### Building grammars from source\n\n**Note**: If you are only interested in building the grammar binaries, not the dynamic module, check out [tree-sitter-langs](https://github.com/emacs-tree-sitter/tree-sitter-langs#building-grammars-from-source).\n\n- Install NodeJS. It is needed to generate the grammar code from the JavaScript DSL. The recommended tool to manage NodeJS is [volta](https://volta.sh/).\n- Install [tree-sitter CLI tool](https://tree-sitter.github.io/tree-sitter/creating-parsers#installation): (Its binary can also be downloaded directly from [GitHub](https://github.com/tree-sitter/tree-sitter/releases).) **Note: version 0.20+ cannot be used, as they introduced [a breaking change](https://github.com/tree-sitter/tree-sitter/pull/1157) in binary storage location.**\n    ```bash\n    # For yarn user\n    yarn global add tree-sitter-cli@0.19.3\n\n    # For npm user\n    npm install -g tree-sitter-cli@0.19.3\n    ```\n- Run `langs/script/compile`. For example:\n    ```bash\n    langs/script/compile rust\n    ```\n\n### Working on the dynamic module\n\n- Install the [Rust toolchain](https://rustup.rs/).\n- Build:\n    ```bash\n    bin/build\n    ```\n- Test:\n    ```bash\n    bin/test\n    ```\n- Continuously rebuild and test on change (requires [cargo-watch](https://github.com/passcod/cargo-watch)):\n    ```bash\n    bin/test watch\n    ```\n\nTo test against a different version of Emacs, set the environment variable `EMACS` (e.g. `EMACS=/snap/bin/emacs make test`).\n\n## Alternatives\n\n- [Tree-sitter in Emacs's core](https://lists.gnu.org/archive/html/emacs-devel/2022-11/msg01443.html) (the future)\n- Binding through C instead of Rust: https://github.com/karlotness/tree-sitter.el (dormant)\n\n## Contribution\n\nContributions are welcomed. Please take a look at the [issue list](https://github.com/emacs-tree-sitter/elisp-tree-sitter/issues) for ideas, or [create a new issue](https://github.com/emacs-tree-sitter/elisp-tree-sitter/issues/new) to describe any idea you have for improvement.\n\nFor language-specific issues/features, please check out [tree-sitter-langs](https://github.com/emacs-tree-sitter/tree-sitter-langs) instead.\n\nShow respect and empathy towards others. Both technical empathy and general empathy are highly valued.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femacs-tree-sitter%2Felisp-tree-sitter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femacs-tree-sitter%2Felisp-tree-sitter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femacs-tree-sitter%2Felisp-tree-sitter/lists"}