* admin/notes/tree-sitter/build-module/build.sh:
Update org for toml/yaml.
* admin/tree-sitter/treesit-admin.el
(treesit-admin--builtin-language-sources):
Add verified versions.
* lisp/progmodes/c-ts-mode.el:
Append language source to treesit-language-source-alist.
(c-ts-mode, c++-ts-mode): Use treesit-ensure-installed.
* lisp/progmodes/cmake-ts-mode.el:
Append language source to treesit-language-source-alist.
(cmake-ts-mode): Use treesit-ensure-installed.
* lisp/progmodes/csharp-mode.el:
Append language source to treesit-language-source-alist.
(csharp-ts-mode): Use treesit-ensure-installed.
* lisp/progmodes/dockerfile-ts-mode.el:
Append language source to treesit-language-source-alist.
(dockerfile-ts-mode): Use treesit-ensure-installed.
* lisp/progmodes/elixir-ts-mode.el:
Append language source to treesit-language-source-alist.
(elixir-ts-mode): Use treesit-ensure-installed.
* lisp/progmodes/go-ts-mode.el:
Append language source to treesit-language-source-alist.
(go-ts-mode, go-mod-ts-mode, go-work-ts-mode):
Use treesit-ensure-installed.
* lisp/progmodes/heex-ts-mode.el:
Append language source to treesit-language-source-alist.
(heex-ts-mode): Use treesit-ensure-installed.
* lisp/progmodes/java-ts-mode.el:
Append language source to treesit-language-source-alist.
(java-ts-mode): Use treesit-ensure-installed.
* lisp/progmodes/js.el:
Append language source to treesit-language-source-alist.
(js-ts-mode): Use treesit-ensure-installed.
* lisp/progmodes/json-ts-mode.el:
Append language source to treesit-language-source-alist.
(json-ts-mode): Use treesit-ensure-installed.
* lisp/progmodes/lua-ts-mode.el:
Append language source to treesit-language-source-alist.
(lua-ts-mode): Use treesit-ensure-installed.
* lisp/progmodes/php-ts-mode.el
(php-ts-mode--language-source-alist):
Update versions from comments in ts-modes.
Append to treesit-language-source-alist.
(php-ts-mode-install-parsers):
Use treesit-language-source-alist directly.
(php-ts-mode): Use treesit-ensure-installed.
* lisp/progmodes/ruby-ts-mode.el:
Append language source to treesit-language-source-alist.
(ruby-ts-mode): Use treesit-ensure-installed.
* lisp/progmodes/rust-ts-mode.el:
Append language source to treesit-language-source-alist.
(rust-ts-mode): Use treesit-ensure-installed.
* lisp/progmodes/sh-script.el:
Append language source to treesit-language-source-alist.
(bash-ts-mode): Use treesit-ensure-installed.
* lisp/progmodes/typescript-ts-mode.el:
Append language source to treesit-language-source-alist.
(typescript-ts-mode, tsx-ts-mode): Use treesit-ensure-installed.
* lisp/textmodes/css-mode.el:
Append language source to treesit-language-source-alist.
(css-ts-mode): Use treesit-ensure-installed.
* lisp/textmodes/html-ts-mode.el:
Append language source to treesit-language-source-alist.
(html-ts-mode): Use treesit-ensure-installed.
* lisp/textmodes/markdown-ts-mode.el:
Append language source to treesit-language-source-alist.
(markdown-ts-mode): Use treesit-ensure-installed.
* lisp/textmodes/mhtml-ts-mode.el
(mhtml-ts-mode--language-source-alist):
Append to treesit-language-source-alist.
(mhtml-ts-mode-install-parsers):
Use treesit-language-source-alist directly.
(mhtml-ts-mode): Use treesit-ensure-installed.
* lisp/textmodes/toml-ts-mode.el:
Append language source to treesit-language-source-alist.
(toml-ts-mode): Use treesit-ensure-installed.
* lisp/textmodes/yaml-ts-mode.el:
Append language source to treesit-language-source-alist.
(yaml-ts-mode): Use treesit-ensure-installed.
* test/infra/Dockerfile.emba: Add verified versions
to treesit-language-source-alist.
(cherry picked from commit
3d3be6dd0eb320e73d59ad6958e7c6e2c1b6a434)
sourcedir="tree-sitter-typescript/tsx/src"
grammardir="tree-sitter-typescript/tsx"
;;
+ "toml")
+ org="tree-sitter-grammars"
+ ;;
"yaml")
- org="ikatyang"
+ org="tree-sitter-grammars"
;;
esac
;;; Query validation
(defvar treesit-admin--builtin-language-sources
- '((c "https://github.com/tree-sitter/tree-sitter-c")
- (cpp "https://github.com/tree-sitter/tree-sitter-cpp")
- (cmake "https://github.com/uyha/tree-sitter-cmake")
- (dockerfile "https://github.com/camdencheek/tree-sitter-dockerfile")
- (go "https://github.com/tree-sitter/tree-sitter-go")
- (ruby "https://github.com/tree-sitter/tree-sitter-ruby")
- (javascript "https://github.com/tree-sitter/tree-sitter-javascript")
+ '((c "https://github.com/tree-sitter/tree-sitter-c" "v0.23.4")
+ (cpp "https://github.com/tree-sitter/tree-sitter-cpp" "v0.23.4")
+ (cmake "https://github.com/uyha/tree-sitter-cmake" "v0.5.0")
+ (dockerfile "https://github.com/camdencheek/tree-sitter-dockerfile" "v0.2.0")
+ (go "https://github.com/tree-sitter/tree-sitter-go" "v0.23.4")
+ (ruby "https://github.com/tree-sitter/tree-sitter-ruby" "v0.23.1")
+ (javascript "https://github.com/tree-sitter/tree-sitter-javascript" "v0.23.1")
(typescript "https://github.com/tree-sitter/tree-sitter-typescript"
- nil "typescript/src")
+ "v0.23.2" "typescript/src")
(tsx "https://github.com/tree-sitter/tree-sitter-typescript"
- nil "tsx/src")
- (json "https://github.com/tree-sitter/tree-sitter-json")
- (rust "https://github.com/tree-sitter/tree-sitter-rust")
+ "v0.23.2" "tsx/src")
+ (json "https://github.com/tree-sitter/tree-sitter-json" "v0.24.8")
+ (rust "https://github.com/tree-sitter/tree-sitter-rust" "v0.23.2")
(php "https://github.com/tree-sitter/tree-sitter-php"
- nil "php/src")
- (css "https://github.com/tree-sitter/tree-sitter-css")
+ "v0.23.11" "php/src")
+ (css "https://github.com/tree-sitter/tree-sitter-css" "v0.23.1")
(phpdoc "https://github.com/claytonrcarter/tree-sitter-phpdoc")
- (doxygen "https://github.com/tree-sitter-grammars/tree-sitter-doxygen")
- (lua "https://github.com/tree-sitter-grammars/tree-sitter-lua")
- (python "https://github.com/tree-sitter/tree-sitter-python")
- (html "https://github.com/tree-sitter/tree-sitter-html")
- (elixir "https://github.com/elixir-lang/tree-sitter-elixir")
- (heex "https://github.com/phoenixframework/tree-sitter-heex")
- (java "https://github.com/tree-sitter/tree-sitter-java")
- (jsdoc "https://github.com/tree-sitter/tree-sitter-jsdoc"))
+ (doxygen "https://github.com/tree-sitter-grammars/tree-sitter-doxygen" "v1.1.0")
+ (lua "https://github.com/tree-sitter-grammars/tree-sitter-lua" "v0.3.0")
+ (python "https://github.com/tree-sitter/tree-sitter-python" "v0.23.6")
+ (html "https://github.com/tree-sitter/tree-sitter-html" "v0.23.2")
+ (elixir "https://github.com/elixir-lang/tree-sitter-elixir" "v0.3.3")
+ (heex "https://github.com/phoenixframework/tree-sitter-heex" "v0.7.0")
+ (java "https://github.com/tree-sitter/tree-sitter-java" "v0.23.5")
+ (jsdoc "https://github.com/tree-sitter/tree-sitter-jsdoc" "v0.23.2")
+ (toml "https://github.com/tree-sitter-grammars/tree-sitter-toml" "v0.7.0")
+ (yaml "https://github.com/tree-sitter-grammars/tree-sitter-yaml" "v0.7.0"))
"A list of sources for the builtin modes.
The source information are in the format of
`treesit-language-source-alist'. This is for development only.")
(eval-when-compile (require 'rx))
(treesit-declare-unavailable-functions)
+(add-to-list
+ 'treesit-language-source-alist
+ '(c "https://github.com/tree-sitter/tree-sitter-c" "v0.23.4")
+ t)
+(add-to-list
+ 'treesit-language-source-alist
+ '(cpp "https://github.com/tree-sitter/tree-sitter-cpp" "v0.23.4")
+ t)
+(add-to-list
+ 'treesit-language-source-alist
+ '(doxygen "https://github.com/tree-sitter-grammars/tree-sitter-doxygen" "v1.1.0")
+ t)
+
;;; Custom variables
(defcustom c-ts-mode-indent-offset 2
:group 'c
:after-hook (c-ts-mode-set-modeline)
- (when (treesit-ready-p 'c)
+ (when (treesit-ensure-installed 'c)
;; Create an "for-each" parser, see `c-ts-mode--emacs-set-ranges'
;; for more.
(when c-ts-mode-emacs-sources-support
(treesit-font-lock-recompute-features '(emacs-devel)))
;; Inject doxygen parser for comment.
- (when (and c-ts-mode-enable-doxygen (treesit-ready-p 'doxygen t))
+ (when (and c-ts-mode-enable-doxygen
+ (treesit-ensure-installed 'doxygen))
(setq-local treesit-primary-parser primary-parser)
(setq-local treesit-font-lock-settings
(append
:group 'c++
:after-hook (c-ts-mode-set-modeline)
- (when (treesit-ready-p 'cpp)
+ (when (treesit-ensure-installed 'cpp)
(let ((primary-parser (treesit-parser-create 'cpp)))
;; Syntax.
#'c-ts-mode--emacs-current-defun-name))
;; Inject doxygen parser for comment.
- (when (and c-ts-mode-enable-doxygen (treesit-ready-p 'doxygen t))
+ (when (and c-ts-mode-enable-doxygen
+ (treesit-ensure-installed 'doxygen))
(setq-local treesit-primary-parser primary-parser)
(setq-local treesit-font-lock-settings
(append
(assq-delete-all 'c-or-c++-mode major-mode-remap-defaults))
(add-to-list 'major-mode-remap-defaults '(c-or-c++-mode . c-or-c++-ts-mode)))
-(when (and c-ts-mode-enable-doxygen (not (treesit-ready-p 'doxygen t)))
- (message "Doxygen syntax highlighting can't be enabled, please install the language grammar."))
-
(provide 'c-ts-mode)
(provide 'c++-ts-mode)
(eval-when-compile (require 'rx))
(treesit-declare-unavailable-functions)
+(add-to-list
+ 'treesit-language-source-alist
+ '(cmake "https://github.com/uyha/tree-sitter-cmake" "v0.5.0")
+ t)
+
(defcustom cmake-ts-mode-indent-offset 2
"Number of spaces for each indentation step in `cmake-ts-mode'."
:version "29.1"
:group 'cmake
:syntax-table cmake-ts-mode--syntax-table
- (when (treesit-ready-p 'cmake)
+ (when (treesit-ensure-installed 'cmake)
(setq treesit-primary-parser (treesit-parser-create 'cmake))
;; Comments.
;;; Tree-sitter support
+(add-to-list
+ 'treesit-language-source-alist
+ '(c-sharp "https://github.com/tree-sitter/tree-sitter-c-sharp" "v0.23.1")
+ t)
+
(defcustom csharp-ts-mode-indent-offset 4
"Number of spaces for each indentation step in `csharp-ts-mode'."
:type 'integer
"Major mode for editing C# code."
:syntax-table (csharp--make-mode-syntax-table)
- (unless (treesit-ready-p 'c-sharp)
+ (unless (treesit-ensure-installed 'c-sharp)
(error "Tree-sitter for C# isn't available"))
;; Tree-sitter.
(eval-when-compile (require 'rx))
(treesit-declare-unavailable-functions)
+(add-to-list
+ 'treesit-language-source-alist
+ '(dockerfile "https://github.com/camdencheek/tree-sitter-dockerfile" "v0.2.0")
+ t)
+
(defvar dockerfile-ts-mode--syntax-table
(let ((table (make-syntax-table)))
(modify-syntax-entry ?# "<" table)
:group 'dockerfile
:syntax-table dockerfile-ts-mode--syntax-table
- (when (treesit-ready-p 'dockerfile)
+ (when (treesit-ensure-installed 'dockerfile)
(setq treesit-primary-parser (treesit-parser-create 'dockerfile))
;; Comments.
(eval-when-compile (require 'rx))
(treesit-declare-unavailable-functions)
+(add-to-list
+ 'treesit-language-source-alist
+ '(elixir "https://github.com/elixir-lang/tree-sitter-elixir" "v0.3.3")
+ t)
+(add-to-list
+ 'treesit-language-source-alist
+ '(heex "https://github.com/phoenixframework/tree-sitter-heex" "v0.7.0")
+ t)
+
(defgroup elixir-ts nil
"Major mode for editing Elixir code."
:prefix "elixir-ts-"
(add-hook 'post-self-insert-hook
#'elixir-ts--electric-pair-string-delimiter 'append t)
- (when (treesit-ready-p 'elixir)
+ (when (treesit-ensure-installed 'elixir)
;; The HEEx parser has to be created first for elixir to ensure elixir
;; is the first language when looking for treesit ranges.
;; (In Emacs 31 this requirement is removed.)
- (when (treesit-ready-p 'heex)
+ (when (treesit-ensure-installed 'heex)
;; Require heex-ts-mode only when we load elixir-ts-mode
;; so that we don't get a tree-sitter compilation warning for
;; elixir-ts-mode.
(setq-local treesit-defun-name-function #'elixir-ts--defun-name)
;; Embedded Heex.
- (when (treesit-ready-p 'heex)
+ (when (treesit-ensure-installed 'heex)
(setq-local treesit-range-settings elixir-ts--treesit-range-rules)
(setq-local treesit-font-lock-settings
(eval-when-compile (require 'rx))
(treesit-declare-unavailable-functions)
+(add-to-list
+ 'treesit-language-source-alist
+ '(go "https://github.com/tree-sitter/tree-sitter-go" "v0.23.4")
+ t)
+(add-to-list
+ 'treesit-language-source-alist
+ '(gomod "https://github.com/camdencheek/tree-sitter-go-mod" "v1.1.0")
+ t)
+(add-to-list
+ 'treesit-language-source-alist
+ '(gowork "https://github.com/omertuc/tree-sitter-go-work")
+ t)
+
(defcustom go-ts-mode-indent-offset 8
"Number of spaces for each indentation step in `go-ts-mode'."
:version "29.1"
:group 'go
:syntax-table go-ts-mode--syntax-table
- (when (treesit-ready-p 'go)
+ (when (treesit-ensure-installed 'go)
(setq treesit-primary-parser (treesit-parser-create 'go))
;; Comments.
:group 'go
:syntax-table go-mod-ts-mode--syntax-table
- (when (treesit-ready-p 'gomod)
+ (when (treesit-ensure-installed 'gomod)
(setq treesit-primary-parser (treesit-parser-create 'gomod))
;; Comments.
"Major mode for editing go.work files, powered by tree-sitter."
:group 'go
- (when (treesit-ready-p 'gowork)
+ (when (treesit-ensure-installed 'gowork)
(setq treesit-primary-parser (treesit-parser-create 'gowork))
;; Comments.
(eval-when-compile (require 'rx))
(treesit-declare-unavailable-functions)
+(add-to-list
+ 'treesit-language-source-alist
+ '(heex "https://github.com/phoenixframework/tree-sitter-heex" "v0.7.0")
+ t)
+(add-to-list
+ 'treesit-language-source-alist
+ '(elixir "https://github.com/elixir-lang/tree-sitter-elixir" "v0.3.3")
+ t)
+
(defgroup heex-ts nil
"Major mode for editing HEEx code."
:prefix "heex-ts-"
"Major mode for editing HEEx, powered by tree-sitter."
:group 'heex-ts
- (when (treesit-ready-p 'heex)
+ (when (treesit-ensure-installed 'heex)
(setq treesit-primary-parser (treesit-parser-create 'heex))
;; Comments
(declare-function treesit-node-end "treesit.c")
(declare-function treesit-query-capture "treesit.c")
+(add-to-list
+ 'treesit-language-source-alist
+ '(java "https://github.com/tree-sitter/tree-sitter-java" "v0.23.5")
+ t)
+(add-to-list
+ 'treesit-language-source-alist
+ '(doxygen "https://github.com/tree-sitter-grammars/tree-sitter-doxygen" "v1.1.0")
+ t)
+
(defcustom java-ts-mode-indent-offset 4
"Number of spaces for each indentation step in `java-ts-mode'."
:version "29.1"
:group 'java
:syntax-table java-ts-mode--syntax-table
- (unless (treesit-ready-p 'java)
+ (unless (treesit-ensure-installed 'java)
(error "Tree-sitter for Java isn't available"))
(let ((primary-parser (treesit-parser-create 'java)))
java-ts-mode--font-lock-settings)
;; Inject doxygen parser for comment.
- (when (and java-ts-mode-enable-doxygen (treesit-ready-p 'doxygen t))
+ (when (and java-ts-mode-enable-doxygen
+ (treesit-ensure-installed 'doxygen))
(setq-local treesit-primary-parser primary-parser)
(setq-local treesit-font-lock-settings
(append treesit-font-lock-settings
(if (treesit-ready-p 'java)
(add-to-list 'auto-mode-alist '("\\.java\\'" . java-ts-mode)))
-(when (and java-ts-mode-enable-doxygen (not (treesit-ready-p 'doxygen t)))
- (message "Doxygen syntax highlighting can't be enabled, please install the language grammar."))
-
(provide 'java-ts-mode)
;;; java-ts-mode.el ends here
;;; Tree sitter integration
+(add-to-list
+ 'treesit-language-source-alist
+ '(javascript "https://github.com/tree-sitter/tree-sitter-javascript" "v0.23.1")
+ t)
+(add-to-list
+ 'treesit-language-source-alist
+ '(jsdoc "https://github.com/tree-sitter/tree-sitter-jsdoc" "v0.23.2")
+ t)
+
(defun js--treesit-font-lock-compatibility-definition-feature ()
"Font lock helper, to handle different releases of tree-sitter-javascript.
Check if a node type is available, then return the right font lock rules
\\<js-ts-mode-map>"
:group 'js
:syntax-table js-mode-syntax-table
- (when (treesit-ready-p 'javascript)
+ (when (treesit-ensure-installed 'javascript)
;; Borrowed from `js-mode'.
(setq-local prettify-symbols-alist js--prettify-symbols-alist)
(setq-local parse-sexp-ignore-comments t)
(setq-local treesit-font-lock-settings js--treesit-font-lock-settings)
(setq-local treesit-font-lock-feature-list js--treesit-font-lock-feature-list)
- (when (treesit-ready-p 'jsdoc t)
+ (when (treesit-ensure-installed 'jsdoc)
(setq-local treesit-range-settings
(treesit-range-rules
:embed 'jsdoc
(require 'rx)
(treesit-declare-unavailable-functions)
+(add-to-list
+ 'treesit-language-source-alist
+ '(json "https://github.com/tree-sitter/tree-sitter-json" "v0.24.8")
+ t)
+
(defcustom json-ts-mode-indent-offset 2
"Number of spaces for each indentation step in `json-ts-mode'."
:version "29.1"
:group 'json
:syntax-table json-ts-mode--syntax-table
- (unless (treesit-ready-p 'json)
+ (unless (treesit-ensure-installed 'json)
(error "Tree-sitter for JSON isn't available"))
(setq treesit-primary-parser (treesit-parser-create 'json))
(eval-when-compile
(require 'rx))
+(add-to-list
+ 'treesit-language-source-alist
+ '(lua "https://github.com/tree-sitter-grammars/tree-sitter-lua" "v0.3.0")
+ t)
+
(defgroup lua-ts nil
"Major mode for editing Lua files."
:prefix "lua-ts-"
:syntax-table lua-ts--syntax-table
(use-local-map lua-ts-mode-map)
- (when (treesit-ready-p 'lua)
+ (when (treesit-ensure-installed 'lua)
(setq treesit-primary-parser (treesit-parser-create 'lua))
;; Comments.
;;; Install treesitter language parsers
(defvar php-ts-mode--language-source-alist
- '((php . ("https://github.com/tree-sitter/tree-sitter-php" "v0.23.11" "php/src"))
- (phpdoc . ("https://github.com/claytonrcarter/tree-sitter-phpdoc"))
- (html . ("https://github.com/tree-sitter/tree-sitter-html" "v0.23.0"))
- (javascript . ("https://github.com/tree-sitter/tree-sitter-javascript" "v0.23.0"))
- (jsdoc . ("https://github.com/tree-sitter/tree-sitter-jsdoc" "v0.23.0"))
- (css . ("https://github.com/tree-sitter/tree-sitter-css" "v0.23.0")))
+ '((php "https://github.com/tree-sitter/tree-sitter-php" "v0.23.11" "php/src")
+ (phpdoc "https://github.com/claytonrcarter/tree-sitter-phpdoc")
+ (html "https://github.com/tree-sitter/tree-sitter-html" "v0.23.2")
+ (javascript "https://github.com/tree-sitter/tree-sitter-javascript" "v0.23.1")
+ (jsdoc "https://github.com/tree-sitter/tree-sitter-jsdoc" "v0.23.2")
+ (css "https://github.com/tree-sitter/tree-sitter-css" "v0.23.1"))
"Treesitter language parsers required by `php-ts-mode'.
-You can customize this variable if you want to stick to a specific
-commit and/or use different parsers.")
+You can customize `treesit-language-source-alist' if you want
+to stick to a specific commit and/or use different parsers.")
+
+(setq treesit-language-source-alist
+ (append treesit-language-source-alist
+ php-ts-mode--language-source-alist))
(defun php-ts-mode-install-parsers ()
"Install all the required treesitter parsers.
`php-ts-mode--language-source-alist' defines which parsers to install."
(interactive)
- (let ((treesit-language-source-alist php-ts-mode--language-source-alist))
- (dolist (item php-ts-mode--language-source-alist)
- (treesit-install-language-grammar (car item)))))
+ (dolist (item php-ts-mode--language-source-alist)
+ (treesit-install-language-grammar (car item))))
;;; Custom variables
:syntax-table php-ts-mode--syntax-table
(if (not (and
- (treesit-ready-p 'php)
- (treesit-ready-p 'phpdoc)
- (treesit-ready-p 'html)
- (treesit-ready-p 'javascript)
- (treesit-ready-p 'jsdoc)
- (treesit-ready-p 'css)))
+ (treesit-ensure-installed 'php)
+ (treesit-ensure-installed 'phpdoc)
+ (treesit-ensure-installed 'html)
+ (treesit-ensure-installed 'javascript)
+ (treesit-ensure-installed 'jsdoc)
+ (treesit-ensure-installed 'css)))
(error "Tree-sitter for PHP isn't
available. You can install the parsers with M-x
`php-ts-mode-install-parsers'")
(require 'ruby-mode)
(treesit-declare-unavailable-functions)
+(add-to-list
+ 'treesit-language-source-alist
+ '(ruby "https://github.com/tree-sitter/tree-sitter-ruby" "v0.23.1")
+ t)
+
(defgroup ruby-ts nil
"Major mode for editing Ruby code."
:prefix "ruby-ts-"
:group 'ruby
:syntax-table ruby-mode-syntax-table
- (unless (treesit-ready-p 'ruby)
+ (unless (treesit-ensure-installed 'ruby)
(error "Tree-sitter for Ruby isn't available"))
(setq treesit-primary-parser (treesit-parser-create 'ruby))
(require 'c-ts-common) ; For comment indent and filling.
(treesit-declare-unavailable-functions)
+(add-to-list
+ 'treesit-language-source-alist
+ '(rust "https://github.com/tree-sitter/tree-sitter-rust" "v0.23.2")
+ t)
+
(defcustom rust-ts-mode-indent-offset 4
"Number of spaces for each indentation step in `rust-ts-mode'."
:version "29.1"
:group 'rust
:syntax-table rust-ts-mode--syntax-table
- (when (treesit-ready-p 'rust)
+ (when (treesit-ensure-installed 'rust)
(setq treesit-primary-parser (treesit-parser-create 'rust))
;; Syntax.
This mode automatically falls back to `sh-mode' if the buffer is
not written in Bash or sh."
:syntax-table sh-mode-syntax-table
- (when (treesit-ready-p 'bash)
+ (when (treesit-ensure-installed 'bash)
(sh-set-shell "bash" nil nil)
(add-hook 'flymake-diagnostic-functions #'sh-shellcheck-flymake nil t)
(add-hook 'hack-local-variables-hook
;;; Tree-sitter font-lock
+(add-to-list
+ 'treesit-language-source-alist
+ '(bash "https://github.com/tree-sitter/tree-sitter-bash" "v0.23.3")
+ t)
+
(defvar sh-mode--treesit-operators
'("|" "|&" "||" "&&" ">" ">>" "<" "<<" "<<-" "<<<" "==" "!=" ";&" ";;&")
"A list of `sh-mode' operators to fontify.")
(require 'c-ts-common) ; For comment indent and filling.
(treesit-declare-unavailable-functions)
+(add-to-list
+ 'treesit-language-source-alist
+ '(typescript
+ "https://github.com/tree-sitter/tree-sitter-typescript" "v0.23.2"
+ "typescript/src")
+ t)
+(add-to-list
+ 'treesit-language-source-alist
+ '(tsx
+ "https://github.com/tree-sitter/tree-sitter-typescript" "v0.23.2"
+ "tsx/src")
+ t)
+
(defcustom typescript-ts-mode-indent-offset 2
"Number of spaces for each indentation step in `typescript-ts-mode'."
:version "29.1"
:group 'typescript
:syntax-table typescript-ts-mode--syntax-table
- (when (treesit-ready-p 'typescript)
+ (when (treesit-ensure-installed 'typescript)
(setq treesit-primary-parser (treesit-parser-create 'typescript))
;; Indent.
:group 'typescript
:syntax-table typescript-ts-mode--syntax-table
- (when (treesit-ready-p 'tsx)
+ (when (treesit-ensure-installed 'tsx)
(setq treesit-primary-parser (treesit-parser-create 'tsx))
;; Comments.
;;; Tree-sitter
+(add-to-list
+ 'treesit-language-source-alist
+ '(css "https://github.com/tree-sitter/tree-sitter-css" "v0.23.1")
+ t)
+
(defvar css-ts-mode-map (copy-keymap css-mode-map)
"Keymap used in `css-ts-mode'.")
\\{css-mode-map}"
:syntax-table css-mode-syntax-table
- (when (treesit-ready-p 'css)
+ (when (treesit-ensure-installed 'css)
;; Borrowed from `css-mode'.
(setq-local syntax-propertize-function
css-syntax-propertize-function)
(declare-function treesit-node-type "treesit.c")
(declare-function treesit-search-subtree "treesit.c")
+(add-to-list
+ 'treesit-language-source-alist
+ '(html "https://github.com/tree-sitter/tree-sitter-html" "v0.23.2")
+ t)
+
(defcustom html-ts-mode-indent-offset 2
"Number of spaces for each indentation step in `html-ts-mode'."
:version "29.1"
"Major mode for editing Html, powered by tree-sitter."
:group 'html
- (unless (treesit-ready-p 'html t)
+ (unless (treesit-ensure-installed 'html)
(error "Tree-sitter for HTML isn't available"))
(setq treesit-primary-parser (treesit-parser-create 'html))
(declare-function treesit-node-type "treesit.c")
(declare-function treesit-parser-create "treesit.c")
+(add-to-list
+ 'treesit-language-source-alist
+ '(markdown
+ "https://github.com/tree-sitter-grammars/tree-sitter-markdown" "v0.4.1"
+ "tree-sitter-markdown/src")
+ t)
+(add-to-list
+ 'treesit-language-source-alist
+ '(markdown-inline
+ "https://github.com/tree-sitter-grammars/tree-sitter-markdown" "v0.4.1"
+ "tree-sitter-markdown-inline/src")
+ t)
+
;;; Helper functions
(defvar markdown-ts--code-block-language-map
`(("Headings" markdown-ts-imenu-node-p nil markdown-ts-imenu-name-function)))
(setq-local treesit-outline-predicate "section")
- (when (treesit-ready-p 'markdown)
+ (when (and (treesit-ensure-installed 'markdown)
+ (treesit-ensure-installed 'markdown-inline))
(treesit-parser-create 'markdown-inline)
(treesit-parser-create 'markdown)
(markdown-ts-setup)))
;; In a multi-language major mode can be useful to have an "installer" to
;; simplify the installation of the grammars supported by the major-mode.
(defvar mhtml-ts-mode--language-source-alist
- '((html . ("https://github.com/tree-sitter/tree-sitter-html" "v0.23.2"))
- (javascript . ("https://github.com/tree-sitter/tree-sitter-javascript" "v0.23.1"))
- (jsdoc . ("https://github.com/tree-sitter/tree-sitter-jsdoc" "v0.23.2"))
- (css . ("https://github.com/tree-sitter/tree-sitter-css" "v0.23.1")))
+ '((html "https://github.com/tree-sitter/tree-sitter-html" "v0.23.2")
+ (javascript "https://github.com/tree-sitter/tree-sitter-javascript" "v0.23.1")
+ (jsdoc "https://github.com/tree-sitter/tree-sitter-jsdoc" "v0.23.2")
+ (css "https://github.com/tree-sitter/tree-sitter-css" "v0.23.1"))
"Treesitter language parsers required by `mhtml-ts-mode'.
-You can customize this variable if you want to stick to a specific
-commit and/or use different parsers.")
+You can customize `treesit-language-source-alist' if you want
+to stick to a specific commit and/or use different parsers.")
+
+(setq treesit-language-source-alist
+ (append treesit-language-source-alist
+ mhtml-ts-mode--language-source-alist))
(defun mhtml-ts-mode-install-parsers ()
"Install all the required treesitter parsers.
`mhtml-ts-mode--language-source-alist' defines which parsers to install."
(interactive)
- (let ((treesit-language-source-alist mhtml-ts-mode--language-source-alist))
- (dolist (item mhtml-ts-mode--language-source-alist)
- (treesit-install-language-grammar (car item)))))
+ (dolist (item mhtml-ts-mode--language-source-alist)
+ (treesit-install-language-grammar (car item))))
;;; Custom variables
"Major mode for editing HTML with embedded JavaScript and CSS.
Powered by tree-sitter."
(if (not (and
- (treesit-ready-p 'html t)
- (treesit-ready-p 'javascript t)
- (treesit-ready-p 'css t)))
+ (treesit-ensure-installed 'html)
+ (treesit-ensure-installed 'javascript)
+ (treesit-ensure-installed 'css)))
(error "Tree-sitter parsers for HTML isn't available. You can
install the parsers with M-x `mhtml-ts-mode-install-parsers'")
;; jsdoc is not mandatory for js-ts-mode, so we respect this by
;; adding jsdoc range rules only when jsdoc is available.
- (when (treesit-ready-p 'jsdoc t)
+ (when (treesit-ensure-installed 'jsdoc)
(setq-local treesit-range-settings
(append treesit-range-settings
(treesit-range-rules
(declare-function treesit-node-child "treesit.c")
(declare-function treesit-node-child-by-field-name "treesit.c")
+(add-to-list
+ 'treesit-language-source-alist
+ '(toml "https://github.com/tree-sitter-grammars/tree-sitter-toml" "v0.7.0")
+ t)
+
(defcustom toml-ts-mode-indent-offset 2
"Number of spaces for each indentation step in `toml-ts-mode'."
:version "29.1"
:group 'toml-mode
:syntax-table toml-ts-mode--syntax-table
- (when (treesit-ready-p 'toml)
+ (when (treesit-ensure-installed 'toml)
(setq treesit-primary-parser (treesit-parser-create 'toml))
;; Comments
(declare-function treesit-node-type "treesit.c")
(declare-function treesit-node-child-by-field-name "treesit.c")
+(add-to-list
+ 'treesit-language-source-alist
+ '(yaml "https://github.com/tree-sitter-grammars/tree-sitter-yaml" "v0.7.0")
+ t)
+
(defvar yaml-ts-mode--syntax-table
(let ((table (make-syntax-table)))
(modify-syntax-entry ?# "<" table)
:group 'yaml
:syntax-table yaml-ts-mode--syntax-table
- (when (treesit-ready-p 'yaml)
+ (when (treesit-ensure-installed 'yaml)
(setq treesit-primary-parser (treesit-parser-create 'yaml))
;; Comments.
RUN mkdir -p /root/.emacs.d/tree-sitter
RUN git config --global http.sslverify "false"
# See https://github.com/emacs-tree-sitter/tree-sitter-langs/tree/master/repos
+# The verified versions are generated by 'treesit-admin-verify-major-mode-queries`
+# at the comments section in ts-mode files.
RUN src/emacs -Q --batch \
--eval \
'(message "ABI min version %d max version %d" \
--eval '(setq \
treesit-extra-load-path (list "/root/.emacs.d/tree-sitter") \
treesit-language-source-alist \
- (quote ((bash "https://github.com/tree-sitter/tree-sitter-bash") \
- (c "https://github.com/tree-sitter/tree-sitter-c") \
- (c-sharp "https://github.com/tree-sitter/tree-sitter-c-sharp") \
- (cpp "https://github.com/tree-sitter/tree-sitter-cpp") \
- (css "https://github.com/tree-sitter/tree-sitter-css") \
- (elixir "https://github.com/elixir-lang/tree-sitter-elixir") \
- (go "https://github.com/tree-sitter/tree-sitter-go") \
- (gomod "https://github.com/camdencheek/tree-sitter-go-mod") \
- (heex "https://github.com/phoenixframework/tree-sitter-heex") \
- (html "https://github.com/tree-sitter/tree-sitter-html") \
- (java "https://github.com/tree-sitter/tree-sitter-java") \
- (javascript "https://github.com/tree-sitter/tree-sitter-javascript") \
- (json "https://github.com/tree-sitter/tree-sitter-json") \
- (lua "https://github.com/tree-sitter-grammars/tree-sitter-lua") \
- (python "https://github.com/tree-sitter/tree-sitter-python") \
- (ruby "https://github.com/tree-sitter/tree-sitter-ruby") \
- (rust "https://github.com/tree-sitter/tree-sitter-rust" "v0.23.3") \
- (tsx "https://github.com/tree-sitter/tree-sitter-typescript" "master" "tsx/src") \
- (typescript "https://github.com/tree-sitter/tree-sitter-typescript" "master" "typescript/src"))))' \
+ (quote ((bash "https://github.com/tree-sitter/tree-sitter-bash" "v0.23.3") \
+ (c "https://github.com/tree-sitter/tree-sitter-c" "v0.23.4") \
+ (c-sharp "https://github.com/tree-sitter/tree-sitter-c-sharp" "v0.23.1") \
+ (cpp "https://github.com/tree-sitter/tree-sitter-cpp" "v0.23.4") \
+ (css "https://github.com/tree-sitter/tree-sitter-css" "v0.23.1") \
+ (elixir "https://github.com/elixir-lang/tree-sitter-elixir" "v0.3.3") \
+ (go "https://github.com/tree-sitter/tree-sitter-go" "v0.23.4") \
+ (gomod "https://github.com/camdencheek/tree-sitter-go-mod" "v1.1.0") \
+ (gowork "https://github.com/omertuc/tree-sitter-go-work") \
+ (heex "https://github.com/phoenixframework/tree-sitter-heex" "v0.7.0") \
+ (html "https://github.com/tree-sitter/tree-sitter-html" "v0.23.2") \
+ (java "https://github.com/tree-sitter/tree-sitter-java" "v0.23.5") \
+ (javascript "https://github.com/tree-sitter/tree-sitter-javascript" "v0.23.1") \
+ (jsdoc "https://github.com/tree-sitter/tree-sitter-jsdoc" "v0.23.2") \
+ (json "https://github.com/tree-sitter/tree-sitter-json" "v0.24.8") \
+ (lua "https://github.com/tree-sitter-grammars/tree-sitter-lua" "v0.3.0") \
+ (python "https://github.com/tree-sitter/tree-sitter-python" "v0.23.6") \
+ (ruby "https://github.com/tree-sitter/tree-sitter-ruby" "v0.23.1") \
+ (rust "https://github.com/tree-sitter/tree-sitter-rust" "v0.23.2") \
+ (tsx "https://github.com/tree-sitter/tree-sitter-typescript" "v0.23.2" "tsx/src") \
+ (typescript "https://github.com/tree-sitter/tree-sitter-typescript" "v0.23.2" "typescript/src"))))' \
--eval '(dolist (lang (mapcar (quote car) treesit-language-source-alist)) \
(treesit-install-language-grammar lang "/root/.emacs.d/tree-sitter"))'