branch: externals/csharp-mode commit 53fa8f11996d1db7d446d603acdb6abde49a22da Author: Theodor Thornhill <t...@thornhill.no> Commit: Theodor Thornhill <t...@thornhill.no>
Use dedicated major mode for tree-sitter --- README.org | 9 +++++++-- csharp-mode.el | 55 ++++++++++++++------------------------------------- csharp-tree-sitter.el | 27 ++++++++++++++++++++++++- 3 files changed, 48 insertions(+), 43 deletions(-) diff --git a/README.org b/README.org index 1c673ff..4e82552 100644 --- a/README.org +++ b/README.org @@ -26,8 +26,13 @@ You can enable experimental tree sitter support for indentation and highlighting (use-package tree-sitter-langs) (use-package csharp-mode - :init - (setq csharp-mode-enable-tree-sitter t)) + :straight + (csharp-mode :type git + :host github + :repo "emacs-csharp/csharp-mode" + :branch "tree-sitter") + :config + (add-to-list 'auto-mode-alist '("\\.cs\\'" . csharp-tree-sitter-mode))) #+end_src If you are using this, clearly state so if you find any issues. diff --git a/csharp-mode.el b/csharp-mode.el index 93f1226..fab8608 100644 --- a/csharp-mode.el +++ b/csharp-mode.el @@ -40,13 +40,6 @@ "Major mode for editing C# code." :group 'prog-mode) -(defcustom csharp-mode-enable-tree-sitter nil - "Use tree sitter for font locking and indentation." - :type 'boolean) - -(defvar csharp-mode-tree-sitter-patterns) -(defun csharp-mode-indent-line ()) - (eval-and-compile (defconst csharp--regex-identifier "[A-Za-z][A-Za-z0-9_]*" @@ -646,16 +639,15 @@ compilation and evaluation time conflicts." ;;; End of fix for strings on version 27.1 -(eval-and-compile - (unless csharp-mode-enable-tree-sitter - (defvar csharp-mode-syntax-table - (funcall (c-lang-const c-make-mode-syntax-table csharp)) - "Syntax table used in csharp-mode buffers.") - (defvar csharp-mode-map - (let ((map (c-make-inherited-keymap))) - map) - "Keymap used in csharp-mode buffers."))) +(defvar csharp-mode-syntax-table + (funcall (c-lang-const c-make-mode-syntax-table csharp)) + "Syntax table used in csharp-mode buffers.") + +(defvar csharp-mode-map + (let ((map (c-make-inherited-keymap))) + map) + "Keymap used in csharp-mode buffers.") (easy-menu-define csharp-mode-menu csharp-mode-map "C# Mode Commands" (cons "C#" (c-lang-const c-mode-menu csharp))) @@ -676,30 +668,13 @@ compilation and evaluation time conflicts." Key bindings: \\{csharp-mode-map}" - :group 'csharp - - (if csharp-mode-enable-tree-sitter - (progn - (require 'csharp-tree-sitter) - (setq-local indent-line-function #'csharp-mode-indent-line) - - ;; https://github.com/ubolonton/emacs-tree-sitter/issues/84 - (unless font-lock-defaults - (setq font-lock-defaults '(nil))) - (setq-local tree-sitter-hl-default-patterns csharp-mode-tree-sitter-patterns) - ;; Comments - (setq-local comment-start "// ") - (setq-local comment-end "") - - (tree-sitter-hl-mode)) - (progn - :after-hook (c-update-modeline) - (c-initialize-cc-mode t) - (c-init-language-vars csharp-mode) - (c-common-init 'csharp-mode) - (easy-menu-add csharp-mode-menu) - (setq-local c-doc-comment-style '((csharp-mode . codedoc))) - (c-run-mode-hooks 'c-mode-common-hook 'csharp-mode-hook)))) + :after-hook (c-update-modeline) + (c-initialize-cc-mode t) + (c-init-language-vars csharp-mode) + (c-common-init 'csharp-mode) + (easy-menu-add csharp-mode-menu) + (setq-local c-doc-comment-style '((csharp-mode . codedoc))) + (c-run-mode-hooks 'c-mode-common-hook 'csharp-mode-hook)) (provide 'csharp-mode) diff --git a/csharp-tree-sitter.el b/csharp-tree-sitter.el index 354003a..88db003 100644 --- a/csharp-tree-sitter.el +++ b/csharp-tree-sitter.el @@ -629,7 +629,32 @@ See `csharp-mode-indent-line'. ORIGINAL-COLUMN is forwarded to (tsc-node-type indenting-node) tree-sitter-tree-before))) -;;; End of tree-sitter + +;;;###autoload +(define-derived-mode csharp-tree-sitter-mode prog-mode "C#" + "Major mode for editing Csharp code. + +Key bindings: +\\{csharp-mode-map}" + :group 'csharp + + (setq csharp-mode-syntax-table nil) + (setq csharp-mode-map nil) + (require 'csharp-tree-sitter) + (setq-local indent-line-function #'csharp-mode-indent-line) + + ;; https://github.com/ubolonton/emacs-tree-sitter/issues/84 + (unless font-lock-defaults + (setq font-lock-defaults '(nil))) + (setq-local tree-sitter-hl-default-patterns csharp-mode-tree-sitter-patterns) + ;; Comments + (setq-local comment-start "// ") + (setq-local comment-end "") + + (tree-sitter-hl-mode)) + +;;;###autoload +(add-to-list 'tree-sitter-major-mode-language-alist '(csharp-tree-sitter-mode . c-sharp)) (provide 'csharp-tree-sitter)