diff options
Diffstat (limited to 'elpa/lsp-mode-20220505.630/lsp-json.el')
-rw-r--r-- | elpa/lsp-mode-20220505.630/lsp-json.el | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/elpa/lsp-mode-20220505.630/lsp-json.el b/elpa/lsp-mode-20220505.630/lsp-json.el new file mode 100644 index 0000000..8380001 --- /dev/null +++ b/elpa/lsp-mode-20220505.630/lsp-json.el @@ -0,0 +1,131 @@ +;;; lsp-json.el --- vscode-json-languageserver integration -*- lexical-binding: t; -*- + +;; Copyright (C) 2019 Kien Nguyen + +;; Author: kien.n.quang at gmail.com +;; Keywords: lsp + +;; 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: + +;; + +;;; Code: + +(require 'lsp-mode) +(require 'ht) +(require 'url) +(require 'url-util) + +(defgroup lsp-json nil + "LSP support for JSON, using vscode's built-in language server." + :group 'lsp-mode + :link '(url-link "https://github.com/microsoft/vscode/tree/main/extensions/json-language-features/server") + :package-version '(lsp-mode . "6.3")) + +(defcustom lsp-json-schemas nil + "Associate schemas to JSON files in the current project" + :type '(repeat alist) + :group 'lsp-json + :package-version '(lsp-mode . "6.3")) + +(defcustom lsp-http-proxy nil + "The URL of the proxy server to use when fetching schema." + :type 'string + :group 'lsp-json + :package-version '(lsp-mode . "6.3")) + +(defcustom lsp-http-proxyStrictSSL t + "The URL of the proxy server to use when fetching schema." + :type 'boolean + :group 'lsp-json + :package-version '(lsp-mode . "6.3")) + +(lsp-register-custom-settings + '(("json.schemas" lsp-json-schemas) + ("http.proxy" lsp-http-proxy) + ("http.proxyStrictSSL" lsp-http-proxyStrictSSL))) + +(defvar lsp-json--extra-init-params + `(:provideFormatter t + :handledSchemaProtocols ["file" "http" "https"])) + +(defvar lsp-json--schema-associations + `(:/*.css-data.json ["https://raw.githubusercontent.com/Microsoft/vscode-css-languageservice/master/docs/customData.schema.json"] + :/package.json ["http://json.schemastore.org/package"] + :/*.html-data.json ["https://raw.githubusercontent.com/Microsoft/vscode-html-languageservice/master/docs/customData.schema.json"] + :/*.schema.json ["http://json-schema.org/draft-07/schema#"] + :/bower.json ["http://json.schemastore.org/bower"] + :/composer.json ["http://json.schemastore.org/composer"] + :/tsconfig.json ["http://json.schemastore.org/tsconfig"] + :/tsconfig.*.json ["http://json.schemastore.org/tsconfig"] + :/typings.json ["http://json.schemastore.org/typings"] + :/.bowerrc ["http://json.schemastore.org/bowerrc"] + :/.babelrc ["http://json.schemastore.org/babelrc"] + :/.babelrc.json ["http://json.schemastore.org/babelrc"] + :/babel.config.json ["http://json.schemastore.org/babelrc"] + :/jsconfig.json ["http://json.schemastore.org/jsconfig"] + :/jsconfig.*.json ["http://json.schemastore.org/jsconfig"] + :/project.json ["http://json.schemastore.org/project"] + :/omnisharp.json ["http://json.schemastore.org/omnisharp"] + :/.eslintrc.json ["http://json.schemastore.org/eslintrc"] + :/.eslintrc ["http://json.schemastore.org/eslintrc"]) + "Default json schemas.") + +(defun lsp-json--get-content (_workspace uri callback) + "Get content from URI." + (ignore-errors + (url-retrieve uri + (lambda (_status callback) + (goto-char (point-min)) + (re-search-forward "\n\n" nil 'noerror) + (funcall + callback + (decode-coding-string (buffer-substring (point) (point-max)) + 'utf-8-unix))) + (list callback)))) + +(lsp-dependency 'vscode-json-languageserver + '(:system "vscode-json-language-server") + '(:npm :package "vscode-langservers-extracted" + :path "vscode-json-language-server")) + +(lsp-register-client + (make-lsp-client + :new-connection + (lsp-stdio-connection + (lambda () (list (lsp-package-path 'vscode-json-languageserver) "--stdio"))) + :activation-fn (lsp-activate-on "json" "jsonc") + :server-id 'json-ls + :priority 0 + :multi-root t + :completion-in-comments? t + :initialization-options lsp-json--extra-init-params + :async-request-handlers (ht ("vscode/content" #'lsp-json--get-content)) + :initialized-fn + (lambda (w) + (with-lsp-workspace w + (lsp--set-configuration + (ht-merge (lsp-configuration-section "json") + (lsp-configuration-section "http"))) + (lsp-notify "json/schemaAssociations" lsp-json--schema-associations))) + :download-server-fn + (lambda (_client callback error-callback _update?) + (lsp-package-ensure 'vscode-json-languageserver callback error-callback)))) + +(lsp-consistency-check lsp-json) + +(provide 'lsp-json) +;;; lsp-json.el ends here |