diff options
Diffstat (limited to 'elpa/lsp-mode-20220505.630/lsp-graphql.el')
-rw-r--r-- | elpa/lsp-mode-20220505.630/lsp-graphql.el | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/elpa/lsp-mode-20220505.630/lsp-graphql.el b/elpa/lsp-mode-20220505.630/lsp-graphql.el new file mode 100644 index 0000000..3b1bfba --- /dev/null +++ b/elpa/lsp-mode-20220505.630/lsp-graphql.el @@ -0,0 +1,73 @@ +;;; lsp-graphql.el --- lsp client for graphql -*- lexical-binding: t; -*- + +;; Copyright (C) 2021 Binbin Ye + +;; Author: Binbin Ye +;; Keywords: lsp, graphql + +;; 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: + +;; Support for running graphql lsp. Support multiple server running at the same time when editing tsx/jsx. + +;;; Code: + +(require 'lsp-mode) + +(lsp-dependency 'graphql-language-service-cli + '(:npm :package "graphql-language-service-cli" + :path "graphql-lsp")) + + +(defgroup lsp-graphql nil + "LSP support for the GraphQL, using the graphql-language-service-cli as language server." + :link '(url-link "https://github.com/graphql/graphiql/tree/main/packages/graphql-language-service-cli#readme") + :group 'lsp-mode) + +(defcustom lsp-clients-graphql-server-args '("server" "--method=stream") + "CLI arguments for graphql language server." + :type '(repeat string) + :risky t + :group 'lsp-graphql) + +(defun lsp-graphql-activate-p (filename &optional _) + "Check if the GraphQL language server should be enabled based on FILENAME." + (or (string-match-p (rx (one-or-more anything) "." + (or "ts" "js" "jsx" "tsx" "vue" "graphql" "gql")eos) + filename) + (and (derived-mode-p 'js-mode 'js2-mode 'typescript-mode) + (not (derived-mode-p 'json-mode))))) + +(lsp-register-client + (make-lsp-client :new-connection (lsp-stdio-connection (lambda() + (cons (lsp-package-path 'graphql-language-service-cli) + lsp-clients-graphql-server-args))) + :major-modes '(graphql-mode) + :language-id "graphql" + :server-id 'graphql-lsp + :priority -3 + :add-on? t + :multi-root t + :activation-fn 'lsp-graphql-activate-p + :download-server-fn (lambda (_client callback error-callback _update?) + (lsp-package-ensure + 'graphql-language-service-cli + callback + error-callback)))) + +(lsp-consistency-check lsp-graphql) + +(provide 'lsp-graphql) +;;; lsp-graphql.el ends here |