Skip to content

Commit a857af5

Browse files
committed
init try
1 parent 9843512 commit a857af5

File tree

1 file changed

+49
-20
lines changed

1 file changed

+49
-20
lines changed

lsp-ltex.el

Lines changed: 49 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
;;; Code:
3333

3434
(require 'custom)
35+
(require 'pcase)
3536
(require 'subr-x)
3637

3738
(require 'lsp-mode)
@@ -45,13 +46,26 @@ https://github.com/valentjn/ltex-ls"
4546
:group 'lsp-mode
4647
:link '(url-link :tag "Github" "https://github.com/emacs-languagetool/lsp-ltex"))
4748

48-
(defconst lsp-ltex-repo-path "valentjn/ltex-ls"
49-
"Path points to the repository url.")
49+
(defcustom lsp-ltex-backend 'ltex-ls
50+
"The backend language server to use."
51+
:type '(choice (const :tag "ltex-ls" ltex-ls)
52+
(const :tag "ltex-ls-plus" ltex-ls-plus)))
53+
54+
(defun lsp-ltex-name ()
55+
"The backend server name."
56+
(format "%s" lsp-ltex-backend))
57+
58+
(defun lsp-ltex-repo-path ()
59+
"Path points to the repository url."
60+
(pcase lsp-ltex-backend
61+
(`ltex-ls "valentjn/ltex-ls")
62+
(`ltex-ls-plus "ltex-plus/ltex-ls-plus")
63+
(_ (user-error "Unsupported backend for LTEX language server: %s" lsp-ltex-backend))))
5064

5165
(defcustom lsp-ltex-active-modes
5266
'( text-mode
5367
bibtex-mode context-mode
54-
latex-mode LaTeX-mode ;; AUCTeX 14+ has renamed latex-mode to LaTeX-mode
68+
latex-mode LaTeX-mode ; AUCTeX 14+ has renamed latex-mode to LaTeX-mode
5569
markdown-mode gfm-mode
5670
org-mode
5771
rst-mode)
@@ -63,12 +77,16 @@ https://github.com/valentjn/ltex-ls"
6377
(defvar lsp-ltex--extension-name nil "File name of the extension file from language server.")
6478
(defvar lsp-ltex--server-download-url nil "Automatic download url for lsp-ltex.")
6579

66-
(defcustom lsp-ltex-server-store-path
67-
(expand-file-name "ltex-ls" lsp-server-install-dir)
80+
(defcustom lsp-ltex-server-store-path nil
6881
"The path to the file in which LTEX Language Server will be stored."
6982
:type 'file
7083
:group 'lsp-ltex)
7184

85+
(defun lsp-ltex-server-store-path ()
86+
"The actual language server path."
87+
(or lsp-ltex-server-store-path
88+
(expand-file-name (lsp-ltex-name) lsp-server-install-dir)))
89+
7290
(defcustom lsp-ltex-user-rules-path
7391
(let ((path (expand-file-name "lsp-ltex" user-emacs-directory)))
7492
(unless (and (file-exists-p path) (file-directory-p path))
@@ -367,32 +385,35 @@ and concatenate them."
367385
"Return full path of the downloaded extension (compressed file).
368386
369387
This is use to unzip the language server files."
370-
(expand-file-name lsp-ltex--extension-name lsp-ltex-server-store-path))
388+
(expand-file-name lsp-ltex--extension-name (lsp-ltex-server-store-path)))
371389

372390
(defun lsp-ltex--extension-root ()
373391
"Return the root of the extension path.
374392
375393
This is use to active language server and check if language server's existence."
376-
(expand-file-name "latest" lsp-ltex-server-store-path))
394+
(expand-file-name "latest" (lsp-ltex-server-store-path)))
377395

378396
(defun lsp-ltex--store-locally-p ()
379397
"Return non-nil if language server is installed locally."
380-
(and (string-prefix-p lsp-server-install-dir lsp-ltex-server-store-path)
381-
(file-directory-p lsp-ltex-server-store-path)))
398+
(and (string-prefix-p lsp-server-install-dir (lsp-ltex-server-store-path))
399+
(file-directory-p (lsp-ltex-server-store-path))))
382400

383401
(defun lsp-ltex--current-version ()
384402
"Return the current version of LTEX."
385403
(if (lsp-ltex--store-locally-p)
386-
(when-let* ((gz-files (directory-files-recursively lsp-ltex-server-store-path "\\.gz"))
404+
(when-let* ((gz-files (directory-files-recursively (lsp-ltex-server-store-path) "\\.gz"))
387405
(tar (car gz-files))
388406
(fn (file-name-nondirectory (lsp-ltex--s-replace ".tar.gz" "" tar))))
389-
(lsp-ltex--s-replace "ltex-ls-" "" fn))
390-
(ignore-errors (gethash "ltex-ls" (json-parse-string (shell-command-to-string "ltex-ls -V"))))))
407+
(lsp-ltex--s-replace (format "%s-" (lsp-ltex-name)) "" fn))
408+
(ignore-errors
409+
(gethash (lsp-ltex-name)
410+
(json-parse-string
411+
(shell-command-to-string (format "%s -V" (lsp-ltex-name))))))))
391412

392413
(defun lsp-ltex--latest-version ()
393414
"Return the latest version from remote repository."
394415
(when (featurep 'github-tags)
395-
(when-let ((response (ignore-errors (github-tags lsp-ltex-repo-path))))
416+
(when-let ((response (ignore-errors (github-tags (lsp-ltex-repo-path)))))
396417
(let ((names (plist-get (cdr response) :names))
397418
(index 0) version ver)
398419
;; Loop through tag name and fine the stable version
@@ -411,18 +432,26 @@ This is use to active language server and check if language server's existence."
411432
`(:download :url ,lsp-ltex--server-download-url
412433
:store-path ,(lsp-ltex--downloaded-extension-path))))
413434

435+
(defun lsp-ltex--fallback-version ()
436+
"Fallback to this version by default."
437+
(pcase lsp-ltex-backend
438+
(`ltex-ls "16.0.0")
439+
(`ltex-ls-plus "18.4.0")
440+
(_ (user-error "Unsupported backend for LTEX language server: %s" lsp-ltex-backend))))
441+
414442
(defcustom lsp-ltex-version (or (lsp-ltex--current-version)
415443
(lsp-ltex--latest-version)
416-
"14.0.0") ; fall back to preset version
444+
(lsp-ltex--fallback-version)) ; fall back to preset version
417445
"Version of LTEX language server."
418446
:type 'string
419447
:set (lambda (symbol value)
420448
(set-default symbol value)
421-
(setq lsp-ltex--filename (format "ltex-ls-%s" value)
422-
lsp-ltex--extension-name (format "%s.tar.gz" lsp-ltex--filename)
423-
lsp-ltex--server-download-url
424-
(format "https://github.com/%s/releases/download/%s/%s"
425-
lsp-ltex-repo-path value lsp-ltex--extension-name))
449+
(let ((is-windows (eq system-type 'windows-nt)))
450+
(setq lsp-ltex--filename (format "%s-%s" (lsp-ltex-name) value)
451+
lsp-ltex--extension-name (format "%s.tar.gz" lsp-ltex--filename)
452+
lsp-ltex--server-download-url
453+
(format "https://github.com/%s/releases/download/%s/%s"
454+
(lsp-ltex-repo-path) value lsp-ltex--extension-name)))
426455
(lsp-ltex--lsp-dependency))
427456
:group 'lsp-ltex)
428457

@@ -437,7 +466,7 @@ If current server not found, install it then."
437466
(message "[INFO] Current LTEX server is up to date: %s" current)
438467
(when current
439468
;; First delete all binary files
440-
(delete-directory lsp-ltex-server-store-path t))
469+
(delete-directory (lsp-ltex-server-store-path) t))
441470
(custom-set-variables `(lsp-ltex-version ,latest))
442471
(lsp-install-server t 'ltex-ls) ; this is async
443472
(message "[INFO] %s LTEX server version: %s"

0 commit comments

Comments
 (0)