Re: Interest in adding a tree-sitter mode for Slang?
Philip Kaludercic <[email protected]>
| Newsgroups | gmane.emacs.devel |
|---|---|
| Message-ID | <[email protected]> |
HikariNee <[email protected]> writes: > Hello Sean and admins, > > I pushed the code to a forge today: > https://codeberg.org/Hikari/slang-ts-mode. Can you add a .elpaignore file to list what files you don't want to bundle in the tarballs we host? I would suggest adding assets/ and test/. I have a few comments and suggestions here in patch form: The most opinionated change is that I adjusted the configuration template from the commentary section to remove the :mode entry in the use-package specification and instead directly populate `auto-mode-alist'. Is there any reason against doing it, because otherwise the major mode will not be enabled for people who don't use use-package, e.g. just install the major mode via the M-x list-packages interface or eventually using package-autosuggest. > Since NonGNU ELPA doesn't require copyright assignment, I'd prefer to > go that route rather than through GNU ELPA. It's licensed under > GPLv2-or-later. I guess that is fine, but you are aware that this means we cannot bundle the major mode with Emacs in some future release of Emacs, right? > Thanks, > Hikari > > On 14/07/2026 18.23, Sean Whitton wrote: >> HikariNee [13/Jul 8:02pm +0530] wrote: >>> Hello everyone, >>> >>> I've recently been hacking away on a tree-sitter mode for the Slang >>> shader language (https://shader-slang.org). It's bare bones but >>> functional as it supports indentation, imenu and syntax highlighting. >>> >>> I was wondering if there is interest in upstreaming this into Emacs >>> core? any prerequisites the mode must satisfy? >> We'd probably want to add this to GNU ELPA or NonGNU ELPA. >> >> Adding the admins for those. >>
(unnamed)
(text/x-patch, 4.2 KB)
diff --git a/slang-ts-mode.el b/slang-ts-mode.el index 14cdf7c..b2bdfa9 100644 --- a/slang-ts-mode.el +++ b/slang-ts-mode.el @@ -2,11 +2,11 @@ ;; Copyright (C) 2026 Hikari -;; Author : Hikari <[email protected]> -;; URL : https://codeberg.org/hikari/slang-ts-mode -;; Version : 0.1 -;; Package-Requires : ((emacs "30")) -;; Keywords : slang languages tree-sitter +;; Author: Hikari <[email protected]> +;; URL: https://codeberg.org/hikari/slang-ts-mode +;; Version: 0.1 +;; Package-Requires: ((emacs "30")) +;; Keywords: slang languages tree-sitter ;; This file is not part of GNU Emacs. @@ -25,11 +25,11 @@ ;;; Commentary: -;; This package provides a tree-sitter mode for the Slang shader language. +;; This package provides a tree-sitter mode for the Slang shader +;; language, see https://shader-slang.org/. +;; ;; To use the package, using use-package simply: -;; (use-package slang-ts-mode -;; :ensure t -;; :mode "\\.slang\\'") +;; (use-package slang-ts-mode :ensure t) ;;; Code: @@ -56,37 +56,37 @@ (defcustom slang-ts-indent-offset 4 "Number of spaces for each indentation step in `slang-ts-mode'." - :version "32.1" - :type 'integer - :safe 'integerp - :group 'slang) + :version "32.1" ;Emacs 32? Or do you want to use :package-version? + :type 'natnum + :safe 'natnump) ;;; Syntax Table (mostly derived from C) (defvar slang-ts-mode--syntax-table - (let ((table (make-syntax-table))) - (modify-syntax-entry ?+ "." table) - (modify-syntax-entry ?- "." table) - (modify-syntax-entry ?= "." table) - (modify-syntax-entry ?% "." table) - (modify-syntax-entry ?& "." table) - (modify-syntax-entry ?| "." table) - (modify-syntax-entry ?^ "." table) - (modify-syntax-entry ?! "." table) - (modify-syntax-entry ?@ "." table) - (modify-syntax-entry ?~ "." table) - (modify-syntax-entry ?< "." table) - (modify-syntax-entry ?> "." table) - (modify-syntax-entry ?/ ". 124b" table) - (modify-syntax-entry ?* ". 23" table) - (modify-syntax-entry ?\n "> b" table) - (modify-syntax-entry ?\^m "> b" table) - (modify-syntax-entry ?\` "." table) - (modify-syntax-entry ?$ "." table) - table) + (with-syntax-table (make-syntax-table) + (modify-syntax-entry ?+ ".") + (modify-syntax-entry ?- ".") + (modify-syntax-entry ?= ".") + (modify-syntax-entry ?% ".") + (modify-syntax-entry ?& ".") + (modify-syntax-entry ?| ".") + (modify-syntax-entry ?^ ".") + (modify-syntax-entry ?! ".") + (modify-syntax-entry ?@ ".") + (modify-syntax-entry ?~ ".") + (modify-syntax-entry ?< ".") + (modify-syntax-entry ?> ".") + (modify-syntax-entry ?/ ". 124b") + (modify-syntax-entry ?* ". 23") + (modify-syntax-entry ?\n "> b") + (modify-syntax-entry ?\^m "> b") + (modify-syntax-entry ?\` ".") + (modify-syntax-entry ?$ ".") + (syntax-table)) "Syntax table for `slang-ts-mode'.") ;;; Private (defvar slang-ts-mode--keywords + ;; If I were you I'd break this line '("struct" "class" "return" "static" "import" "module" "interface" "dyn" "some" "associatedtype" "var" "let" "is" "as" "extension" "property" "namespace" "where" "switch" "case" "for" "enum" "if" "else" "while" "do" "break" "continue" "const" "default" "in" "out" "inout" "export" "groupshared") "Slang keywords for tree-sitter font-locking.") @@ -180,6 +180,7 @@ ((parent-is "assignment_expression") parent-bol slang-ts-indent-offset))) "Tree-sitter indent rules for `slang-ts-mode`.") +;; It would be nice if you could fix all the checkdoc-related complaints (defun slang-ts-mode--defun-name (node) (pcase (treesit-node-type node) ("module_declaration" @@ -199,7 +200,6 @@ ;;;###autoload (define-derived-mode slang-ts-mode prog-mode "Slang" "Major mode for editing Slang, powered by tree-sitter." - :group 'slang :syntax-table slang-ts-mode--syntax-table (when (and (treesit-ensure-installed 'slang) @@ -239,6 +239,9 @@ (treesit-major-mode-setup)) +;;;###autoload +(add-to-list 'auto-mode-alist '("\\.slang\\'" . slang-ts-mode)) + (provide 'slang-ts-mode) ;;; slang-ts-mode.el ends here