;; -*- 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)