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
369387This 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
375393This 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