diff options
Diffstat (limited to 'elpa/lsp-mode-20220505.630/lsp-ada.el')
-rw-r--r-- | elpa/lsp-mode-20220505.630/lsp-ada.el | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/elpa/lsp-mode-20220505.630/lsp-ada.el b/elpa/lsp-mode-20220505.630/lsp-ada.el new file mode 100644 index 0000000..0de430a --- /dev/null +++ b/elpa/lsp-mode-20220505.630/lsp-ada.el @@ -0,0 +1,106 @@ +;;; lsp-ada.el --- description -*- lexical-binding: t; -*- + +;; Copyright (C) 2020 emacs-lsp maintainers + +;; Author: emacs-lsp maintainers +;; Keywords: lsp, ada + +;; 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 Clients for the Ada Programming Language + +;;; Code: + +(require 'lsp-mode) + +(defgroup lsp-ada nil + "Settings for Ada Language Server." + :group 'tools + :tag "Language Server" + :package-version '(lsp-mode . "6.2")) + +(defcustom-lsp lsp-ada-project-file "default.gpr" + "Set the project file full path to configure the language server with. + The ~ prefix (for the user home directory) is supported. + See https://github.com/AdaCore/ada_language_server for a per-project + configuration example." + :type 'string + :group 'lsp-ada + :package-version '(lsp-mode . "6.2") + :lsp-path "ada.projectFile") + +(defcustom-lsp lsp-ada-option-charset "UTF-8" + "The charset to use by the Ada Language server. Defaults to 'UTF-8'." + :type 'string + :group 'lsp-ada + :package-version '(lsp-mode . "6.2") + :lsp-path "ada.defaultCharset") + +(defcustom-lsp lsp-ada-enable-diagnostics t + "A boolean to disable diagnostics. Defaults to true." + :type 'boolean + :group 'lsp-ada + :package-version '(lsp-mode . "6.2") + :lsp-path "ada.enableDiagnostics") + +(defcustom lsp-ada-als-executable "ada_language_server" + "Command to start the Ada language server." + :group 'lsp-ada + :risky t + :type 'file) + +(defcustom lsp-ada-alire-executable "alr" + "The alire executable to run when a project is detected." + :type 'string + :group 'lsp-ada + :package-version '(lsp-mode "8.0.1")) + +(defun lsp-ada--environment () + "Add environmental variables if needed." + (let ((project-root (lsp-workspace-root))) + ;; When there is an alire project, include its environment + (when (file-exists-p + (concat (file-name-as-directory project-root) + "alire.toml")) + (let ((alr-executable (executable-find lsp-ada-alire-executable))) + (if alr-executable + ;; Transform output variables to environment + (let ((env-output (shell-command-to-string (concat alr-executable " printenv --unix")))) + (let ((var-strings (split-string env-output "\n"))) + (mapcar (lambda (string) + (if (string-match (rx "export" space (group (one-or-more ascii)) "=" "\"" (group (one-or-more ascii)) "\"") string) + (let ((var-name (match-string 1 string)) + (var-value (match-string 2 string))) + (cons var-name var-value)))) + var-strings))) + (lsp--error "Found alire.toml but the executable %s could not be found" alr-executable)))))) + +(lsp-register-client + (make-lsp-client :new-connection (lsp-stdio-connection lsp-ada-als-executable) + :major-modes '(ada-mode) + :priority -1 + :initialized-fn (lambda (workspace) + (with-lsp-workspace workspace + (lsp--set-configuration + (lsp-configuration-section "ada")))) + :server-id 'ada-ls + :synchronize-sections '("ada") + :environment-fn 'lsp-ada--environment)) + +(lsp-consistency-check lsp-ada) + +(provide 'lsp-ada) +;;; lsp-ada.el ends here |