Emacs: Switching to lsp-mode, lsp-ui, and flycheck, added stuff to csharp and odin
This commit is contained in:
parent
f5fc9ba6d9
commit
8a1634a9e1
@ -460,7 +460,7 @@ Setup other stuff
|
||||
(defun joe/disable-line-numbers () (display-line-numbers-mode 0))
|
||||
|
||||
(dolist (mode '( dashboard-mode-hook org-mode-hook term-mode-hook eww-mode-hook eat-mode-hook
|
||||
vterm-mode-hook dirvish-directory-view-mode-hook eshell-mode-hook
|
||||
vterm-mode-hook dirvish-directory-view-mode-hook eshell-mode-hook lsp-ui-doc-frame-mode-hook
|
||||
dired-mode-hook org-agenda-mode-hook shell-mode-hook magit-mode-hook compilation-mode-hook mu4e-headers-mode-hook mu4e-main-mode-hook))
|
||||
(add-hook mode #'joe/disable-line-numbers))
|
||||
|
||||
@ -880,7 +880,6 @@ Fill region is great, except when you don't need it...
|
||||
state))
|
||||
|
||||
(evil-define-key 'normal joe/evil-space-mode-map
|
||||
(kbd "K") #'eldoc
|
||||
(kbd "SPC t") tab-prefix-map
|
||||
(kbd "SPC p") project-prefix-map
|
||||
(kbd "SPC q") 'kill-buffer-and-window
|
||||
@ -1177,6 +1176,7 @@ Ace Window will show a hint if there are more than 2 windows, but I don't really
|
||||
"^\\*eldoc\\*" special-mode
|
||||
"^\\*godot.*" godot-mode
|
||||
"^\\*ert\\*" ert-results-mode
|
||||
"^\\*xref\\*" xref-mode
|
||||
"^\\*HTTP Response\\*" javascript-mode
|
||||
"^\\*SQL.*" sql-interactive-mode
|
||||
"^\\*cargo-test\\*" cargo-test-mode
|
||||
@ -1793,6 +1793,7 @@ odd looking ~'(t .t)~ is for specifying a default for all other actions.
|
||||
|
||||
(setq dirvish-quick-access-entries
|
||||
'(("h" "~/" "Home")
|
||||
("c" "~/.config" "Config")
|
||||
("d" "~/Downloads/" "Downloads")
|
||||
("D" "~/Documents/" "Documents")
|
||||
("b" "~/Documents/Books/" "Books")
|
||||
@ -2178,13 +2179,7 @@ close and remove the hook
|
||||
#'completion--in-region)
|
||||
args)))
|
||||
#+end_src
|
||||
*** Eldoc
|
||||
#+begin_src emacs-lisp
|
||||
(evil-global-set-key 'normal (kbd "K") #'eldoc)
|
||||
(global-eldoc-mode -1)
|
||||
|
||||
#+end_src
|
||||
*** Eglot
|
||||
*** COMMENT Eglot
|
||||
#+begin_src emacs-lisp
|
||||
(with-eval-after-load 'eglot
|
||||
;; (flymake-mode -1)
|
||||
@ -2213,58 +2208,66 @@ These help speed eglot up apparently [[https://www.reddit.com/r/emacs/comments/1
|
||||
(setq eglot-events-buffer-size 0)
|
||||
|
||||
#+end_src
|
||||
*** COMMENT LSP
|
||||
*** LSP
|
||||
#+begin_src emacs-lisp
|
||||
(require 'lsp-mode)
|
||||
(setq lsp-enable-which-key-integration t)
|
||||
(setq lsp-keymap-prefix "C-c c")
|
||||
(setq lsp-enable-which-key-integration t)
|
||||
(setq lsp-headerline-breadcrumb-enable nil)
|
||||
(setq lsp-modeline-diagnostics-enable nil)
|
||||
(setq lsp-modeline-code-actions-enable nil)
|
||||
(setq lsp-lens-enable nil)
|
||||
(setq lsp-eldoc-enable-hover nil)
|
||||
(setq eldoc-echo-area-use-multiline-p 'truncate-sym-name-if-fit)
|
||||
(setq eldoc-idle-delay 0)
|
||||
(setq lsp-eldoc-render-all t)
|
||||
;; (setq lsp-ui-doc-enable t)
|
||||
(defun joe/lsp-mode-hook ()
|
||||
(flymake-mode -1))
|
||||
(add-hook 'lsp-mode-hook #'joe/lsp-mode-hook)
|
||||
|
||||
;; (setq lsp-ui-peek-always-show t)
|
||||
;; (setq lsp-ui-doc-enable t)
|
||||
;; TODO: Disable lsp sideline
|
||||
(setq lsp-headerline-breadcrumb-enable nil)
|
||||
(setq lsp-eldoc-enable-hover t)
|
||||
(setq max-mini-window-height 0.25)
|
||||
(setq lsp-eldoc-enable-hover t)
|
||||
(setq lsp-ui-doc-enable nil)
|
||||
(setq eldoc-echo-area-use-multiline-p 'truncate-sym-name-if-fit)
|
||||
(setq eldoc-idle-delay 0)
|
||||
(setq lsp-idle-delay 0.2)
|
||||
(define-key global-map (kbd "C-c l l") #'lsp)
|
||||
(define-key lsp-command-map (kbd "c") #'flymake-mode)
|
||||
|
||||
;; Signatures
|
||||
(setq lsp-signature-doc-lines t)
|
||||
(setq lsp-signature-render-documentation nil)
|
||||
(setq lsp-eldoc-render-all nil)
|
||||
(setq lsp-ui-doc-position 'at-point)
|
||||
(setq lsp-ui-doc-show-with-mouse nil)
|
||||
|
||||
|
||||
(require 'flycheck)
|
||||
(setq flycheck-check-syntax-automatically '())
|
||||
(setq flycheck-keymap-prefix (kbd "C-c e"))
|
||||
|
||||
(add-hook 'after-save-hook #'flycheck-clear)
|
||||
|
||||
;; All this changes because we are using eglot now
|
||||
(when (boundp 'evil-mode)
|
||||
(evil-global-set-key 'normal (kbd "M-d") #'lsp-describe-thing-at-point)
|
||||
(evil-global-set-key 'normal (kbd "<leader>lh") 'lsp-headerline-breadcrumb-mode)
|
||||
(evil-global-set-key 'normal (kbd "SPC li") 'lsp-rust-analyzer-inlay-hints-mode)
|
||||
(evil-global-set-key 'normal (kbd "<leader>cs") 'consult-lsp-symbols)
|
||||
(evil-global-set-key 'normal (kbd "<leader>cf") 'consult-lsp-file-symbols))
|
||||
(when (boundp 'evil-mode)
|
||||
(evil-global-set-key 'normal (kbd "M-e") #'flycheck-buffer)
|
||||
(evil-global-set-key 'normal (kbd "M-n") #'flycheck-next-error)
|
||||
(evil-global-set-key 'normal (kbd "M-p") #'flycheck-previous-error)
|
||||
(evil-global-set-key 'normal (kbd "M-d") #'lsp-ui-doc-glance)
|
||||
(evil-global-set-key 'normal (kbd "SPC cs") 'consult-lsp-symbols)
|
||||
(evil-global-set-key 'normal (kbd "SPC cd") 'joe/consult-lsp-diagnostics)
|
||||
(evil-global-set-key 'normal (kbd "SPC cf") 'consult-lsp-file-symbols))
|
||||
|
||||
;; This function allows us to extract Rust's true function signature
|
||||
(cl-defmethod lsp-clients-extract-signature-on-hover (contents (_server-id (eql rust-analyzer)))
|
||||
(-let* (((&hash "value") contents)
|
||||
(groups (--partition-by (s-blank? it) (s-lines (s-trim value))))
|
||||
(sig_group (if (s-equals? "```rust" (car (-third-item groups)))
|
||||
(-third-item groups)
|
||||
(car groups)))
|
||||
(sig (--> sig_group
|
||||
(--drop-while (s-equals? "```rust" it) it)
|
||||
(--take-while (not (s-equals? "```" it)) it)
|
||||
(--map (s-trim it) it)
|
||||
(s-join " " it))))
|
||||
(lsp--render-element (concat "```rust\n" sig "\n```"))))
|
||||
;; (cl-defmethod lsp-clients-extract-signature-on-hover (contents (_server-id (eql rust-analyzer)))
|
||||
;; (-let* (((&hash "value") contents)
|
||||
;; (groups (--partition-by (s-blank? it) (s-lines (s-trim value))))
|
||||
;; (sig_group (if (s-equals? "```rust" (car (-third-item groups)))
|
||||
;; (-third-item groups)
|
||||
;; (car groups)))
|
||||
;; (sig (--> sig_group
|
||||
;; (--drop-while (s-equals? "```rust" it) it)
|
||||
;; (--take-while (not (s-equals? "```" it)) it)
|
||||
;; (--map (s-trim it) it)
|
||||
;; (s-join " " it))))
|
||||
;; (lsp--render-element (concat "```rust\n" sig "\n```")))
|
||||
|
||||
(require 'lsp-ui)
|
||||
;; (require 'lsp-ui)
|
||||
|
||||
#+end_src
|
||||
*** COMMENT Flycheck
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(require 'flycheck)
|
||||
;; TODO Add wrapping to these functions
|
||||
(when (boundp 'evil-mode)
|
||||
(evil-global-set-key 'normal (kbd "M-e") #'flycheck-next-error)
|
||||
@ -2405,6 +2408,59 @@ file."
|
||||
|
||||
#+end_src
|
||||
** Programming Languages
|
||||
*** CSharp
|
||||
|
||||
Omnisharp is very slow to start, so I want to start it manually, but not if the
|
||||
buffer already belongs to the current lsp workspace. This function checks if a
|
||||
newly opened buffer belongs to an LSP session and if it does, start lsp
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(defun lsp-mode-server-exists-p+ (mode &optional all-workspaces)
|
||||
(when (buffer-file-name) ; Needed for lsp--matching-clients?
|
||||
(let ((major-mode mode))
|
||||
(seq-intersection
|
||||
(lsp--filter-clients (-andfn #'lsp--supports-buffer?
|
||||
#'lsp--server-binary-present?))
|
||||
(when-let ((workspaces
|
||||
(if all-workspaces
|
||||
(-flatten (hash-table-values (lsp-session-folder->servers (lsp-session))))
|
||||
(gethash (lsp-workspace-root) (lsp-session-folder->servers (lsp-session))))))
|
||||
(mapcar #'lsp--workspace-client workspaces))
|
||||
#'equal))))
|
||||
|
||||
;; (setq treesit-load-name-override-list '((csharp "libtree-sitter-c-sharp.so")))
|
||||
#+end_src
|
||||
|
||||
And we do the rest here, including a macro
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(defun joe/csharp-mode-hook ()
|
||||
(yas-minor-mode t)
|
||||
(defalias 'joe/serialized-private-public-getter
|
||||
(kmacro "^ W W Y o C-y <escape> ^ i p u b l i c SPC <escape> l W y i w P a SPC = > SPC <escape> B B ~"))
|
||||
(evil-set-register ?g (lambda nil "Unity/C#"
|
||||
(call-interactively 'joe/serialized-private-public-getter)))
|
||||
;; (schmo/reapply-csharp-ts-mode-font-lock-settings)
|
||||
|
||||
(electric-pair-local-mode t)
|
||||
(when (lsp-mode-server-exists-p+ 'csharp-mode)
|
||||
(lsp)))
|
||||
(add-hook 'csharp-mode-hook #'joe/csharp-mode-hook)
|
||||
#+end_src
|
||||
*** Odin
|
||||
#+begin_src emacs-lisp
|
||||
(with-eval-after-load 'lsp-mode
|
||||
(setq-default lsp-auto-guess-root t) ;; Helps find the ols.json file with Projectile or project.el
|
||||
(setq lsp-language-id-configuration (cons '(odin-mode . "odin") lsp-language-id-configuration))
|
||||
|
||||
(lsp-register-client
|
||||
(make-lsp-client :new-connection (lsp-stdio-connection "~/.local/bin/ols") ;; Adjust the path here
|
||||
:major-modes '(odin-mode)
|
||||
:server-id 'ols
|
||||
:multi-root t))) ;; Ensures lsp-mode sends "workspaceFolders" to the server
|
||||
|
||||
(add-hook 'odin-mode-hook #'lsp)
|
||||
#+end_src
|
||||
*** C
|
||||
|
||||
Design some basic functions for compiling. There's also a hook to close the popper window if there
|
||||
@ -2422,17 +2478,6 @@ it doesn't close it.
|
||||
(c-toggle-comment-style -1))
|
||||
(add-hook 'c-mode-hook #'joe/c-mode-hook)
|
||||
#+end_src
|
||||
*** CSharp
|
||||
#+begin_src emacs-lisp
|
||||
(defun joe/csharp-mode-hook ()
|
||||
(yas-minor-mode t)
|
||||
(defalias 'joe/serialized-private-public-getter
|
||||
(kmacro "^ W W Y o C-y <escape> ^ i p u b l i c SPC <escape> l W y i w P a SPC = > SPC <escape> B B ~"))
|
||||
(evil-set-register ?g (lambda nil "Unity/C#"
|
||||
(call-interactively 'joe/serialized-private-public-getter)))
|
||||
(electric-pair-local-mode t))
|
||||
(add-hook 'csharp-mode-hook #'joe/csharp-mode-hook)
|
||||
#+end_src
|
||||
*** Python
|
||||
#+begin_src emacs-lisp
|
||||
(require 'python)
|
||||
|
Loading…
x
Reference in New Issue
Block a user