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)
#+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=:
#+begin_src emacs-lisp
(use-package eglot
@ -1613,21 +1632,22 @@ Use =eglot= as an alternative to =lsp-mode=:
:config
(add-to-list
'eglot-server-programs
`(rust-mode
. ("rust-analyzer" :initializationOptions
(:cargo (:buildScripts (:enable t)
:allFeatures (:enable t)
:features "all"
:extraEnv (:RUSTFLAGS "-Clinker=clang -Clink-arg=-fuse-ld=mold")))
(:check (:command "clippy"))
(:completion (:autoimport (:enable t)))
(:inlayHints (
;; :maxLength 20
:bindingModeHints (:enable t)
:closureReturnTypeHints (:enable t)))
(:procMacro (:enable t)))
)
)
'(rust-mode
"rust-analyzer"))
(setq-default eglot-workspace-configuration
'(:rust-analyzer
(:cargo (:buildScripts (:enable t)
:allFeatures t
:features "all"
:extraEnv (:RUSTFLAGS "-Clinker=clang -Clink-arg=-fuse-ld=mold"))
:check (:command "clippy")
:completion (:autoimport (:enable t))
:inlayHints (
;; :maxLength 20
:bindingModeHints (:enable t)
:closureReturnTypeHints (:enable t))
:procMacro (:enable t)))
)
(setq eglot-code-action-indications '(margin mode-line)
eglot-extend-to-xref t
completion-category-overrides '((eglot (styles orderless))
@ -1681,23 +1701,8 @@ Use =eglot= as an alternative to =lsp-mode=:
:straight t
: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
** COMMENT LSP
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.
@ -1922,33 +1927,39 @@ hlsl-mode:
)
#+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
(require 'slang-ts-mode)
(add-hook 'slang-ts-mode-hook (lambda () (hs-minor-mode -1)))
#+end_src
#+begin_src emacs-lisp :tangle "local-lisp/slang-ts-mode.el"
;;; -*- lexical-binding: t -*-
(require 'treesit)
(eval-when-compile (require 'rx))
(require 'c-ts-common)
(add-to-list
'treesit-language-source-alist
'(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)
`(slang "https://github.com/tree-sitter-grammars/tree-sitter-slang"))
(defgroup slang nil "Khronos Slang Major Mode."
:group 'languages)
@ -1991,6 +2002,8 @@ hlsl-mode:
(modify-syntax-entry ?* ". 23" table)
(modify-syntax-entry ?\n "> b" table)
(modify-syntax-entry ?\^m "> b" table)
;; underscore is part of words
(modify-syntax-entry ?_ "w" table)
table)
"Syntax table for `slang-ts-mode'.")
@ -2182,7 +2195,7 @@ delimiters < and >'s."
:defer t
:after (inheritenv envrc)
;; :after (rust-mode)
;; :hook(rustic-mode . nemo/lsp-format-on-save-mode)
:hook(rustic-mode . nemo/lsp-format-on-save-mode)
:general-config
(general-define-key
:prefix-map 'nemo/rust-map