Move what you can to LSP

This commit is contained in:
Maciej 2020-07-21 20:13:38 +03:00
parent 55b75ab70c
commit 55735b37c5
Signed by: maciej
GPG key ID: 41D62D42D3B0D765
11 changed files with 44 additions and 138 deletions

20
11lsp.el Normal file
View file

@ -0,0 +1,20 @@
(use-package lsp-mode
:ensure t
:defer t
:config (setq-default lsp-file-watch-threshold 10000
lsp-restart 'auto-restart
lsp-enable-file-watchers nil)
:hook ((typescript-mode . lsp-deferred)
(elixir-mode . lsp)
(rust-mode . lsp)
(js2-mode . lsp-deferred)))
(use-package lsp-ui
:ensure t
:requires (lsp-mode)
:defer t)
(setq lsp-ui-doc-enable t
lsp-ui-header t
lsp-ui-doc-include-signature t
lsp-log-io nil)

View file

@ -61,6 +61,7 @@
(load "$HOME/.emacs.d/08ctags.el" 'f 't) (load "$HOME/.emacs.d/08ctags.el" 'f 't)
(load "$HOME/.emacs.d/09ispell.el" 'f 't) (load "$HOME/.emacs.d/09ispell.el" 'f 't)
(load "$HOME/.emacs.d/10deft.el" 'f 't) (load "$HOME/.emacs.d/10deft.el" 'f 't)
(load "$HOME/.emacs.d/11lsp.el" 'f 't)
;; Themes ;; Themes
(load "$HOME/.emacs.d/themes/themes.el" 'f 't) (load "$HOME/.emacs.d/themes/themes.el" 'f 't)
@ -76,10 +77,8 @@
(load "$HOME/.emacs.d/languages/rust.el" 'f 't) (load "$HOME/.emacs.d/languages/rust.el" 'f 't)
(load "$HOME/.emacs.d/languages/clang.el" 'f 't) (load "$HOME/.emacs.d/languages/clang.el" 'f 't)
(load "$HOME/.emacs.d/languages/clojure.el" 'f 't) (load "$HOME/.emacs.d/languages/clojure.el" 'f 't)
(load "$HOME/.emacs.d/languages/kotlin.el" 'f 't)
(load "$HOME/.emacs.d/languages/ocaml.el" 'f 't) (load "$HOME/.emacs.d/languages/ocaml.el" 'f 't)
(load "$HOME/.emacs.d/languages/markdown.el" 'f 't) (load "$HOME/.emacs.d/languages/markdown.el" 'f 't)
;; (load "$HOME/.emacs.d/languages/haskell.el" 'f 't)
(custom-set-variables (custom-set-variables
;; custom-set-variables was added by Custom. ;; custom-set-variables was added by Custom.
@ -91,7 +90,7 @@
("1f38fb71e55e5ec5f14a39d03ca7d7a416123d3f0847745c7bade053ca58f043" "fec45178b55ad0258c5f68f61c9c8fd1a47d73b08fb7a51c15558d42c376083d" "60e09d2e58343186a59d9ed52a9b13d822a174b33f20bdc1d4abb86e6b17f45b" "85e6bb2425cbfeed2f2b367246ad11a62fb0f6d525c157038a0d0eaaabc1bfee" "3380a2766cf0590d50d6366c5a91e976bdc3c413df963a0ab9952314b4577299" "cea3ec09c821b7eaf235882e6555c3ffa2fd23de92459751e18f26ad035d2142" "8ffdc8c66ceeaf7921f4510a70d808f01b303e6b4d177c947b442e80d4228678" "b0c5c6cc59d530d3f6fbcfa67801993669ce062dda1435014f74cafac7d86246" "ad16a1bf1fd86bfbedae4b32c269b19f8d20d416bd52a87cd50e355bf13c2f23" "d9dab332207600e49400d798ed05f38372ec32132b3f7d2ba697e59088021555" "bc4c89a7b91cfbd3e28b2a8e9e6750079a985237b960384f158515d32c7f0490" "99c86852decaeb0c6f51ce8bd46e4906a4f28ab4c5b201bdc3fdf85b24f88518" "a85e40c7d2df4a5e993742929dfd903899b66a667547f740872797198778d7b5" default))) ("1f38fb71e55e5ec5f14a39d03ca7d7a416123d3f0847745c7bade053ca58f043" "fec45178b55ad0258c5f68f61c9c8fd1a47d73b08fb7a51c15558d42c376083d" "60e09d2e58343186a59d9ed52a9b13d822a174b33f20bdc1d4abb86e6b17f45b" "85e6bb2425cbfeed2f2b367246ad11a62fb0f6d525c157038a0d0eaaabc1bfee" "3380a2766cf0590d50d6366c5a91e976bdc3c413df963a0ab9952314b4577299" "cea3ec09c821b7eaf235882e6555c3ffa2fd23de92459751e18f26ad035d2142" "8ffdc8c66ceeaf7921f4510a70d808f01b303e6b4d177c947b442e80d4228678" "b0c5c6cc59d530d3f6fbcfa67801993669ce062dda1435014f74cafac7d86246" "ad16a1bf1fd86bfbedae4b32c269b19f8d20d416bd52a87cd50e355bf13c2f23" "d9dab332207600e49400d798ed05f38372ec32132b3f7d2ba697e59088021555" "bc4c89a7b91cfbd3e28b2a8e9e6750079a985237b960384f158515d32c7f0490" "99c86852decaeb0c6f51ce8bd46e4906a4f28ab4c5b201bdc3fdf85b24f88518" "a85e40c7d2df4a5e993742929dfd903899b66a667547f740872797198778d7b5" default)))
'(package-selected-packages '(package-selected-packages
(quote (quote
(slim-mode company-lsp lsp tuareg intero merlin reason-mode elm-mode deft buffer-move tide gradle-mode kotlin-mode clj-refactor planet-theme cider clojure-mode erlang rspec-mode dap-mode lsp-ui lsp-mode nginx-mode gitignore-mode js2-mode keyfreq visual-regexp enh-ruby-mode counsel-projectile counsel ivy flycheck-rust flycheck hydra solarized-theme company-ansible alchemist column-enforce-mode yaml-mode ansible dockerfile-mode ruby-end dash-at-point base16-theme exec-path-from-shell))) (lsp-ui lsp tuareg merlin reason-mode deft buffer-move clj-refactor planet-theme cider clojure-mode erlang rspec-mode dap-mode lsp-mode nginx-mode gitignore-mode js2-mode keyfreq visual-regexp enh-ruby-mode counsel-projectile counsel ivy flycheck-rust flycheck hydra solarized-theme company-ansible column-enforce-mode yaml-mode ansible dockerfile-mode ruby-end dash-at-point base16-theme exec-path-from-shell)))
'(safe-local-variable-values '(safe-local-variable-values
(quote (quote
((haskell-process-use-ghci . t) ((haskell-process-use-ghci . t)

View file

@ -1,7 +1,7 @@
(defun activate-clang-mode () (defun activate-clang-mode ()
"Goodies for editing c files" "Goodies for editing c files"
(set-indent 4) (set-indent 8)
(column-enforce-n 80) (column-enforce-n 100)
(add-to-list (make-local-variable 'company-backends) (add-to-list (make-local-variable 'company-backends)
'(company-etags company-yasnippet)) '(company-etags company-yasnippet))
@ -13,4 +13,4 @@
(projectile-project-root) (projectile-project-root) (projectile-project-root) (projectile-project-root)
))) )))
(add-hook 'c-mode-hook 'activate-clang-mode) (add-hook 'c-mode 'activate-clang-mode)

View file

@ -1,17 +1,17 @@
(use-package alchemist (use-package elixir-mode
:requires (ruby-end-mode) :requires (lsp-mode lsp-ui)
:ensure t :ensure t
:defer t) :config)
(defun activate-elixir-mode () (defun activate-elixir-mode ()
"All things Elixir." "All things Elixir."
(set-indent 2) (set-indent 2)
(column-enforce-n 98) (column-enforce-n 98)
(setq-local flycheck-check-syntax-automatically '(save mode-enabled))
(define-key elixir-mode-map (kbd "<f17>") 'elixir-format)
;; Company list override ;; Company list override
(add-to-list (make-local-variable 'company-backends) (add-to-list (make-local-variable 'company-backends)
'(alchemist-company company-yasnippet))) '(company-capf company-yasnippet)))
(add-hook 'elixir-mode-hook 'alchemist-mode) (add-hook 'elixir-mode-hook 'activate-elixir-mode)
(add-hook 'alchemist-mode-hook 'activate-elixir-mode)
(add-hook 'elixir-mode-hook 'ruby-end-mode)

View file

@ -1,15 +0,0 @@
(use-package elm-mode
:ensure t
:defer t)
(defun activate-elm-mode ()
"All things Elixir."
(set-indent 2)
(column-enforce-n 80)
;; Company list override
(add-to-list (make-local-variable 'company-backends)
'(elm-company company-yasnippet))
(define-key elm-mode-map (kbd "TAB") 'elm-indent-cycle))
(add-hook 'elm-mode-hook 'activate-elm-mode)

View file

@ -1,3 +0,0 @@
(use-package intero
:defer t
:ensure t)

View file

@ -1,111 +1,33 @@
(use-package js2-mode (use-package js2-mode
:requires (web-mode company-web) :requires (web-mode company-web lsp-mode lsp-ui)
:ensure t) :ensure t)
(use-package tide
:ensure t
:after (company flycheck)
:hook ((before-save . tide-format-before-save)))
(use-package lsp-mode
:ensure t
:defer t
:config (setq-default lsp-file-watch-threshold 10000)
:hook (typescript-mode . lsp))
;; Use js2-mode for javascript editing ;; Use js2-mode for javascript editing
(add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode)) (add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode))
(add-to-list 'auto-mode-alist '("\\.jsx\\'" . js2-mode))
(add-to-list 'auto-mode-alist '("\\.json\\'" . js2-mode)) (add-to-list 'auto-mode-alist '("\\.json\\'" . js2-mode))
;; Use js2-mode for typescript editing ;; Use js2-mode for typescript editing
(add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-mode)) (add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-mode))
(add-to-list 'auto-mode-alist '("\\.tsx\\'" . typescript-mode))
(defun activate-js2-mode () (defun activate-js2-mode ()
"JS2 mode overrides." "JS2 mode overrides."
(tide-setup)
(set-indent 2) (set-indent 2)
(when (not (string-match-p ".json" (buffer-file-name)))
(lsp))
(column-enforce-n 80) (column-enforce-n 80)
(setq-local js2-basic-offset 2) (setq-local js2-basic-offset 2)
(setq-local js2-strict-missing-semi-warning nil) (setq-local js2-strict-missing-semi-warning nil)
(setq-local lsp-eldoc-enable-hover nil)
(setq js2-mode-show-parse-errors nil) (setq js2-mode-show-parse-errors nil)
(setq js2-mode-show-strict-warnings nil) (setq js2-mode-show-strict-warnings nil)
(tide-hl-identifier-mode +1)
(if (string-match-p "rebelroam" (buffer-file-name))
(flycheck-add-next-checker 'javascript-standard 'javascript-tide 'append))
(setq-local lsp-eldoc-enable-hover nil)
(setq-local flycheck-check-syntax-automatically '(save mode-enabled)) (setq-local flycheck-check-syntax-automatically '(save mode-enabled))
;; "Company list override." ;; "Company list override."
(add-to-list (make-local-variable 'company-backends) (add-to-list (make-local-variable 'company-backends)
'(company-yasnippet company-tide))) '(company-yasnippet company-capf)))
(add-hook 'js2-mode-hook 'activate-js2-mode) (add-hook 'js2-mode-hook 'activate-js2-mode)
(defun activate-typescript-mode ()
(set-indent 2)
(column-enforce-n 80))
;; Magic for LSP mode
(with-eval-after-load 'lsp-mode
;; enable log only for debug
(setq lsp-log-io nil)
;; use `evil-matchit' instead
(setq lsp-enable-folding nil)
;; no real time syntax check
(setq lsp-diagnostic-package :none)
;; handle yasnippet by myself
(setq lsp-enable-snippet nil)
;; use `company-ctags' only.
;; Please note `company-lsp' is automatically enabled if installed
(setq lsp-enable-completion-at-point nil)
;; turn off for better performance
(setq lsp-enable-symbol-highlighting nil)
;; use ffip instead
(setq lsp-enable-links nil)
;; auto restart lsp
(setq lsp-restart 'auto-restart)
;; @see https://github.com/emacs-lsp/lsp-mode/pull/1498 and code related to auto configure.
;; Require clients could be slow.
;; I only load `lsp-clients' because it includes the js client which I'm interested
(setq lsp-client-packages '(lsp-clients))
;; don't scan 3rd party javascript libraries
(push "[/\\\\][^/\\\\]*\\.\\(json\\|html\\|jade\\)$" lsp-file-watch-ignored) ; json
;; don't ping LSP lanaguage server too frequently
(defvar lsp-on-touch-time 0)
(defadvice lsp-on-change (around lsp-on-change-hack activate)
;; don't run `lsp-on-change' too frequently
(when (> (- (float-time (current-time))
lsp-on-touch-time) 30) ;; 30 seconds
(setq lsp-on-touch-time (float-time (current-time)))
ad-do-it)))
(defun my-connect-lsp (&optional no-reconnect)
"Connect lsp server. If NO-RECONNECT is t, don't shutdown existing lsp connection."
(interactive "P")
(when (and (not no-reconnect)
(fboundp 'lsp-disconnect))
(lsp-disconnect))
(when (and buffer-file-name
(not (member (file-name-extension buffer-file-name)
'("json"))))
(unless (and (boundp 'lsp-mode) lsp-mode)
(if (derived-mode-p 'js2-mode) (setq-local lsp-enable-imenu nil))
(lsp-deferred))))
(add-hook 'typescript-mode 'activate-typescript-mode)
(add-hook 'typescript-mode 'my-connect-lsp)

View file

@ -1,7 +0,0 @@
(use-package kotlin-mode
:ensure t
:defer t)
(use-package gradle-mode
:ensure t
:defer t)

View file

@ -2,8 +2,7 @@
:defer t :defer t
:ensure t :ensure t
:config :config
(add-hook 'tuareg-mode-hook 'merlin-mode) (add-hook 'tuareg-mode-hook 'merlin-mode))
)
(use-package merlin (use-package merlin
:defer t :defer t

View file

@ -1,7 +1,3 @@
(use-package racer
:ensure t
:requires (racer flycheck-rust))
(defun activate-rust-mode () (defun activate-rust-mode ()
"All things for Rust mode" "All things for Rust mode"
(interactive) (interactive)
@ -14,5 +10,4 @@
) )
(add-hook 'rust-mode-hook 'activate-rust-mode) (add-hook 'rust-mode-hook 'activate-rust-mode)
(add-hook 'rust-mode-hook 'racer-mode)
(add-hook 'rust-mode-hook 'flycheck-rust-setup) (add-hook 'rust-mode-hook 'flycheck-rust-setup)

View file

@ -8,9 +8,6 @@
;; ERB mode ;; ERB mode
(add-to-list 'auto-mode-alist '("\\.erb\\'" . web-mode)) (add-to-list 'auto-mode-alist '("\\.erb\\'" . web-mode))
;; Vue
(add-to-list 'auto-mode-alist '("\\.vue\\'" . web-mode))
;; React Typescript ;; React Typescript
(add-to-list 'auto-mode-alist '("\\.tsx\\'" . web-mode)) (add-to-list 'auto-mode-alist '("\\.tsx\\'" . web-mode))
@ -28,14 +25,13 @@
;; Indent web mode scripts by 2 ;; Indent web mode scripts by 2
(setq web-mode-script-padding 2) (setq web-mode-script-padding 2)
(setq web-mode-code-indent-offset 2) (setq web-mode-code-indent-offset 2)
(setq-local lsp-eldoc-enable-hover nil)
(flycheck-add-next-checker 'javascript-standard 'javascript-tide 'append)
(setq-local flycheck-check-syntax-automatically '(save mode-enabled)) (setq-local flycheck-check-syntax-automatically '(save mode-enabled))
(add-to-list (make-local-variable 'company-backends) (add-to-list (make-local-variable 'company-backends)
'(company-yasnippet company-tide)) '(company-yasnippet capf))
(when (string-match-p "jsx" (buffer-file-name)) (when (string-match-p "jsx" (buffer-file-name))
(tide-setup))) (lsp)))
(add-hook 'web-mode-hook 'activate-web-mode) (add-hook 'web-mode-hook 'activate-web-mode)