Skip to content

Commit 48eefee

Browse files
authored
Add credo-language-server support (#4068)
* Add credo-language-server support This is a linting server for the Elixir programming language. * clients/lsp-credo.el: New file. * docs/lsp-clients.json: Add credo-ls entry. * lsp-mode.el: Add directory for server cache. * CHANGELOG.org: Add entry. * Fix lsp-credo copyright * Add automatic installation to lsp-credo * clients/lsp-credo.el: Add automatic installation. * Use new download link for lsp-credo * Add lsp-credo to lsp-client-packages * lsp-mode.el (lsp-client-packages): Add lsp-credo. * Set multi-root to nil for lsp-credo The client does not support multi root workspaces yet.
1 parent f61671b commit 48eefee

File tree

4 files changed

+109
-1
lines changed

4 files changed

+109
-1
lines changed

CHANGELOG.org

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
* Changelog
22
** Unreleased 8.0.1
3+
* Add [[https://github.com/elixir-tools/credo-language-server][credo-language-server]]
34
* Add support for clojure-ts-mode in clojure-lsp client
45
* terraform-ls now supports prefill requied fields and the ability to validate on save.
56
* Ignore =.terraform= and =.terragrunt-cache= directories

clients/lsp-credo.el

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
;;; lsp-credo.el --- lsp-mode Credo integration -*- lexical-binding: t; -*-
2+
3+
;; Copyright (C) 2023 Wilhelm H Kirschbaum
4+
5+
;; Author: Wilhelm H Kirschbaum
6+
;; Keywords: lsp, elixir, credo
7+
8+
;; This program is free software; you can redistribute it and/or modify
9+
;; it under the terms of the GNU General Public License as published by
10+
;; the Free Software Foundation, either version 3 of the License, or
11+
;; (at your option) any later version.
12+
13+
;; This program is distributed in the hope that it will be useful,
14+
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
15+
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16+
;; GNU General Public License for more details.
17+
18+
;; You should have received a copy of the GNU General Public License
19+
;; along with this program. If not, see <https://www.gnu.org/licenses/>.
20+
21+
;;; Commentary:
22+
23+
;; LSP Client for Elixir Credo
24+
25+
;;; Code:
26+
27+
(require 'lsp-mode)
28+
29+
(defgroup lsp-credo nil
30+
"Settings for credo language server."
31+
:group 'lsp-mode
32+
:link '(url-link "https://github.com/elixir-tools/credo-language-server")
33+
:package-version '(lsp-mode . "8.0.1"))
34+
35+
(defcustom lsp-credo-command '("credo-language-server" "--stdio=true")
36+
"The command that starts credo-language-server."
37+
:type '(repeat :tag "List of string values" string)
38+
:group 'lsp-credo
39+
:package-version '(lsp-mode . "8.0.1"))
40+
41+
(defcustom lsp-credo-version "0.1.2"
42+
"Credo language server version to download.
43+
It has to be set before `lsp-credo.el' is loaded and it has to
44+
be available here: https://github.com/elixir-tools/credo-language-server/releases."
45+
:type 'string
46+
:group 'lsp-credo
47+
:package-version '(lsp-mode . "8.0.1"))
48+
49+
(defcustom lsp-credo-download-url
50+
(format (concat "https://github.com/elixir-tools/credo-language-server"
51+
"/releases/download/v%s/credo-language-server")
52+
lsp-credo-version)
53+
"Automatic download url for credo-language-server."
54+
:type 'string
55+
:group 'lsp-credo
56+
:package-version '(lsp-mode . "8.0.1"))
57+
58+
(defcustom lsp-credo-binary-path
59+
(f-join lsp-server-install-dir
60+
"credo-language-server"
61+
"credo-language-server")
62+
"The path to `credo-language-server' binary."
63+
:type 'file
64+
:group 'lsp-credo
65+
:package-version '(lsp-mode . "8.0.1"))
66+
67+
(lsp-dependency
68+
'credo-language-server
69+
`(:download :url lsp-credo-download-url
70+
:store-path ,(f-join lsp-server-install-dir
71+
"credo-language-server"
72+
"credo-language-server")
73+
:binary-path lsp-credo-binary-path
74+
:set-executable? t))
75+
76+
(lsp-register-client
77+
(make-lsp-client
78+
:new-connection
79+
(lsp-stdio-connection
80+
(lambda ()
81+
`(,(or (executable-find (cl-first lsp-credo-command))
82+
(lsp-package-path 'credo-language-server))
83+
,@(cl-rest lsp-credo-command))))
84+
:activation-fn (lsp-activate-on "elixir")
85+
:priority -1
86+
:add-on? t
87+
:multi-root nil
88+
:server-id 'credo-language-server
89+
:download-server-fn
90+
(lambda (_client callback error-callback _update?)
91+
(lsp-package-ensure 'credo-language-server callback error-callback))))
92+
93+
(lsp-consistency-check lsp-credo)
94+
95+
(provide 'lsp-credo)
96+
97+
;;; lsp-credo.el ends here

docs/lsp-clients.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,14 @@
6969
"lsp-install-server": "camells",
7070
"debugger": "Not available"
7171
},
72+
{
73+
"name": "credo",
74+
"full-name": "Credo",
75+
"server-name": "credo-ls",
76+
"server-url": "https://github.com/elixir-tools/credo-language-server",
77+
"installation-url": "https://github.com/elixir-tools/credo-language-server#installation",
78+
"debugger": "Not available"
79+
},
7280
{
7381
"name": "csharp-ls",
7482
"common-group-name": "csharp",

lsp-mode.el

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ As defined by the Language Server Protocol 3.16."
175175

176176
(defcustom lsp-client-packages
177177
'( ccls lsp-actionscript lsp-ada lsp-angular lsp-ansible lsp-astro lsp-bash
178-
lsp-beancount lsp-clangd lsp-clojure lsp-cmake lsp-crystal lsp-csharp lsp-css
178+
lsp-beancount lsp-clangd lsp-clojure lsp-cmake lsp-credo lsp-crystal lsp-csharp lsp-css
179179
lsp-d lsp-dart lsp-dhall lsp-docker lsp-dockerfile lsp-elm lsp-elixir lsp-emmet
180180
lsp-erlang lsp-eslint lsp-fortran lsp-fsharp lsp-gdscript lsp-go lsp-gleam
181181
lsp-glsl lsp-graphql lsp-hack lsp-grammarly lsp-groovy lsp-haskell lsp-haxe
@@ -400,6 +400,8 @@ the server has requested that."
400400
"[/\\\\]_build\\'"
401401
;; Elixir
402402
"[/\\\\]\\.elixir_ls\\'"
403+
;; Elixir Credo
404+
"[/\\\\]\\.elixir-tools\\'"
403405
;; terraform and terragrunt
404406
"[/\\\\]\\.terraform\\'"
405407
"[/\\\\]\\.terragrunt-cache\\'"

0 commit comments

Comments
 (0)