From: Yuan Fu <casouri@gmail.com>
To: Kiong-Ge Liau <lkg.ch@pm.me>
Cc: emacs-devel@gnu.org
Subject: Re: Tree-sitter integration on feature/tree-sitter
Date: Thu, 19 May 2022 19:01:19 -0700 [thread overview]
Message-ID: <27630AA3-8026-4E24-8852-ACCD9325B99D@gmail.com> (raw)
In-Reply-To: <2c2746e5f2558a87e8eab6f0914264a020173a9d.camel@pm.me>
[-- Attachment #1: Type: text/plain, Size: 275 bytes --]
> On May 18, 2022, at 6:35 PM, Kiong-Ge Liau <lkg.ch@pm.me> wrote:
>
> Can you please share the mentioned "treesit-demo.el" file? I cannot see
> it attached to any messages on emacs-devel mailing list.
>
> Thanks.
>
Here it is, take it with a grain of salt :-)
Yuan
[-- Attachment #2: treesit-demo.el --]
[-- Type: application/octet-stream, Size: 6624 bytes --]
;; -*- lexical-binding: t -*-
(require 'treesit)
(require 'pp)
(require 'rx)
(defun treesit-show-buffer-tree ()
"Show the AST in a popup buffer."
(interactive)
(let ((root-node (treesit-parser-root-node
(treesit-get-parser-create 'c)))
(pp-use-max-width t))
(pop-to-buffer (get-buffer-create "*treesit-show-tree*"))
(erase-buffer)
(insert (treesit-node-string root-node))
;; Format the output.
(goto-char (point-min))
(while (re-search-forward (rx (or "(" (seq (+ word) ":"))) nil t)
(goto-char (match-beginning 0))
(insert "\n")
(goto-char (1+ (match-end 0))))
(setq indent-line-function #'lisp-indent-line)
(indent-region (point-min) (point-max))))
(defun ts-c-fontify-system-lib (beg end _)
"Fortify a #include <lib>.
Fortify the angled brackets in preprocessor-face,
and the lib name in string-face."
(put-text-property beg (1+ beg) 'face 'font-lock-preprocessor-face)
(put-text-property (1- end) end 'face 'font-lock-preprocessor-face)
(put-text-property (1+ beg) (1- end)
'face 'font-lock-string-face))
;; Please compiler.
(defvar ts-c-treesit-indent-rules)
(define-derived-mode ts-c-mode prog-mode "TS C"
"C mode with tree-sitter support."
(if (treesit-should-enable-p)
(progn
(setq-local treesit-font-lock-defaults
'((ts-c-treesit-settings-1))
font-lock-defaults
'(nil t)
indent-line-function
#'treesit-indent
treesit-simple-indent-rules
ts-c-treesit-indent-rules)
(treesit-font-lock-enable))
;; Copied from cc-mode.
(setq-local font-lock-defaults
'((c-font-lock-keywords
c-font-lock-keywords-1
c-font-lock-keywords-2
c-font-lock-keywords-3)
nil nil
((95 . "w")
(36 . "w"))
c-beginning-of-syntax
(font-lock-mark-block-function . c-mark-function)))))
(defvar ts-c-treesit-indent-rules
`((c
;; Empty line.
(no-node prev-line 0)
;; Function/struct definition body {}.
((match nil "function_definition" "body") parent 0)
((node-is "field_declaration_list") parent 0)
;; Call expression.
((parent-is "call_expression") parent 2)
;; If-else.
((match nil "if_statement" "condition") parent 2)
((match nil "if_statement" "consequence") parent 2)
((match nil "if_statement" "alternative") parent 2)
((match nil "switch_statement" "condition") parent 2)
((node-is "else") parent 0)
;; Switch case.
((parent-is "case_statement") parent 2)
((node-is "case_statement") parent 0)
;; { and }.
((node-is "compound_statement") parent 2)
((node-is "}") parent 0)
;; Multi-line string.
((parent-is "string_literal") no-indent 0)
;; List.
,@(cl-loop for type in '("compound_statement" "initializer_list"
"argument_list" "parameter_list"
"field_declaration_list")
collect `((match nil ,type nil 0 0) parent 2)
collect `((match nil ,type nil 1) first-sibling 0)))))
(defvar ts-c-treesit-settings-1
`((c
,(treesit-expand-query
'((null) @font-lock-constant-face
(true) @font-lock-constant-face
(false) @font-lock-constant-face
(comment) @font-lock-comment-face
(system_lib_string) @ts-c-fontify-system-lib
(unary_expression
operator: _ @font-lock-negation-char-face)
(string_literal) @font-lock-string-face
(char_literal) @font-lock-string-face
(function_definition
declarator: (identifier) @font-lock-function-name-face)
(declaration
declarator: (identifier) @font-lock-function-name-face)
(function_declarator
declarator: (identifier) @font-lock-function-name-face)
(init_declarator
declarator: (identifier) @font-lock-variable-name-face)
(parameter_declaration
declarator: (identifier) @font-lock-variable-name-face)
(preproc_def
name: (identifier) @font-lock-variable-name-face)
(enumerator
name: (identifier) @font-lock-variable-name-face)
(field_identifier) @font-lock-variable-name-face
(parameter_list
(parameter_declaration
(identifier) @font-lock-variable-name-face))
(pointer_declarator
declarator: (identifier) @font-lock-variable-name-face)
(array_declarator
declarator: (identifier) @font-lock-variable-name-face)
(preproc_function_def
name: (identifier) @font-lock-variable-name-face
parameters: (preproc_params
(identifier) @font-lock-variable-name-face))
(type_identifier) @font-lock-type-face
(primitive_type) @font-lock-type-face
"auto" @font-lock-keyword-face
"break" @font-lock-keyword-face
"case" @font-lock-keyword-face
"const" @font-lock-keyword-face
"continue" @font-lock-keyword-face
"default" @font-lock-keyword-face
"do" @font-lock-keyword-face
"else" @font-lock-keyword-face
"enum" @font-lock-keyword-face
"extern" @font-lock-keyword-face
"for" @font-lock-keyword-face
"goto" @font-lock-keyword-face
"if" @font-lock-keyword-face
"register" @font-lock-keyword-face
"return" @font-lock-keyword-face
"sizeof" @font-lock-keyword-face
"static" @font-lock-keyword-face
"struct" @font-lock-keyword-face
"switch" @font-lock-keyword-face
"typedef" @font-lock-keyword-face
"union" @font-lock-keyword-face
"volatile" @font-lock-keyword-face
"while" @font-lock-keyword-face
"long" @font-lock-type-face
"short" @font-lock-type-face
"signed" @font-lock-type-face
"unsigned" @font-lock-type-face
"#include" @font-lock-preprocessor-face
"#define" @font-lock-preprocessor-face
"#ifdef" @font-lock-preprocessor-face
"#ifndef" @font-lock-preprocessor-face
"#endif" @font-lock-preprocessor-face
"#else" @font-lock-preprocessor-face
"#elif" @font-lock-preprocessor-face
)))))
;;; Config
(add-to-list 'auto-mode-alist '("\\.tsc\\'" . ts-c-mode))
next prev parent reply other threads:[~2022-05-20 2:01 UTC|newest]
Thread overview: 187+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-19 1:35 Tree-sitter integration on feature/tree-sitter Kiong-Ge Liau
2022-05-20 2:01 ` Yuan Fu [this message]
2022-06-16 19:03 ` Yuan Fu
2022-06-16 19:25 ` [External] : " Drew Adams
2022-06-17 1:11 ` Yuan Fu
2022-06-17 14:22 ` Drew Adams
2022-06-17 1:24 ` Po Lu
2022-06-18 0:09 ` Yuan Fu
2022-06-17 2:00 ` Ihor Radchenko
2022-06-17 2:25 ` Lower-level change hook immune to with-silent-modifications Yuan Fu
2022-06-17 2:55 ` Stefan Monnier
2022-06-17 5:28 ` Eli Zaretskii
2022-06-17 10:10 ` Ihor Radchenko
2022-06-17 11:03 ` Eli Zaretskii
2022-06-17 5:23 ` Tree-sitter integration on feature/tree-sitter Eli Zaretskii
2022-06-17 10:40 ` Ihor Radchenko
2022-06-17 11:42 ` Exposing buffer text modifications to Lisp (was: Tree-sitter integration on feature/tree-sitter) Eli Zaretskii
2022-06-18 5:52 ` Ihor Radchenko
2022-06-18 7:01 ` Eli Zaretskii
2022-06-18 7:23 ` Ihor Radchenko
2022-06-18 7:44 ` Eli Zaretskii
2022-06-18 8:13 ` Ihor Radchenko
2022-06-18 8:47 ` Exposing buffer text modifications to Lisp Eli Zaretskii
2022-06-20 11:58 ` Ihor Radchenko
2022-06-20 12:32 ` Eli Zaretskii
2022-06-20 14:14 ` Stefan Kangas
2022-06-21 3:56 ` Ihor Radchenko
2022-06-21 4:36 ` Ihor Radchenko
2022-06-21 12:27 ` Eli Zaretskii
2022-06-25 4:47 ` Optimizing performance of buffer markers (was: Exposing buffer text modifications to Lisp) Ihor Radchenko
2022-06-25 8:29 ` Optimizing performance of buffer markers Stefan Monnier
2022-06-25 8:44 ` Eli Zaretskii
2022-06-25 9:07 ` Stefan Monnier
2022-06-25 9:20 ` Eli Zaretskii
2022-06-25 9:27 ` Stefan Monnier
2022-06-25 9:47 ` Ihor Radchenko
2022-06-25 9:53 ` Stefan Monnier
2022-06-26 10:32 ` Robert Pluim
2022-06-22 15:45 ` Exposing buffer text modifications to Lisp Basil L. Contovounesios
2022-06-22 16:13 ` Eli Zaretskii
2022-06-25 4:54 ` Ihor Radchenko
2022-06-25 5:46 ` Eli Zaretskii
2022-06-29 12:24 ` Ihor Radchenko
2022-06-20 14:33 ` Alan Mackenzie
2022-06-21 3:58 ` Ihor Radchenko
2022-06-17 6:15 ` Tree-sitter integration on feature/tree-sitter Eli Zaretskii
2022-06-17 7:17 ` Yuan Fu
2022-06-17 10:37 ` Eli Zaretskii
2022-06-18 0:14 ` Yuan Fu
2022-06-18 6:22 ` Eli Zaretskii
2022-06-18 8:25 ` Yuan Fu
2022-06-18 8:50 ` Eli Zaretskii
2022-06-18 20:07 ` Yuan Fu
2022-06-19 5:39 ` Eli Zaretskii
2022-06-20 3:00 ` Yuan Fu
2022-06-20 11:44 ` Eli Zaretskii
2022-06-20 20:01 ` Yuan Fu
2022-06-21 2:26 ` Eli Zaretskii
2022-06-21 4:39 ` Yuan Fu
2022-06-21 10:18 ` Eli Zaretskii
2022-06-22 0:34 ` Yuan Fu
2022-06-17 11:06 ` Jostein Kjønigsen
2022-06-18 0:28 ` Yuan Fu
2022-06-18 20:57 ` Jostein Kjønigsen
-- strict thread matches above, loose matches on Subject: below --
2022-06-29 16:51 Abin Simon
2022-06-29 17:43 ` Yoav Marco
2022-06-30 11:21 ` Yoav Marco
2022-06-30 14:29 ` Abin Simon
2022-06-30 14:37 ` Yoav Marco
2022-06-28 16:08 Yoav Marco
2022-06-28 19:35 ` Yoav Marco
2022-06-29 15:35 ` Yuan Fu
2022-05-19 1:35 Kiong-Ge Liau
2022-05-09 17:50 Yoav Marco
2022-05-09 20:51 ` Yuan Fu
[not found] ` <87lev9wyll.fsf@gmail.com>
2022-05-10 15:20 ` Yoav Marco
2022-05-10 15:43 ` Yoav Marco
2022-05-10 17:54 ` Yuan Fu
2022-05-10 18:18 ` Yoav Marco
2022-05-10 19:58 ` Stefan Monnier
2022-05-10 23:11 ` Yuan Fu
2022-05-10 23:53 ` Yuan Fu
2022-05-11 11:10 ` Eli Zaretskii
2022-05-11 11:16 ` Yoav Marco
2022-05-11 14:20 ` Eli Zaretskii
2022-05-11 15:40 ` Yoav Marco
2022-05-11 16:27 ` Eli Zaretskii
2022-05-11 20:14 ` Yuan Fu
2022-05-11 20:25 ` Yuan Fu
2022-05-12 5:19 ` Eli Zaretskii
2022-05-12 6:10 ` Yuan Fu
2022-05-12 7:12 ` Eli Zaretskii
2022-05-12 15:18 ` Stefan Monnier
2022-05-12 15:53 ` Eli Zaretskii
2022-05-12 5:17 ` Eli Zaretskii
2022-05-12 6:07 ` Yuan Fu
2022-05-12 14:16 ` Yoav Marco
2022-05-12 16:04 ` Eli Zaretskii
2022-05-12 16:26 ` Yoav Marco
2022-05-12 17:18 ` Eli Zaretskii
2022-05-12 17:22 ` Yoav Marco
2022-05-13 6:34 ` Eli Zaretskii
2022-05-13 8:04 ` Theodor Thornhill
2022-05-13 8:36 ` Yoav Marco
2022-05-13 9:46 ` Theodor Thornhill
2022-05-13 10:37 ` Eli Zaretskii
2022-05-13 10:52 ` Theodor Thornhill
2022-05-13 8:42 ` Yoav Marco
2022-05-13 10:41 ` Eli Zaretskii
2022-05-14 0:04 ` Yuan Fu
2022-06-16 19:16 ` Yuan Fu
2022-06-16 21:57 ` yoavm448
2022-06-17 1:10 ` Yuan Fu
2022-05-12 15:15 ` Stefan Monnier
2022-05-15 19:20 ` chad
2022-05-15 19:26 ` Eli Zaretskii
2022-05-07 8:29 Yuan Fu
2022-05-07 8:44 ` Yuan Fu
2022-05-07 8:47 ` Theodor Thornhill
2022-05-07 17:59 ` Yuan Fu
2022-05-07 18:16 ` Theodor Thornhill
2022-05-07 9:04 ` Eli Zaretskii
2022-05-07 9:34 ` Theodor Thornhill
2022-05-07 18:33 ` Yuan Fu
2022-05-07 19:02 ` Theodor Thornhill
2022-05-07 18:27 ` Yuan Fu
2022-05-07 18:48 ` Eli Zaretskii
2022-05-07 19:00 ` Theodor Thornhill
2022-05-07 19:21 ` Eli Zaretskii
2022-05-07 19:11 ` Yuan Fu
2022-05-07 19:25 ` Eli Zaretskii
2022-05-07 20:00 ` Yuan Fu
2022-05-07 20:12 ` Theodor Thornhill
2022-05-07 21:24 ` Stefan Monnier
2022-05-07 22:02 ` Theodor Thornhill
2022-05-08 6:18 ` Eli Zaretskii
2022-05-08 12:05 ` Dmitry Gutov
2022-05-08 12:16 ` Stefan Monnier
2022-05-08 13:23 ` Eli Zaretskii
2022-05-08 20:57 ` Dmitry Gutov
2022-05-08 13:21 ` Eli Zaretskii
2022-05-08 20:42 ` Dmitry Gutov
2022-05-09 11:18 ` Eli Zaretskii
2022-05-08 6:16 ` Eli Zaretskii
2022-05-08 6:49 ` Theodor Thornhill
2022-05-08 6:58 ` Eli Zaretskii
2022-05-08 9:02 ` Theodor Thornhill
2022-05-08 9:09 ` Theodor Thornhill
2022-05-08 9:10 ` Eli Zaretskii
2022-05-08 9:19 ` Theodor Thornhill
2022-05-08 10:33 ` Eli Zaretskii
2022-05-08 13:47 ` Theodor Thornhill
2022-05-08 13:58 ` Eli Zaretskii
2022-05-08 14:01 ` Stefan Monnier
2022-05-08 14:25 ` Theodor Thornhill
2022-05-08 14:42 ` Eli Zaretskii
2022-05-08 19:16 ` Theodor Thornhill
2022-05-08 21:14 ` Yuan Fu
2022-05-09 11:14 ` Eli Zaretskii
2022-05-09 12:20 ` Theodor Thornhill
2022-05-09 12:23 ` Eli Zaretskii
2022-05-09 21:10 ` Yuan Fu
2022-05-09 21:33 ` Theodor Thornhill
2022-05-14 0:03 ` Yuan Fu
2022-05-14 5:03 ` Theodor Thornhill
2022-05-14 5:13 ` Yuan Fu
2022-05-17 21:45 ` Theodor Thornhill
2022-05-18 20:52 ` Yuan Fu
2022-05-18 21:07 ` Theodor Thornhill
2022-06-16 19:09 ` Yuan Fu
2022-06-17 6:19 ` Eli Zaretskii
2022-06-17 7:32 ` Yuan Fu
2022-06-17 10:42 ` Eli Zaretskii
2022-06-18 0:20 ` Yuan Fu
2022-06-18 6:23 ` Eli Zaretskii
2022-06-20 14:20 ` Daniel Martín
2022-06-20 20:03 ` Yuan Fu
2022-06-17 18:12 ` Yoav Marco
2022-06-18 0:35 ` Yuan Fu
2022-06-18 8:15 ` Yoav Marco
2022-06-18 20:11 ` Yuan Fu
2022-05-08 22:42 ` Stephen Leake
2022-05-14 15:09 ` Daniel Martín
2022-05-14 15:55 ` Yuan Fu
2022-05-14 18:50 ` Daniel Martín
2022-05-14 19:09 ` Eli Zaretskii
2022-06-16 19:10 ` Yuan Fu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=27630AA3-8026-4E24-8852-ACCD9325B99D@gmail.com \
--to=casouri@gmail.com \
--cc=emacs-devel@gnu.org \
--cc=lkg.ch@pm.me \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).