slang and extract format-on-save from lsp package config
This commit is contained in:
parent
fd0dc6e778
commit
6e8fbfc374
113
init.org
113
init.org
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue