emacs/code/elpa/lsp-mode-20240319.1043/lsp-svelte.el

308 lines
12 KiB
EmacsLisp

;;; lsp-svelte.el --- LSP Svelte integration -*- lexical-binding: t; -*-
;; Copyright (C) 2020 Stepan Lusnikov
;; Author: Stepan Lusnikov <endenwer@gmail.com>
;; Keywords: lsp svelte
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;; LSP client for Svelte
;;; Code:
(require 'lsp-mode)
(defgroup lsp-svelte nil
"LSP support for Svelte."
:group 'lsp-mode
:link '(url-link
"https://github.com/sveltejs/language-tools"))
(lsp-dependency 'svelte-language-server
'(:system "svelteserver")
'(:npm :package "svelte-language-server"
:path "svelteserver"))
(defcustom lsp-svelte-plugin-typescript-enable t
"Enable the TypeScript plugin"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-typescript-diagnostics-enable t
"Enable diagnostic messages for TypeScript"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-typescript-hover-enable t
"Enable hover info for TypeScript"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-typescript-document-symbols-enable t
"Enable document symbols for TypeScript"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-typescript-completions-enable t
"Enable completions for TypeScript"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-typescript-find-references-enable t
"Enable find-references for TypeScript"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-typescript-definitions-enable t
"Enable go to definition for TypeScript"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-typescript-code-actions-enable t
"Enable code actions for TypeScript"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-typescript-selection-range-enable t
"Enable selection range for TypeScript"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-typescript-signature-help-enable t
"Enable signature help (parameter hints) for TypeScript"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-typescript-rename-enable t
"Enable rename functionality for JS/TS variables inside Svelte files"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-css-enable t
"Enable the CSS plugin"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-css-globals ""
"Which css files should be checked for global variables
(`--global-var: value;`).
These variables are added to the css completions. String of comma-separated
file paths or globs relative to workspace root."
:type 'string
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-css-diagnostics-enable t
"Enable diagnostic messages for CSS"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-css-hover-enable t
"Enable hover info for CSS"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-css-completions-enable t
"Enable auto completions for CSS"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-css-completions-emmet t
"Enable emmet auto completions for CSS"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-css-document-colors-enable t
"Enable document colors for CSS"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-css-color-presentations-enable t
"Enable color picker for CSS"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-css-document-symbols-enable t
"Enable document symbols for CSS"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-css-selection-range-enable t
"Enable selection range for CSS"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-html-enable t
"Enable the HTML plugin"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-html-hover-enable t
"Enable hover info for HTML"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-html-completions-enable t
"Enable auto completions for HTML"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-html-completions-emmet t
"Enable emmet auto completions for HTML"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-html-tag-complete-enable t
"Enable HTML tag auto closing"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-html-document-symbols-enable t
"Enable document symbols for HTML"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-svelte-enable t
"Enable the Svelte plugin"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-svelte-diagnostics-enable t
"Enable diagnostic messages for Svelte"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-svelte-compiler-warnings nil
"Svelte compiler warning codes to ignore or to treat as errors.
Example: `((css-unused-selector . ignore) (unused-export-let . error))"
:type '(alist :key-type (symbol :tag "Warning code")
:value-type (choice
(const :tag "Ignore" ignore)
(const :tag "Treat as error" error)))
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-svelte-format-enable t
"Enable formatting for Svelte (includes css & js)"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-svelte-completions-enable t
"Enable auto completions for Svelte"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-svelte-hover-enable t
"Enable hover information for Svelte"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-svelte-code-actions-enable t
"Enable Code Actions for Svelte"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-svelte-selection-range-enable t
"Enable selection range for Svelte"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(defcustom lsp-svelte-plugin-svelte-rename-enable t
"Enable rename/move Svelte files functionality"
:type 'boolean
:package-version '(lsp-mode . "8.0.0"))
(lsp-register-custom-settings
'(("svelte.plugin.svelte.rename.enable" lsp-svelte-plugin-svelte-rename-enable t)
("svelte.plugin.svelte.selectionRange.enable" lsp-svelte-plugin-svelte-selection-range-enable t)
("svelte.plugin.svelte.codeActions.enable" lsp-svelte-plugin-svelte-code-actions-enable t)
("svelte.plugin.svelte.hover.enable" lsp-svelte-plugin-svelte-hover-enable t)
("svelte.plugin.svelte.completions.enable" lsp-svelte-plugin-svelte-completions-enable t)
("svelte.plugin.svelte.format.enable" lsp-svelte-plugin-svelte-format-enable t)
("svelte.plugin.svelte.compilerWarnings" lsp-svelte-plugin-svelte-compiler-warnings)
("svelte.plugin.svelte.diagnostics.enable" lsp-svelte-plugin-svelte-diagnostics-enable t)
("svelte.plugin.svelte.enable" lsp-svelte-plugin-svelte-enable t)
("svelte.plugin.html.documentSymbols.enable" lsp-svelte-plugin-html-document-symbols-enable t)
("svelte.plugin.html.tagComplete.enable" lsp-svelte-plugin-html-tag-complete-enable t)
("svelte.plugin.html.completions.emmet" lsp-svelte-plugin-html-completions-emmet t)
("svelte.plugin.html.completions.enable" lsp-svelte-plugin-html-completions-enable t)
("svelte.plugin.html.hover.enable" lsp-svelte-plugin-html-hover-enable t)
("svelte.plugin.html.enable" lsp-svelte-plugin-html-enable t)
("svelte.plugin.css.selectionRange.enable" lsp-svelte-plugin-css-selection-range-enable t)
("svelte.plugin.css.documentSymbols.enable" lsp-svelte-plugin-css-document-symbols-enable t)
("svelte.plugin.css.colorPresentations.enable" lsp-svelte-plugin-css-color-presentations-enable t)
("svelte.plugin.css.documentColors.enable" lsp-svelte-plugin-css-document-colors-enable t)
("svelte.plugin.css.completions.emmet" lsp-svelte-plugin-css-completions-emmet t)
("svelte.plugin.css.completions.enable" lsp-svelte-plugin-css-completions-enable t)
("svelte.plugin.css.hover.enable" lsp-svelte-plugin-css-hover-enable t)
("svelte.plugin.css.diagnostics.enable" lsp-svelte-plugin-css-diagnostics-enable t)
("svelte.plugin.css.globals" lsp-svelte-plugin-css-globals)
("svelte.plugin.css.enable" lsp-svelte-plugin-css-enable t)
("svelte.plugin.typescript.rename.enable" lsp-svelte-plugin-typescript-rename-enable t)
("svelte.plugin.typescript.signatureHelp.enable" lsp-svelte-plugin-typescript-signature-help-enable t)
("svelte.plugin.typescript.selectionRange.enable" lsp-svelte-plugin-typescript-selection-range-enable t)
("svelte.plugin.typescript.codeActions.enable" lsp-svelte-plugin-typescript-code-actions-enable t)
("svelte.plugin.typescript.definitions.enable" lsp-svelte-plugin-typescript-definitions-enable t)
("svelte.plugin.typescript.findReferences.enable" lsp-svelte-plugin-typescript-find-references-enable t)
("svelte.plugin.typescript.completions.enable" lsp-svelte-plugin-typescript-completions-enable t)
("svelte.plugin.typescript.documentSymbols.enable" lsp-svelte-plugin-typescript-document-symbols-enable t)
("svelte.plugin.typescript.hover.enable" lsp-svelte-plugin-typescript-hover-enable t)
("svelte.plugin.typescript.diagnostics.enable" lsp-svelte-plugin-typescript-diagnostics-enable t)
("svelte.plugin.typescript.enable" lsp-svelte-plugin-typescript-enable t)))
(lsp-register-client
(make-lsp-client
:new-connection (lsp-stdio-connection
(lambda ()
`(,(lsp-package-path 'svelte-language-server)
"--stdio")))
:activation-fn (lambda (file-name _mode)
(string= (f-ext file-name)
"svelte"))
:initialization-options
(lambda ()
(list :config (ht-get* (lsp-configuration-section "svelte.plugin")
"svelte"
"plugin")
:prettierConfig (lsp-configuration-section "prettier")
:emmetConfig (lsp-configuration-section "emmet")
:typescriptConfig: (list :typescript (lsp-configuration-section "typescript")
:javascript (lsp-configuration-section "javascript"))
:dontFilterIncompleteCompletions t))
:server-id 'svelte-ls
:download-server-fn (lambda (_client callback error-callback _update?)
(lsp-package-ensure 'svelte-language-server callback error-callback))
:initialized-fn
(lambda (workspace)
(with-lsp-workspace workspace
(lsp--set-configuration
(ht-merge (lsp-configuration-section "svelte")
(lsp-configuration-section "javascript")
(lsp-configuration-section "typescript")))
(lsp--server-register-capability
(lsp-make-registration
:id "js/ts/id"
:method "workspace/didChangeWatchedFiles"
:register-options? (lsp-make-did-change-watched-files-registration-options
:watchers
(vector (lsp-make-file-system-watcher :glob-pattern "**/*.js")
(lsp-make-file-system-watcher :glob-pattern "**/*.ts")))))))))
(lsp-consistency-check lsp-svelte)
(provide 'lsp-svelte)
;;; lsp-svelte.el ends here