From 55735b37c59bb90c2e58ad1694afc1dcf04b8bb0 Mon Sep 17 00:00:00 2001 From: Maciej Szlosarczyk Date: Tue, 21 Jul 2020 20:13:38 +0300 Subject: [PATCH] Move what you can to LSP --- 11lsp.el | 20 +++++++++ init.el | 5 +-- languages/clang.el | 6 +-- languages/elixir.el | 14 +++--- languages/elm.el | 15 ------- languages/haskell.el | 3 -- languages/javascript.el | 94 ++++------------------------------------- languages/kotlin.el | 7 --- languages/ocaml.el | 3 +- languages/rust.el | 5 --- languages/web.el | 10 ++--- 11 files changed, 44 insertions(+), 138 deletions(-) create mode 100644 11lsp.el delete mode 100644 languages/elm.el delete mode 100644 languages/haskell.el delete mode 100644 languages/kotlin.el diff --git a/11lsp.el b/11lsp.el new file mode 100644 index 0000000..7ea31cb --- /dev/null +++ b/11lsp.el @@ -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) diff --git a/init.el b/init.el index 2fedbde..f345866 100644 --- a/init.el +++ b/init.el @@ -61,6 +61,7 @@ (load "$HOME/.emacs.d/08ctags.el" 'f 't) (load "$HOME/.emacs.d/09ispell.el" 'f 't) (load "$HOME/.emacs.d/10deft.el" 'f 't) +(load "$HOME/.emacs.d/11lsp.el" 'f 't) ;; Themes (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/clang.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/markdown.el" 'f 't) -;; (load "$HOME/.emacs.d/languages/haskell.el" 'f 't) (custom-set-variables ;; 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))) '(package-selected-packages (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 (quote ((haskell-process-use-ghci . t) diff --git a/languages/clang.el b/languages/clang.el index 2ab385f..a27b37b 100644 --- a/languages/clang.el +++ b/languages/clang.el @@ -1,7 +1,7 @@ (defun activate-clang-mode () "Goodies for editing c files" - (set-indent 4) - (column-enforce-n 80) + (set-indent 8) + (column-enforce-n 100) (add-to-list (make-local-variable 'company-backends) '(company-etags company-yasnippet)) @@ -13,4 +13,4 @@ (projectile-project-root) (projectile-project-root) ))) -(add-hook 'c-mode-hook 'activate-clang-mode) +(add-hook 'c-mode 'activate-clang-mode) diff --git a/languages/elixir.el b/languages/elixir.el index b7b8f40..06175fa 100644 --- a/languages/elixir.el +++ b/languages/elixir.el @@ -1,17 +1,17 @@ -(use-package alchemist - :requires (ruby-end-mode) +(use-package elixir-mode + :requires (lsp-mode lsp-ui) :ensure t - :defer t) + :config) (defun activate-elixir-mode () "All things Elixir." (set-indent 2) (column-enforce-n 98) + (setq-local flycheck-check-syntax-automatically '(save mode-enabled)) + (define-key elixir-mode-map (kbd "") 'elixir-format) ;; Company list override (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 'alchemist-mode-hook 'activate-elixir-mode) -(add-hook 'elixir-mode-hook 'ruby-end-mode) +(add-hook 'elixir-mode-hook 'activate-elixir-mode) diff --git a/languages/elm.el b/languages/elm.el deleted file mode 100644 index 671df65..0000000 --- a/languages/elm.el +++ /dev/null @@ -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) diff --git a/languages/haskell.el b/languages/haskell.el deleted file mode 100644 index f408458..0000000 --- a/languages/haskell.el +++ /dev/null @@ -1,3 +0,0 @@ -(use-package intero - :defer t - :ensure t) diff --git a/languages/javascript.el b/languages/javascript.el index 2f27e5b..5acb083 100644 --- a/languages/javascript.el +++ b/languages/javascript.el @@ -1,111 +1,33 @@ (use-package js2-mode - :requires (web-mode company-web) + :requires (web-mode company-web lsp-mode lsp-ui) :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 (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)) ;; Use js2-mode for typescript editing (add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-mode)) -(add-to-list 'auto-mode-alist '("\\.tsx\\'" . typescript-mode)) (defun activate-js2-mode () "JS2 mode overrides." - (tide-setup) (set-indent 2) + + (when (not (string-match-p ".json" (buffer-file-name))) + (lsp)) + (column-enforce-n 80) (setq-local js2-basic-offset 2) (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-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)) ;; "Company list override." (add-to-list (make-local-variable 'company-backends) - '(company-yasnippet company-tide))) + '(company-yasnippet company-capf))) (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) diff --git a/languages/kotlin.el b/languages/kotlin.el deleted file mode 100644 index e7529d0..0000000 --- a/languages/kotlin.el +++ /dev/null @@ -1,7 +0,0 @@ -(use-package kotlin-mode - :ensure t - :defer t) - -(use-package gradle-mode - :ensure t - :defer t) diff --git a/languages/ocaml.el b/languages/ocaml.el index e6d5dac..dc107d0 100644 --- a/languages/ocaml.el +++ b/languages/ocaml.el @@ -2,8 +2,7 @@ :defer t :ensure t :config - (add-hook 'tuareg-mode-hook 'merlin-mode) - ) + (add-hook 'tuareg-mode-hook 'merlin-mode)) (use-package merlin :defer t diff --git a/languages/rust.el b/languages/rust.el index d70599f..29bcd00 100644 --- a/languages/rust.el +++ b/languages/rust.el @@ -1,7 +1,3 @@ -(use-package racer - :ensure t - :requires (racer flycheck-rust)) - (defun activate-rust-mode () "All things for Rust mode" (interactive) @@ -14,5 +10,4 @@ ) (add-hook 'rust-mode-hook 'activate-rust-mode) -(add-hook 'rust-mode-hook 'racer-mode) (add-hook 'rust-mode-hook 'flycheck-rust-setup) diff --git a/languages/web.el b/languages/web.el index d432136..ed5488f 100644 --- a/languages/web.el +++ b/languages/web.el @@ -8,9 +8,6 @@ ;; ERB mode (add-to-list 'auto-mode-alist '("\\.erb\\'" . web-mode)) -;; Vue -(add-to-list 'auto-mode-alist '("\\.vue\\'" . web-mode)) - ;; React Typescript (add-to-list 'auto-mode-alist '("\\.tsx\\'" . web-mode)) @@ -28,14 +25,13 @@ ;; Indent web mode scripts by 2 (setq web-mode-script-padding 2) (setq web-mode-code-indent-offset 2) - - (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)) (add-to-list (make-local-variable 'company-backends) - '(company-yasnippet company-tide)) + '(company-yasnippet capf)) (when (string-match-p "jsx" (buffer-file-name)) - (tide-setup))) + (lsp))) (add-hook 'web-mode-hook 'activate-web-mode)