summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuan Fu <casouri@gmail.com>2023-01-18 15:45:29 -0800
committerYuan Fu <casouri@gmail.com>2023-01-19 14:47:24 -0800
commit0c6bfeddb21df16a6001328882fe2aaf6b063f68 (patch)
tree372ced5d373fbe676dcfd0c7a69cf5baf13be232
parentc289786886bade70f284035d85ae2c9b10df67c5 (diff)
downloademacs-0c6bfeddb21df16a6001328882fe2aaf6b063f68.tar.gz
; Update tree-sitter major mode manual
* doc/lispref/parsing.texi (Tree-sitter Major Modes): Update.
-rw-r--r--doc/lispref/parsing.texi51
1 files changed, 35 insertions, 16 deletions
diff --git a/doc/lispref/parsing.texi b/doc/lispref/parsing.texi
index e4a25249829..cebb59b6501 100644
--- a/doc/lispref/parsing.texi
+++ b/doc/lispref/parsing.texi
@@ -1692,26 +1692,48 @@ integration for a major mode.
A major mode supporting tree-sitter features should roughly follow
this pattern:
-@c FIXME: Update this part once we settle on the exact format.
@example
@group
(define-derived-mode woomy-mode prog-mode "Woomy"
"A mode for Woomy programming language."
- ;; Shared setup.
- ...
- (cond
- ;; Tree-sitter setup.
- ((treesit-ready-p 'woomy)
+ (when (treesit-ready-p 'woomy)
(setq-local treesit-variables ...)
- (treesit-major-mode-setup))
- ;; Non-tree-sitter setup.
- (t
- ...)))
+ ...
+ (treesit-major-mode-setup)))
@end group
@end example
-First, the major mode should use @code{treesit-ready-p} to determine
-whether tree-sitter can be activated in this mode.
+@code{treesit-ready-p} automatically emits a warning if conditions for
+enabling tree-sitter aren't met.
+
+If a tree-sitter major mode shares setup with their ``native''
+counterpart, they can create a ``base mode'' that contains the common
+setup, like this:
+
+@example
+@group
+(define-derived-mode woomy--base-mode prog-mode "Woomy"
+ "An internal mode for Woomy programming language."
+ (common-setup)
+ ...)
+@end group
+
+@group
+(define-derived-mode woomy-mode woomy--base-mode "Woomy"
+ "A mode for Woomy programming language."
+ (native-setup)
+ ...)
+@end group
+
+@group
+(define-derived-mode woomy-ts-mode woomy--base-mode "Woomy"
+ "A mode for Woomy programming language."
+ (when (treesit-ready-p 'woomy)
+ (setq-local treesit-variables ...)
+ ...
+ (treesit-major-mode-setup)))
+@end group
+@end example
@defun treesit-ready-p language &optional quiet
This function checks for conditions for activating tree-sitter. It
@@ -1722,15 +1744,12 @@ language grammar for @var{language} is available on the system
This function emits a warning if tree-sitter cannot be activated. If
@var{quiet} is @code{message}, the warning is turned into a message;
-if @var{quiet} is @code{nil}, no warning or message is displayed.
+if @var{quiet} is @code{t}, no warning or message is displayed.
If all the necessary conditions are met, this function returns
non-@code{nil}; otherwise it returns @code{nil}.
@end defun
-Next, the major mode should set up tree-sitter variables and call
-@code{treesit-major-mode-setup}.
-
@defun treesit-major-mode-setup
This function activates some tree-sitter features for a major mode.