mattt-b / odin-mode

Emacs major mode for the Odin programming language
30 stars 13 forks source link

How to add odin-mode with ols server lsp of Odin to EMACS with elpaca package manager in Linux. #13

Open joaocarvalhoopen opened 11 months ago

joaocarvalhoopen commented 11 months ago

Hello,

I would like to say here what I did in Linux (with the help of "the weak") to make this work with the elpaca package manager:

I hope that this will help others.

1º Download the OLS to the designated directory and compile it. 2º Download the odin-mode and copy to the designated directory.

3º Then in the init.el add the following:

(add-to-list 'load-path "/home/joaocarvalho/.config/emacs/elpaca/repos/odin-mode")
(add-to-list 'load-path "/home/joaocarvalho/odin/ols")

(require 'odin-mode)

; Odin
;; With odin-mode (https://github.com/mattt-b/odin-mode) and lsp-mode already added to your init.el of course!.
(setq-default lsp-auto-guess-root t) ;; if you work with Projectile/project.el this will help find the ols.json file.
(defvar lsp-language-id-configuration '((odin-mode . "odin")))

(use-package lsp-mode
  :hook ((python-mode . lsp)
         (javascript-mode . lsp)
         (odin-mode . lsp))
  :commands lsp
  :config
  (lsp-register-client
    (make-lsp-client :new-connection (lsp-stdio-connection "/home/joaocarvalho/odin/ols/ols")
                  :major-modes '(odin-mode)
                  :server-id 'ols
                  :multi-root t)) ;; This is just so lsp-mode sends the "workspaceFolders" param to the server.
  ; (setq lsp-prefer-flymake nil)) ; Or lsp-prefer-capf if you prefer LSP's completion over company-mode
) 

(use-package lsp-ui)

Best regards,

a3ru commented 4 months ago

image I'm using doom emacs bdw.

;; Odin LSP

(setq-default lsp-auto-guess-root t)
(defvar lsp-language-id-configuration '((odin-mode . "odin")))

  (use-package lsp-mode
    :hook ((python-mode . lsp)
           (javascript-mode . lsp)
           (odin-mode . lsp))
    :commands lsp
    :config
    (make-lsp-client :new-connection (lsp-stdio-connection "ols")
                     :major-modes '(odin-mode)
                     :server-id 'ols
                     :multi-root t))

It didn't work for me.

samwdp commented 1 month ago

@a3ru if you didn't get this to work already you need to do the following

in your packages.el you need to put the following

 (package! odin-mode
   :recipe (:host github :repo "mattt-b/odin-mode"))

run a doom sync command

then in your config.el put this somewhere, probably at the bottom

;; Enable odin-mode and configure OLS as the language server
(use-package! odin-mode
  :mode ("\\.odin\\'" . odin-mode)
  :hook (odin-mode . lsp))

;; Set up OLS as the language server for Odin, ensuring lsp-mode is loaded first
(with-eval-after-load 'lsp-mode
  (setq-default lsp-auto-guess-root t) ;; Helps find the ols.json file with Projectile or project.el
  (setq lsp-language-id-configuration (cons '(odin-mode . "odin") lsp-language-id-configuration))

  (lsp-register-client
    (make-lsp-client :new-connection (lsp-stdio-connection "ols OR path_to_ols_binary")
                    :major-modes '(odin-mode)
                    :server-id 'ols
                    :multi-root t))) ;; Ensures lsp-mode sends "workspaceFolders" to the server