slang and extract format-on-save from lsp package config
This commit is contained in:
parent
fd0dc6e778
commit
6e8fbfc374
103
init.org
103
init.org
|
@ -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,20 +1632,21 @@ 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"))
|
||||||
|
(setq-default eglot-workspace-configuration
|
||||||
|
'(:rust-analyzer
|
||||||
(:cargo (:buildScripts (:enable t)
|
(:cargo (:buildScripts (:enable t)
|
||||||
:allFeatures (:enable t)
|
:allFeatures t
|
||||||
:features "all"
|
:features "all"
|
||||||
:extraEnv (:RUSTFLAGS "-Clinker=clang -Clink-arg=-fuse-ld=mold")))
|
:extraEnv (:RUSTFLAGS "-Clinker=clang -Clink-arg=-fuse-ld=mold"))
|
||||||
(:check (:command "clippy"))
|
:check (:command "clippy")
|
||||||
(:completion (:autoimport (:enable t)))
|
:completion (:autoimport (:enable t))
|
||||||
(:inlayHints (
|
:inlayHints (
|
||||||
;; :maxLength 20
|
;; :maxLength 20
|
||||||
:bindingModeHints (:enable t)
|
:bindingModeHints (:enable t)
|
||||||
:closureReturnTypeHints (:enable t)))
|
:closureReturnTypeHints (:enable t))
|
||||||
(:procMacro (: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
|
||||||
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue