Skip to content

Commit e4cea41

Browse files
committed
Use dedicated major mode for tree-sitter
1 parent f0b5efa commit e4cea41

File tree

2 files changed

+38
-41
lines changed

2 files changed

+38
-41
lines changed

csharp-mode.el

+15-40
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,6 @@
4040
"Major mode for editing C# code."
4141
:group 'prog-mode)
4242

43-
(defcustom csharp-mode-enable-tree-sitter nil
44-
"Use tree sitter for font locking and indentation."
45-
:type 'boolean)
46-
47-
(defvar csharp-mode-tree-sitter-patterns)
48-
(defun csharp-mode-indent-line ())
49-
5043
(eval-and-compile
5144
(defconst csharp--regex-identifier
5245
"[A-Za-z][A-Za-z0-9_]*"
@@ -646,16 +639,15 @@ compilation and evaluation time conflicts."
646639
;;; End of fix for strings on version 27.1
647640

648641

649-
(eval-and-compile
650-
(unless csharp-mode-enable-tree-sitter
651-
(defvar csharp-mode-syntax-table
652-
(funcall (c-lang-const c-make-mode-syntax-table csharp))
653-
"Syntax table used in csharp-mode buffers.")
654642

655-
(defvar csharp-mode-map
656-
(let ((map (c-make-inherited-keymap)))
657-
map)
658-
"Keymap used in csharp-mode buffers.")))
643+
(defvar csharp-mode-syntax-table
644+
(funcall (c-lang-const c-make-mode-syntax-table csharp))
645+
"Syntax table used in csharp-mode buffers.")
646+
647+
(defvar csharp-mode-map
648+
(let ((map (c-make-inherited-keymap)))
649+
map)
650+
"Keymap used in csharp-mode buffers.")
659651

660652
(easy-menu-define csharp-mode-menu csharp-mode-map "C# Mode Commands"
661653
(cons "C#" (c-lang-const c-mode-menu csharp)))
@@ -676,30 +668,13 @@ compilation and evaluation time conflicts."
676668
677669
Key bindings:
678670
\\{csharp-mode-map}"
679-
:group 'csharp
680-
681-
(if csharp-mode-enable-tree-sitter
682-
(progn
683-
(require 'csharp-tree-sitter)
684-
(setq-local indent-line-function #'csharp-mode-indent-line)
685-
686-
;; https://github.com/ubolonton/emacs-tree-sitter/issues/84
687-
(unless font-lock-defaults
688-
(setq font-lock-defaults '(nil)))
689-
(setq-local tree-sitter-hl-default-patterns csharp-mode-tree-sitter-patterns)
690-
;; Comments
691-
(setq-local comment-start "// ")
692-
(setq-local comment-end "")
693-
694-
(tree-sitter-hl-mode))
695-
(progn
696-
:after-hook (c-update-modeline)
697-
(c-initialize-cc-mode t)
698-
(c-init-language-vars csharp-mode)
699-
(c-common-init 'csharp-mode)
700-
(easy-menu-add csharp-mode-menu)
701-
(setq-local c-doc-comment-style '((csharp-mode . codedoc)))
702-
(c-run-mode-hooks 'c-mode-common-hook 'csharp-mode-hook))))
671+
:after-hook (c-update-modeline)
672+
(c-initialize-cc-mode t)
673+
(c-init-language-vars csharp-mode)
674+
(c-common-init 'csharp-mode)
675+
(easy-menu-add csharp-mode-menu)
676+
(setq-local c-doc-comment-style '((csharp-mode . codedoc)))
677+
(c-run-mode-hooks 'c-mode-common-hook 'csharp-mode-hook))
703678

704679
(provide 'csharp-mode)
705680

csharp-tree-sitter.el

+23-1
Original file line numberDiff line numberDiff line change
@@ -629,7 +629,29 @@ See `csharp-mode-indent-line'. ORIGINAL-COLUMN is forwarded to
629629
(tsc-node-type indenting-node)
630630
tree-sitter-tree-before)))
631631

632-
;;; End of tree-sitter
632+
633+
;;;###autoload
634+
(define-derived-mode csharp-tree-sitter-mode prog-mode "C#"
635+
"Major mode for editing Csharp code. "
636+
:group 'csharp
637+
638+
(setq csharp-mode-syntax-table nil)
639+
(setq csharp-mode-map nil)
640+
(require 'csharp-tree-sitter)
641+
(setq-local indent-line-function #'csharp-mode-indent-line)
642+
643+
;; https://github.com/ubolonton/emacs-tree-sitter/issues/84
644+
(unless font-lock-defaults
645+
(setq font-lock-defaults '(nil)))
646+
(setq-local tree-sitter-hl-default-patterns csharp-mode-tree-sitter-patterns)
647+
;; Comments
648+
(setq-local comment-start "// ")
649+
(setq-local comment-end "")
650+
651+
(tree-sitter-hl-mode))
652+
653+
;;;###autoload
654+
(add-to-list 'tree-sitter-major-mode-language-alist '(csharp-tree-sitter-mode . c-sharp))
633655

634656
(provide 'csharp-tree-sitter)
635657

0 commit comments

Comments
 (0)