;;; bison-ts-mode --- Tree-sitter mode for Bison ;;; Commentary: ;;; Code: (require 'treesit) (declare-function treesit-parser-create "treesit.c") (declare-function treesit-induce-sparse-tree "treesit.c") (declare-function treesit-node-child-by-field-name "treesit.c") (declare-function treesit-search-subtree "treesit.c") (declare-function treesit-node-parent "treesit.c") (declare-function treesit-node-next-sibling "treesit.c") (declare-function treesit-node-type "treesit.c") (declare-function treesit-node-child "treesit.c") (declare-function treesit-node-end "treesit.c") (declare-function treesit-node-start "treesit.c") (declare-function treesit-node-string "treesit.c") (declare-function treesit-query-compile "treesit.c") (declare-function treesit-query-capture "treesit.c") (declare-function treesit-parser-add-notifier "treesit.c") (declare-function treesit-parser-buffer "treesit.c") (declare-function treesit-parser-list "treesit.c") (defun bison-ts--font-lock-settings (language) (treesit-font-lock-rules :language language :feature 'comment '((comment) @font-lock-comment-face) :language language :feature 'declaration '((declaration (declaration_name) @font-lock-keyword-face)))) (define-derived-mode bison-ts-mode prog-mode "Bison" "A mode for Bison." (when (treesit-ready-p 'bison) (setq-local treesit-font-lock-settings (bison-ts--font-lock-settings 'bison)) (setq-local treesit-font-lock-feature-list '((comment) (declaration))) (setq-local treesit-range-settings (treesit-range-rules :embed 'c :host 'bison '((undelimited_code_block) @capture))) (treesit-major-mode-setup))) (provide 'bison-ts-mode) ;;; bison-ts-mode.el ends here