dotfiles/emacs/.emacs.d/config/init-ide.el

94 lines
2.7 KiB
EmacsLisp

;; -*- lexical-binding: t; -*-
;; IDE features
;; Company-mode provides inline autocompletion
(use-package company
:hook (after-init . global-company-mode)
:config
(setq tab-always-indent 'complete)
(evil-collection-company-setup)
(general-def company-active-map "RET" #'company-complete-selection)
:custom
(company-idle-delay 0.3)
:general
([remap indent-for-tab-command] #'company-indent-or-complete-common)
([remap c-indent-line-or-region] #'company-indent-or-complete-common))
;; Quick file overview for supported modes
(use-package imenu
:straight (:type built-in)
:general
(leader-map "m" #'imenu))
;; Find definition/references
(use-package xref
:straight (:type built-in)
:config
(evil-collection-xref-setup)
:general
(normal "M-," #'xref-pop-marker-stack)
(normal "M-r" #'xref-find-references)
:custom
(xref-prompt-for-identifier nil))
(use-package eglot
:commands (eglot)
:config
(add-to-list 'eglot-server-programs
'(js-web-mode . ("typescript-language-server" "--stdio")))
(add-to-list 'eglot-server-programs
`(html-web-mode . ,(eglot-alternatives
'(("vscode-html-language-server" "--stdio")
("html-languageserver" "--stdio")))))
:init
(defvar eglot-prefix-map (make-sparse-keymap)
"Prefix keymap for eglot commands.")
(general-def eglot-prefix-map
"a" #'eglot-code-actions
"r" #'eglot-reconnect
"s" #'eglot-shutdown
"R" #'eglot-rename
"f" #'eglot-format-buffer
"i" #'eglot-code-action-organize-imports
"h" #'eldoc
"e" #'flymake-show-buffer-diagnostics
"E" #'flymake-show-project-diagnostics)
:general
(eglot-mode-map "C-c l" `(,eglot-prefix-map :which-key "eglot"))
:hook
(java-mode . eglot-ensure)
(rust-mode . eglot-ensure)
(js-mode . eglot-ensure)
(typescript-mode . eglot-ensure)
(python-mode . eglot-ensure)
(js-web-mode . eglot-ensure)
(html-web-mode . eglot-ensure))
;; Some compilation-mode conveniences
(use-package compile
:straight (:type built-in)
:commands compile
:config
(evil-collection-compile-setup)
(defun postprocess-compilation-buffer ()
(goto-char compilation-filter-start)
(when (looking-at "\033c")
(delete-region (point-min) (match-end 0)))
(ansi-color-apply-on-region (point) (point-max)))
(add-hook 'compilation-filter-hook 'postprocess-compilation-buffer))
;; Code formatting library
(use-package apheleia
:straight (apheleia :host github :repo "raxod502/apheleia")
:general
("C-c f" #'apheleia-format-buffer))
;; Debugger interface
(use-package realgud
:defer t
:config
(evil-collection-realgud-setup))
(provide 'init-ide)