diff options
Diffstat (limited to 'elpa/lsp-mode-20220505.630/lsp-terraform.el')
-rw-r--r-- | elpa/lsp-mode-20220505.630/lsp-terraform.el | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/elpa/lsp-mode-20220505.630/lsp-terraform.el b/elpa/lsp-mode-20220505.630/lsp-terraform.el new file mode 100644 index 0000000..9309fd9 --- /dev/null +++ b/elpa/lsp-mode-20220505.630/lsp-terraform.el @@ -0,0 +1,122 @@ +;;; lsp-terraform.el --- Terraform Client settings -*- lexical-binding: t; -*- + +;; Copyright (C) 2019 Ross Donaldson + +;; Author: Ross Donaldson +;; Keywords: terraform 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: + +;; LSP client for Terraform + +;;; Code: + +(require 'lsp-mode) + + +;; terraform-lsp + +(defgroup lsp-terraform nil + "LSP support for Terraform, using terraform-lsp" + :group 'lsp-mode + :link '(url-link "https://github.com/juliosueiras/terraform-lsp") + :package-version `(lsp-mode . "6.2")) + +(defcustom lsp-terraform-server "terraform-lsp" + "Path to the `terraform-lsp' binary." + :group 'lsp-terraform + :risky t + :type '(choice + (file :tag "File") + (repeat string)) + :package-version `(lsp-mode . "6.2")) + +(defcustom lsp-terraform-enable-logging nil + "If non-nil, enable `terraform-ls''s native logging." + :group 'lsp-terraform + :risky t + :type 'boolean + :package-version `(lsp-mode . "6.2")) + + +(defun lsp-terraform--make-launch-cmd () + (-let [base (if (stringp lsp-terraform-server) + `(,lsp-terraform-server) + lsp-terraform-server)] + (when lsp-terraform-enable-logging + (push "-enable-log-file" base)) + base)) + +(lsp-register-client + (make-lsp-client :new-connection (lsp-stdio-connection #'lsp-terraform--make-launch-cmd) + :major-modes '(terraform-mode) + :priority -1 + :server-id 'tfls)) + + +;; terraform-ls + +(defgroup lsp-terraform-ls nil + "LSP support for Terraform, using terraform-ls from Hashicorp." + :group 'lsp-mode + :link '(url-link "https://github.com/hashicorp/terraform-ls") + :package-version `(lsp-mode . "8.0.1")) + +(defcustom lsp-terraform-ls-server "terraform-ls" + "Path to the `terraform-ls' binary." + :group 'lsp-terraform-ls + :risky t + :type '(choice + (file :tag "File") + (repeat string)) + :package-version `(lsp-mode . "8.0.1")) + +(defun lsp-terraform-ls--make-launch-cmd () + `(,lsp-terraform-ls-server "serve")) + +(lsp-register-client + (make-lsp-client :new-connection (lsp-stdio-connection #'lsp-terraform-ls--make-launch-cmd) + :major-modes '(terraform-mode) + :priority 1 + :server-id 'tfmls)) + +(defun lsp-terraform-ls-validate () + "Execute terraform validate on project root." + (interactive) + (lsp-request + "workspace/executeCommand" + (list :command "terraform-ls.terraform.validate" + :arguments (vector (format "uri=%s" (lsp--path-to-uri (lsp-workspace-root)))) + ) + :no-wait t + :no-merge t)) + +(defun lsp-terraform-ls-init () + "Execute terraform init on project root. + +This is a synchronous action." + (interactive) + (lsp-request + "workspace/executeCommand" + (list :command "terraform-ls.terraform.init" + :arguments (vector (format "uri=%s" (lsp--path-to-uri (lsp-workspace-root))))) + :no-wait nil + :no-merge t)) + +(lsp-consistency-check lsp-terraform) + +(provide 'lsp-terraform) +;;; lsp-terraform.el ends here |