Files
confi-emacs-actual/configs/init-lsp.el
kj dabaf86f28 Big re-write :)
I reordered the code in a more clean an organized way. Also this improves a lot
the emacs startup time again, bucause after some updates it becomes a bit slow
with the old configuration, so i did it again in a new way.
2025-07-20 13:18:05 -03:00

103 lines
3.1 KiB
EmacsLisp

;;; init-lsp.el --- Configuración de eglot (LSP) -*- lexical-binding: t -*-
;; Author: kj <webmaster@outcontrol.net>
;; URL: https://git.kj2.me/kj/confi-emacs-actual
;;; Commentary:
;; Este archivo tiene todo lo relacionado con eglot.
;; Eglot es un cliente LSP para Emacs que desde la
;; versión 29 viene integrado dentro del mismo.
;;
;; El nombre Eglot es un apócope de "Emacs polyglot"
;; ya que con este cliente podemos añadir soporte para
;; muchísimos lenguajes, puesto que actualente el que
;; un lenguaje tenga su propio LSP es muy normal.
;;
;; Como añadido:
;;
;; Un Languaje Server Provider (LSP), es un protocolo
;; mediante el cual existen servidores para lenguajes
;; en específico, los cuales proveen cosas como el
;; autocompletado, linting, documentación, ir a la
;; definición, etc.
;;
;; Este protocolo viene a solucionar el problema de
;; que cada herramienta de programación tenga que
;; volver a crear su propio soporte para cada uno
;; de los lenguajes (DRY).
;;; Code:
(use-package eglot
:ensure nil
:hook ((prog-mode . (lambda ()
(unless (derived-mode-p
'emacs-lisp-mode 'lisp-mode
'makefile-mode 'snippet-mode
'ron-mode)
(eglot-ensure))))
((markdown-mode yaml-mode yaml-ts-mode) . eglot-ensure))
:init
(setq read-process-output-max (* 1024 1024)) ; 1MB
(setq eglot-autoshutdown t
eglot-events-buffer-size 0
eglot-send-changes-idle-time 0.5)
:config
(setq eglot-sync-connect 0)
;; (add-to-list 'eglot-server-programs '(php-mode . ("intelephense" "--stdio")))
(add-to-list 'eglot-server-programs
'((tsx-ts-mode
;; js-ts-mode
;; js-mode
typescript-ts-mode
typescript-mode)
.
(eglot-deno "deno" "lsp")))
(defclass eglot-deno (eglot-lsp-server) ()
:documentation "A custom class for deno lsp.")
(cl-defmethod eglot-initialization-options ((server eglot-deno))
"Passes through required deno initialization options"
(list :enable t
:lint t))
)
;; Mejorar la velocidad de eglot (un binario en rust )
(use-package eglot-booster
:ensure (:host github :repo "jdtsmith/eglot-booster")
:after eglot
:config
;;
(if (executable-find "emacs-lsp-booster")
(eglot-booster-mode)
(message "No está instalado emacs-lsp-booster. Eglot se usará de modo normal."))
)
;; Emmet (mientras veo como hacer funcionar emmet-ls)
(use-package emmet-mode
:hook
((html-mode . emmet-mode)
(web-mode . emmet-mode))
)
;; Revisar por errores en el código
(use-package flymake
:ensure nil
:hook (prog-mode . (lambda ()
(unless (derived-mode-p 'makefile-mode)
(flymake-mode))))
:config
(remove-hook 'flymake-diagnostic-functions 'flymake-proc-legacy-flymake)
)
;; Mostar los errores de flymake en un popup-tip
(use-package flymake-diagnostic-at-point
:after flymake
:hook (flymake-mode . flymake-diagnostic-at-point-mode))
(provide 'init-lsp)
;;; init-lsp.el ends here