emacs/code/elpa/lsp-mode-20230823.446/lsp-haxe.el

227 lines
6.5 KiB
EmacsLisp

;;; lsp-haxe.el --- Haxe Client settings -*- lexical-binding: t; -*-
;; Copyright (C) 2019 Yannik Böttcher
;; Author: Yannik Böttcher <yannikboettcher@outlook.de>
;; Keywords:
;; 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-haxe client
;;; Code:
;; adapted from lsp-clangd configuration
(require 'lsp-protocol)
(require 'lsp-mode)
(defgroup lsp-haxe nil
"LSP support for Haxe using the language server provided by vshaxe"
:group 'lsp-mode
:link '(url-link "https://github.com/vshaxe/vshaxe"))
;; Haxe ls is executed via node
(defcustom lsp-clients--haxe-executable "node"
"Haxe ls is executed via node."
:group 'lsp-haxe
:risky t
:type 'file)
;; The server.js is being passed to node as an argument
(defcustom lsp-clients--haxe-server-path (expand-file-name "~/.haxe-language-server/bin/server.js")
"The path to the server.js file."
:group 'lsp-haxe
:risky t
:type 'file)
;; Build the actual Haxe ls command.
(defun lsp-clients--haxe-command ()
"Haxe ls startup command."
`(,lsp-clients--haxe-executable ,lsp-clients--haxe-server-path))
;; https://github.com/yyoncho/lsp-mode/commit/72186e1adc089d772c87ed8f287eb3333b66bfa7
;; This is to force the client to send a didChangeConfiguration Message. Without this, the server won't start, https://github.com/vshaxe/vshaxe/issues/328#issuecomment-471809093
(defcustom lsp-clients--haxe-settings (list :haxe.executable "haxe")
"Lsp clients configuration settings."
:group 'lsp-haxe
:risky t
:type '(repeat string))
;; The build spec for the project.
(defcustom lsp-haxe-hxml "build.hxml"
"The compile file for the haxe project."
:type 'file
:group 'lsp-haxe
:package-version '(lsp-mode . "7.0"))
;; https://github.com/emacs-lsp/lsp-mode/blob/150a933694349df960dc8fd7a15e04f5727e6433/lsp-rust.el#L251
(lsp-defun lsp-clients--haxe-processStart (_workspace (&haxe:ProcessStartNotification :title))
"Handle processStart notification. Just logs PARAMS."
(lsp-log title))
(defcustom lsp-haxe-executable "haxe"
nil
:type 'file
:group 'lsp-haxe)
(defcustom lsp-haxe-configurations nil
nil
:type '(repeat string)
:group 'lsp-haxe)
(defcustom lsp-haxe-display-configurations nil
nil
:type '(repeat string)
:group 'lsp-haxe)
(defcustom lsp-haxe-display-server nil
nil
:type 'string
:group 'lsp-haxe)
(defcustom lsp-haxe-display-port "auto"
nil
:type 'number
:group 'lsp-haxe)
(defcustom lsp-haxe-enable-compilation-server t
nil
:type 'boolean
:group 'lsp-haxe)
(defcustom lsp-haxe-task-presentation
'((echo . t)
(reveal . "always")
(focus . :json-false)
(panel . "shared")
(showReuseMessage . t)
(clear . :json-false))
nil
:type 'plist
:group 'lsp-haxe)
(defcustom lsp-haxe-enable-code-lens t
nil
:type 'boolean
:group 'lsp-haxe)
(defcustom lsp-haxe-enable-diagnostics t
nil
:type 'boolean
:group 'lsp-haxe)
(defcustom lsp-haxe-enable-server-view nil
nil
:type 'boolean
:group 'lsp-haxe)
(defcustom lsp-haxe-enable-methods-view nil
nil
:type 'boolean
:group 'lsp-haxe)
(defcustom lsp-haxe-enable-signature-help-documentation t
nil
:type 'boolean
:group 'lsp-haxe)
(defcustom lsp-haxe-diagnostics-path-filter "${workspaceRoot}"
nil
:type 'string
:group 'lsp-haxe)
(defcustom lsp-haxe-build-completion-cache t
nil
:type 'boolean
:group 'lsp-haxe)
(defcustom lsp-haxe-enable-completion-cache-warning t
nil
:type 'boolean
:group 'lsp-haxe)
(defcustom lsp-haxe-code-generation nil
nil
:type 'string
:group 'lsp-haxe)
(defcustom lsp-haxe-exclude ["zpp_nape"]
nil
:type '(repeat string)
:group 'lsp-haxe)
(defcustom lsp-haxe-postfix-completion nil
nil
:type 'string
:group 'lsp-haxe)
(lsp-register-custom-settings
'(("haxe.hxml" lsp-haxe-hxml)
("haxe.postfixCompletion" lsp-haxe-postfix-completion)
("haxe.exclude" lsp-haxe-exclude)
("haxe.codeGeneration" lsp-haxe-code-generation)
("haxe.enableCompletionCacheWarning" lsp-haxe-enable-completion-cache-warning t)
("haxe.buildCompletionCache" lsp-haxe-build-completion-cache t)
("haxe.diagnosticsPathFilter" lsp-haxe-diagnostics-path-filter)
("haxe.enableSignatureHelpDocumentation" lsp-haxe-enable-signature-help-documentation t)
("haxe.enableMethodsView" lsp-haxe-enable-methods-view t)
("haxe.enableServerView" lsp-haxe-enable-server-view t)
("haxe.enableDiagnostics" lsp-haxe-enable-diagnostics t)
("haxe.enableCodeLens" lsp-haxe-enable-code-lens t)
("haxe.taskPresentation" lsp-haxe-task-presentation)
("haxe.enableCompilationServer" lsp-haxe-enable-compilation-server t)
("haxe.displayPort" lsp-haxe-display-port)
("haxe.displayServer" lsp-haxe-display-server)
("haxe.displayConfigurations" lsp-haxe-display-configurations)
("haxe.configurations" lsp-haxe-configurations)
("haxe.executable" lsp-haxe-executable)))
(lsp-register-client
(make-lsp-client
:new-connection (lsp-stdio-connection #'lsp-clients--haxe-command)
:major-modes '(haxe-mode) ; force didChangeConfiguration message
:initialized-fn
(lambda (workspace)
(with-lsp-workspace workspace
(lsp--set-configuration (lsp-configuration-section "haxe"))))
:priority -1
:server-id 'haxe
:initialization-options
(lambda ()
`(:sendMethodResults t
:haxelibConfig (:executable "haxelib")
:displayServerConfig
( :print (:reusing :json-false :completion :json-false)
:arguments []
:env nil
:path "haxe")
:displayArguments [,lsp-haxe-hxml]))
:notification-handlers
(lsp-ht ("haxe/progressStart" 'lsp-clients--haxe-processStart)
("haxe/progressStop" 'ignore)
("haxe/didDetectOldPreview" 'ignore)
("haxe/didChangeDisplayPort" 'ignore)
("haxe/didRunHaxeMethod" 'ignore)
("haxe/didChangeRequestQueue" 'ignore)
("haxe/cacheBuildFailed" 'ignore))))
(lsp-consistency-check lsp-haxe)
(provide 'lsp-haxe)
;;; lsp-haxe.el ends here