;;; 15-lsp.el --- Setup LSP -*- no-byte-compile: t; lexical-binding: t; -*- ;;; Description: ;; Despite the name, this file not only sets up LSP integration, but ;; also native emacs modes for various programming lanuguages, such as ;; Prolog, that do not use LSP. ;;; Code: ;; Eglot is the built-in LSP client. (use-package eglot :ensure nil :defer t :commands (eglot eglot-rename eglot-ensure eglot-rename eglot-format-buffer) :custom (eglot-report-progress nil) ; Prevent minibuffer spam :config (add-to-list 'eglot-server-programs '((rust-mode) . ("rust-analyzer"))) ;; Optimizations (fset #'jsonrpc--log-event #'ignore) (setq jsonrpc-event-hook nil)) ;; This package provides syntax highlighting and some utilities for ;; working with rust code. (use-package rust-mode :ensure t :defer t :commands (rust-mode)) ;; This package provides integration with Prolog (SWI). (use-package sweeprolog :straight (sweeprolog :type git :host nil :repo "https://git.sr.ht/~eshel/sweep" :branch "main" :files ("*.el" "sweep.pl" "sweep.texi")) ; Custom recipe because ; the normal one did not ; build properly. :ensure t :defer t :commands (sweeprolog-mode sweeprolog-top-level) :init (setq sweeprolog-swipl-path "swipl") (add-to-list 'auto-mode-alist '("\\.plt?\\'" . sweeprolog-mode))) (add-hook 'rust-mode-hook #'eglot) ;; Nix language (use-package nix-mode :ensure t :defer t :commands (nix-mode)) ;; Common Lisp (use-package sly :ensure t :defer t :commands (sly) :init (setq inferior-lisp-program "sbcl")) ;;; 15-lsp.el end here