slang and extract format-on-save from lsp package config

This commit is contained in:
janis 2025-09-20 01:47:38 +02:00
parent fd0dc6e778
commit 6e8fbfc374
Signed by: janis
SSH key fingerprint: SHA256:bB1qbbqmDXZNT0KKD5c2Dfjg53JGhj7B3CFcLIzSqq8

113
init.org
View file

@ -1603,8 +1603,27 @@ Auto-completion requires yasnippet for some competions, such as function argumen
:straight t) :straight t)
#+end_src #+end_src
** Eglot ** Format-On-Save
build formatting on save functionality:
#+begin_src emacs-lisp
(defvar-local nemo/lsp-format-on-save t)
(defvar nemo/lsp-format-on-save-function #'eglot-format)
(define-minor-mode nemo/lsp-format-on-save-mode
"Run lsp-format-buffer on save."
:lighter " fmt"
(if nemo/lsp-format-on-save-mode
(add-hook 'before-save-hook nemo/lsp-format-on-save-function nil t)
(remove-hook 'before-save-hook nemo/lsp-format-on-save-function nil t)
))
(defun nemo/do-lsp-format-on-save ()
"Format on save using LSP server."
(if nemo/lsp-format-on-save
(nemo/lsp-format-on-save-function)))
#+end_src
** Eglot
Use =eglot= as an alternative to =lsp-mode=: Use =eglot= as an alternative to =lsp-mode=:
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package eglot (use-package eglot
@ -1613,21 +1632,22 @@ Use =eglot= as an alternative to =lsp-mode=:
:config :config
(add-to-list (add-to-list
'eglot-server-programs 'eglot-server-programs
`(rust-mode '(rust-mode
. ("rust-analyzer" :initializationOptions "rust-analyzer"))
(:cargo (:buildScripts (:enable t) (setq-default eglot-workspace-configuration
:allFeatures (:enable t) '(:rust-analyzer
:features "all" (:cargo (:buildScripts (:enable t)
:extraEnv (:RUSTFLAGS "-Clinker=clang -Clink-arg=-fuse-ld=mold"))) :allFeatures t
(:check (:command "clippy")) :features "all"
(:completion (:autoimport (:enable t))) :extraEnv (:RUSTFLAGS "-Clinker=clang -Clink-arg=-fuse-ld=mold"))
(:inlayHints ( :check (:command "clippy")
;; :maxLength 20 :completion (:autoimport (:enable t))
:bindingModeHints (:enable t) :inlayHints (
:closureReturnTypeHints (:enable t))) ;; :maxLength 20
(:procMacro (:enable t))) :bindingModeHints (:enable t)
) :closureReturnTypeHints (:enable t))
) :procMacro (:enable t)))
)
(setq eglot-code-action-indications '(margin mode-line) (setq eglot-code-action-indications '(margin mode-line)
eglot-extend-to-xref t eglot-extend-to-xref t
completion-category-overrides '((eglot (styles orderless)) completion-category-overrides '((eglot (styles orderless))
@ -1681,23 +1701,8 @@ Use =eglot= as an alternative to =lsp-mode=:
:straight t :straight t
:hook (eglot-managed-mode . breadcrumb-mode) :hook (eglot-managed-mode . breadcrumb-mode)
) )
(defvar-local nemo/lsp-format-on-save t)
(defvar nemo/lsp-format-on-save-function #'eglot-format)
(define-minor-mode nemo/lsp-format-on-save-mode
"Run lsp-format-buffer on save."
:lighter " fmt"
(if nemo/lsp-format-on-save-mode
(add-hook 'before-save-hook nemo/lsp-format-on-save-function nil t)
(remove-hook 'before-save-hook nemo/lsp-format-on-save-function nil t)
))
(defun nemo/do-lsp-format-on-save ()
"Format on save using LSP server."
(if nemo/lsp-format-on-save
(nemo/lsp-format-on-save-function)))
#+end_src #+end_src
** COMMENT LSP ** COMMENT LSP
Use lsp-mode and lsp-ui for LSP functionality. Use lsp-mode and lsp-ui for LSP functionality.
Emacs has its own internal LSP client called eglot, but I've never used it and I'm relatively happy with lsp-mode. Emacs has its own internal LSP client called eglot, but I've never used it and I'm relatively happy with lsp-mode.
@ -1922,33 +1927,39 @@ hlsl-mode:
) )
#+end_src #+end_src
*** COMMENT slang-mode *** =slang-mode=:
#+begin_src emacs-lisp
(with-eval-after-load 'lsp-mode
(progn
;; LSP
(add-to-list 'lsp-language-id-configuration '(".*\\.slang$" . "slang"))
(lsp-register-client (make-lsp-client
:new-connection (lsp-stdio-connection "slangd")
:activation-fn (lsp-activate-on "slang")
:server-id 'slang))))
(with-eval-after-load 'eglot
(progn
(add-to-list 'eglot-server-programs '(slang-ts-mode . ("slangd")))
))
#+end_src
**** slang-mode
#+begin_src emacs-lisp #+begin_src emacs-lisp
(require 'slang-ts-mode) (require 'slang-ts-mode)
(add-hook 'slang-ts-mode-hook (lambda () (hs-minor-mode -1))) (add-hook 'slang-ts-mode-hook (lambda () (hs-minor-mode -1)))
#+end_src #+end_src
#+begin_src emacs-lisp :tangle "local-lisp/slang-ts-mode.el" #+begin_src emacs-lisp :tangle "local-lisp/slang-ts-mode.el"
;;; -*- lexical-binding: t -*-
(require 'treesit) (require 'treesit)
(eval-when-compile (require 'rx))
(require 'c-ts-common)
(add-to-list (add-to-list
'treesit-language-source-alist 'treesit-language-source-alist
'(slang "https://github.com/tree-sitter-grammars/tree-sitter-slang")) `(slang "https://github.com/tree-sitter-grammars/tree-sitter-slang"))
(with-eval-after-load 'lsp-mode
(progn
;; tree-sitter
;; LSP
(add-to-list 'lsp-language-id-configuration '(".*\\.slang$" . "slang"))
(lsp-register-client (make-lsp-client
:new-connection (lsp-stdio-connection "/opt/shader-slang-bin/bin/slangd")
:activation-fn (lsp-activate-on "slang")
:server-id 'slang))
))
(require 'c-ts-common)
(require 'c-ts-mode)
(defgroup slang nil "Khronos Slang Major Mode." (defgroup slang nil "Khronos Slang Major Mode."
:group 'languages) :group 'languages)
@ -1991,6 +2002,8 @@ hlsl-mode:
(modify-syntax-entry ?* ". 23" table) (modify-syntax-entry ?* ". 23" table)
(modify-syntax-entry ?\n "> b" table) (modify-syntax-entry ?\n "> b" table)
(modify-syntax-entry ?\^m "> b" table) (modify-syntax-entry ?\^m "> b" table)
;; underscore is part of words
(modify-syntax-entry ?_ "w" table)
table) table)
"Syntax table for `slang-ts-mode'.") "Syntax table for `slang-ts-mode'.")
@ -2182,7 +2195,7 @@ delimiters < and >'s."
:defer t :defer t
:after (inheritenv envrc) :after (inheritenv envrc)
;; :after (rust-mode) ;; :after (rust-mode)
;; :hook(rustic-mode . nemo/lsp-format-on-save-mode) :hook(rustic-mode . nemo/lsp-format-on-save-mode)
:general-config :general-config
(general-define-key (general-define-key
:prefix-map 'nemo/rust-map :prefix-map 'nemo/rust-map