aboutsummaryrefslogtreecommitdiffstats
path: root/elpa/lsp-mode-20220505.630/lsp-lua.el
diff options
context:
space:
mode:
Diffstat (limited to 'elpa/lsp-mode-20220505.630/lsp-lua.el')
-rw-r--r--elpa/lsp-mode-20220505.630/lsp-lua.el678
1 files changed, 678 insertions, 0 deletions
diff --git a/elpa/lsp-mode-20220505.630/lsp-lua.el b/elpa/lsp-mode-20220505.630/lsp-lua.el
new file mode 100644
index 0000000..3349a61
--- /dev/null
+++ b/elpa/lsp-mode-20220505.630/lsp-lua.el
@@ -0,0 +1,678 @@
+;;; lsp-lua.el --- description -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2020 E. Alexander Barbosa
+
+;; Author: E. Alexander Barbosa <elxbarbosa@outlook.com>
+;; 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 Clients for the Lua Programming Language
+
+;;; Code:
+
+(require 'lsp-mode)
+(require 'f)
+(require 'files)
+
+(defgroup lsp-emmy-lua nil
+ "Lua LSP client, provided by the EmmyLua Language Server."
+ :group 'lsp-mode
+ :version "8.0.0"
+ :link '(url-link "https://github.com/EmmyLua/EmmyLua-LanguageServer"))
+
+(defcustom lsp-clients-emmy-lua-java-path "java"
+ "Java Runtime binary location."
+ :group 'lsp-emmy-lua
+ :version "8.0.0"
+ :risky t
+ :type 'file)
+
+(defcustom lsp-clients-emmy-lua-jar-path (f-join lsp-server-install-dir "EmmyLua-LS-all.jar")
+ "Emmy Lua language server jar file."
+ :group 'lsp-emmy-lua
+ :version "8.0.0"
+ :risky t
+ :type 'file)
+
+(defcustom lsp-clients-emmy-lua-args '("-jar")
+ "Arguments to the Lua Language server."
+ :group 'lsp-emmy-lua
+ :version "8.0.0"
+ :risky t
+ :type '(repeat string))
+
+(defcustom lsp-clients-emmy-lua-command nil
+ "Final command to call the Lua Language server."
+ :group 'lsp-emmy-lua
+ :version "8.0.0"
+ :risky t
+ :type '(repeat string))
+
+(defun lsp-clients-emmy-lua-test ()
+ "Test the Emmy Lua binaries and files."
+ (and (executable-find lsp-clients-emmy-lua-java-path)
+ (f-exists? lsp-clients-emmy-lua-jar-path)))
+
+(lsp-register-client
+ (make-lsp-client
+ :new-connection (lsp-stdio-connection (lambda () (or lsp-clients-emmy-lua-command
+ `(,lsp-clients-emmy-lua-java-path
+ ,@lsp-clients-emmy-lua-args
+ ,lsp-clients-emmy-lua-jar-path)))
+ #'lsp-clients-emmy-lua-test)
+ :major-modes '(lua-mode)
+ :server-id 'emmy-lua
+ :priority -1
+ :notification-handlers (lsp-ht ("emmy/progressReport" #'ignore))))
+
+
+;;; lua-language-server
+(defgroup lsp-lua-language-server nil
+ "Lua LSP client, provided by the Lua Language Server."
+ :group 'lsp-mode
+ :version "8.0.0"
+ :link '(url-link "https://github.com/sumneko/lua-language-server"))
+
+(defcustom lsp-clients-lua-language-server-install-dir (f-join lsp-server-install-dir "lua-language-server/")
+ "Installation directory for Lua Language Server."
+ :group 'lsp-lua-language-server
+ :version "8.0.0"
+ :risky t
+ :type 'directory)
+
+(defcustom lsp-clients-lua-language-server-bin
+ (f-join lsp-clients-lua-language-server-install-dir
+ "extension/server/bin/"
+ (pcase system-type
+ ('gnu/linux "Linux/lua-language-server")
+ ('darwin "macOS/lua-language-server")
+ ('windows-nt "Windows/lua-language-server.exe")
+ (_ "Linux/lua-language-server")))
+ "Location of Lua Language Server."
+ :group 'lsp-lua-language-server
+ :version "8.0.0"
+ :risky t
+ :type 'file)
+
+(defcustom lsp-clients-lua-language-server-main-location
+ (f-join lsp-clients-lua-language-server-install-dir
+ "extension/server/main.lua")
+ "Location of Lua Language Server main.lua."
+ :group 'lsp-lua-language-server
+ :version "8.0.0"
+ :risky t
+ :type 'file)
+
+(defcustom lsp-clients-lua-language-server-args '("-E")
+ "Arguments to run the Lua Language server."
+ :group 'lsp-lua-language-server
+ :version "8.0.0"
+ :risky t
+ :type '(repeat string))
+
+(defcustom lsp-clients-lua-language-server-command nil
+ "Command to start Lua Language server."
+ :group 'lsp-lua-language-server
+ :type '(repeat string))
+
+
+(defun lsp-clients-lua-language-server-test ()
+ "Test Lua language server binaries and files."
+ (and (f-exists? lsp-clients-lua-language-server-main-location)
+ (f-exists? lsp-clients-lua-language-server-bin)))
+
+(defcustom lsp-lua-color-mode "Semantic"
+ "Color mode."
+ :type '(choice (:tag "Grammar" "Semantic"))
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-completion-call-snippet "Disable"
+ "Shows function call snippets."
+ :type '(choice (:tag "Disable" "Both" "Replace"))
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-completion-display-context 6
+ "Previewing the relevant code snippet of the suggestion may help you
+understand the usage of the suggestion.
+
+The number set indicates the number of intercepted lines in the code
+fragment. If it is set to `0`, this feature can be disabled."
+ :type 'number
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-completion-enable t
+ "Enable completion."
+ :type 'boolean
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-completion-keyword-snippet "Replace"
+ "Shows keyword syntax snippets."
+ :type '(choice (:tag "Disable" "Both" "Replace"))
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-completion-workspace-word t
+ "Show words within the workspace."
+ :type 'boolean
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-develop-debugger-port 11412
+ "Listen port of debugger."
+ :type 'number
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-develop-debugger-wait nil
+ "Suspend before debugger connects."
+ :type 'boolean
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-develop-enable nil
+ "Developer mode. Do not enable, performance will be affected."
+ :type 'boolean
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-diagnostics-disable nil
+ "Disabled diagnostic (Use code in hover brackets).
+```json
+\"Lua.diagnostics.disable\" : [
+\"unused-local\",
+\"lowercase-global\"
+]
+```"
+ :type 'lsp-string-vector
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-diagnostics-enable t
+ "Enable diagnostics."
+ :type 'boolean
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-diagnostics-globals nil
+ "Defined global variables.
+```json
+\"Lua.diagnostics.globals\" : [
+\"GLOBAL1\",
+\"GLOBAL2\"
+]
+```"
+ :type 'lsp-string-vector
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-diagnostics-needed-file-status nil
+ "If you want to check only opened files, choice Opened; else choice Any.
+```json
+\"Lua.diagnostics.neededFileStatus\" : {
+\"ambiguity-1\" : \"Any\",
+\"circle-doc-class\" : \"Opened\"
+}
+```"
+ :type 'alist
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-diagnostics-severity nil
+ "Modified diagnostic severity.
+```json
+\"Lua.diagnostics.severity\" : {
+\"redefined-local\" : \"Warning\",
+\"emmy-lua\" : \"Hint\"
+}
+```"
+ :type 'alist
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-diagnostics-workspace-delay 0
+ "Latency (milliseconds) for workspace diagnostics. When you start the
+workspace, or edit any file, the entire workspace will be re-diagnosed in the
+background. Set to negative to disable workspace diagnostics."
+ :type 'number
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-diagnostics-workspace-rate 100
+ "Workspace diagnostics run rate (%). Decreasing this value reduces CPU usage,
+but also reduces the speed of workspace diagnostics. The diagnosis of the file
+you are currently editing is always done at full speed and is not affected by
+this setting."
+ :type 'number
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-hint-enable nil
+ "Enable hint."
+ :type 'boolean
+ :package-version '(lsp-mmode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-hint-param-name t
+ "Hint parameter name when the parameter called is literal."
+ :type 'boolean
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-hint-param-type t
+ "Show type hints at the parameter of the function."
+ :type 'boolean
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-hint-set-type nil
+ "Hint type at assignment operation."
+ :type 'boolean
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-hover-enable t
+ "Enable hover."
+ :type 'boolean
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-hover-field-infer 3000
+ "When hovering to view a table, type infer will be performed for each field.
+When the accumulated time of type infer reaches the set value (MS), the type
+infer of subsequent fields will be skipped."
+ :type 'number
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-hover-preview-fields 100
+ "When hovering to view a table, limits the maximum number of previews for
+fields."
+ :type 'number
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-hover-view-number t
+ "Hover to view numeric content (only if literal is not decimal)."
+ :type 'boolean
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-hover-view-string t
+ "Hover to view the contents of a string (only if the literal contains an
+escape character)."
+ :type 'boolean
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-hover-view-string-max 1000
+ "The maximum length of a hover to view the contents of a string."
+ :type 'number
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-intelli-sense-search-depth 0
+ "Set the search depth for IntelliSense. Increasing this value increases
+accuracy, but decreases performance. Different workspace have different
+tolerance for this setting. Please adjust it to the appropriate value."
+ :type 'number
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-runtime-file-encoding "utf8"
+ "File encoding. The 'ansi' option is only available under the 'Windows'
+platform."
+ :type '(choice (:tag "utf8" "ansi"))
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-runtime-nonstandard-symbol nil
+ "Supports non-standard symbols. Make sure that your runtime environment
+supports these symbols."
+ :type 'lsp-string-vector
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-runtime-path
+ ["?.lua" "?/init.lua" "?/?.lua"]
+ "`package.path`."
+ :type 'lsp-string-vector
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-runtime-plugin nil
+ "(Proposed) Plugin path. Default is `.vscode/lua/plugin.lua`"
+ :type 'file
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-runtime-special nil
+ "The custom global variables are regarded as some special built-in variables,
+and the language server will provide special support.
+```json
+\"Lua.runtime.special\" : {
+\"include\" : \"require\"
+}
+```"
+ :type 'alist
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-runtime-unicode-name nil
+ "Allows Unicode characters in name."
+ :type 'boolean
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-runtime-version "Lua 5.4"
+ "Lua runtime version."
+ :type '(choice (:tag "Lua 5.1" "Lua 5.2" "Lua 5.3" "Lua 5.4" "LuaJIT"))
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-signature-help-enable t
+ "Enable signature help."
+ :type 'boolean
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-telemetry-enable nil
+ "Enable telemetry to send your editor information and error logs over the
+network."
+ :type 'boolean
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-window-progress-bar t
+ "Show progress bar in status bar."
+ :type 'boolean
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-window-status-bar t
+ "Show extension status in status bar."
+ :type 'boolean
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-workspace-ignore-dir
+ [".vscode"]
+ "Ignored directories (Use `.gitignore` grammar).
+```json
+\"Lua.workspace.ignoreDir\" : [
+\"temp/*.*\",
+\"!temp/*.lua\"
+]
+```"
+ :type 'lsp-string-vector
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-workspace-ignore-submodules t
+ "Ignore submodules."
+ :type 'boolean
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-workspace-library nil
+ "Load external library.
+
+This feature can load external Lua files, which can be used for definition,
+automatic completion and other functions. Note that the language server does
+not monitor changes in external files and needs to restart if the external
+files are modified. The following example shows loaded files in `C:/lua`
+and `../lib` ,exclude `../lib/temp`.
+
+```json
+\"Lua.workspace.library\": {
+\"C:/lua\": true,
+\"../lib\": [
+\"temp/*\"
+]
+}
+```"
+ :type 'alist
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-workspace-max-preload 1000
+ "Max preloaded files."
+ :type 'number
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-workspace-preload-file-size 100
+ "Skip files larger than this value (KB) when preloading."
+ :type 'number
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-workspace-use-git-ignore t
+ "Ignore files list in `.gitignore` ."
+ :type 'boolean
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-files-associations nil
+ "Files.associations."
+ :type 'alist
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(defcustom lsp-lua-files-exclude nil
+ "Files.exclude."
+ :type 'alist
+ :package-version '(lsp-mode . "8.0.0")
+ :group 'lsp-lua-language-server)
+
+(lsp-register-custom-settings
+ '(("files.associations" lsp-lua-files-associations t)
+ ("files.exclude" lsp-lua-files-exclude t)
+ ("Lua.workspace.useGitIgnore" lsp-lua-workspace-use-git-ignore t)
+ ("Lua.workspace.preloadFileSize" lsp-lua-workspace-preload-file-size)
+ ("Lua.workspace.maxPreload" lsp-lua-workspace-max-preload)
+ ("Lua.workspace.library" lsp-lua-workspace-library)
+ ("Lua.workspace.ignoreSubmodules" lsp-lua-workspace-ignore-submodules t)
+ ("Lua.workspace.ignoreDir" lsp-lua-workspace-ignore-dir)
+ ("Lua.window.statusBar" lsp-lua-window-status-bar t)
+ ("Lua.window.progressBar" lsp-lua-window-progress-bar t)
+ ("Lua.telemetry.enable" lsp-lua-telemetry-enable t)
+ ("Lua.signatureHelp.enable" lsp-lua-signature-help-enable t)
+ ("Lua.runtime.version" lsp-lua-runtime-version)
+ ("Lua.runtime.unicodeName" lsp-lua-runtime-unicode-name nil)
+ ("Lua.runtime.special" lsp-lua-runtime-special)
+ ("Lua.runtime.plugin" lsp-lua-runtime-plugin)
+ ("Lua.runtime.path" lsp-lua-runtime-path)
+ ("Lua.runtime.nonstandardSymbol" lsp-lua-runtime-nonstandard-symbol)
+ ("Lua.runtime.fileEncoding" lsp-lua-runtime-file-encoding)
+ ("Lua.intelliSense.searchDepth" lsp-lua-intelli-sense-search-depth)
+ ("Lua.hover.viewStringMax" lsp-lua-hover-view-string-max)
+ ("Lua.hover.viewString" lsp-lua-hover-view-string t)
+ ("Lua.hover.viewNumber" lsp-lua-hover-view-number t)
+ ("Lua.hover.previewFields" lsp-lua-hover-preview-fields)
+ ("Lua.hover.fieldInfer" lsp-lua-hover-field-infer)
+ ("Lua.hover.enable" lsp-lua-hover-enable t)
+ ("Lua.hint.setType" lsp-lua-hint-set-type nil)
+ ("Lua.hint.paramType" lsp-lua-hint-param-type t)
+ ("Lua.hint.paramName" lsp-lua-hint-param-name t)
+ ("Lua.hint.enable" lsp-lua-hint-enable t)
+ ("Lua.diagnostics.workspaceRate" lsp-lua-diagnostics-workspace-rate)
+ ("Lua.diagnostics.workspaceDelay" lsp-lua-diagnostics-workspace-delay)
+ ("Lua.diagnostics.severity" lsp-lua-diagnostics-severity)
+ ("Lua.diagnostics.neededFileStatus" lsp-lua-diagnostics-needed-file-status)
+ ("Lua.diagnostics.globals" lsp-lua-diagnostics-globals)
+ ("Lua.diagnostics.enable" lsp-lua-diagnostics-enable t)
+ ("Lua.diagnostics.disable" lsp-lua-diagnostics-disable)
+ ("Lua.develop.enable" lsp-lua-develop-enable t)
+ ("Lua.develop.debuggerWait" lsp-lua-develop-debugger-wait t)
+ ("Lua.develop.debuggerPort" lsp-lua-develop-debugger-port)
+ ("Lua.completion.workspaceWord" lsp-lua-completion-workspace-word t)
+ ("Lua.completion.keywordSnippet" lsp-lua-completion-keyword-snippet)
+ ("Lua.completion.enable" lsp-lua-completion-enable t)
+ ("Lua.completion.displayContext" lsp-lua-completion-display-context)
+ ("Lua.completion.callSnippet" lsp-lua-completion-call-snippet)
+ ("Lua.color.mode" lsp-lua-color-mode)))
+
+(defun lsp-lua-language-server-install (client callback error-callback update?)
+ "Download the latest version of lua-language-server and extract it to
+`lsp-lua-language-server-install-dir'."
+ (ignore client update?)
+ (let ((store-path (expand-file-name "vs-lua" lsp-clients-lua-language-server-install-dir)))
+ (lsp-download-install
+ (lambda (&rest _)
+ (set-file-modes lsp-clients-lua-language-server-bin #o0700)
+ (funcall callback))
+ error-callback
+ :url (lsp-vscode-extension-url "sumneko" "lua" "1.17.4")
+ :store-path store-path
+ :decompress :zip)))
+
+(lsp-register-client
+ (make-lsp-client
+ :new-connection (lsp-stdio-connection (lambda () (or lsp-clients-lua-language-server-command
+ `(,lsp-clients-lua-language-server-bin
+ ,@lsp-clients-lua-language-server-args
+ ,lsp-clients-lua-language-server-main-location)))
+ #'lsp-clients-lua-language-server-test)
+ :major-modes '(lua-mode)
+ :priority -2
+ :server-id 'lua-language-server
+ :download-server-fn #'lsp-lua-language-server-install))
+
+
+;;; lua-lsp
+(defgroup lsp-lua-lsp nil
+ "Lua LSP client, provided by the Lua-Lsp."
+ :group 'lsp-mode
+ :version "8.0.0"
+ :link '(url-link "https://github.com/Alloyed/lua-lsp"))
+
+(defcustom lsp-clients-luarocks-bin-dir (f-join (getenv "HOME") ".luarocks/bin/")
+ "LuaRocks bin directory."
+ :group 'lsp-lua-lsp
+ :version "8.0.0"
+ :risky t
+ :type 'directory)
+
+(defcustom lsp-clients-lua-lsp-server-install-dir nil
+ "Installation directory for Lua-Lsp Language Server."
+ :group 'lsp-lua-lsp
+ :version "8.0.0"
+ :risky t
+ :type 'file)
+
+(defun lsp-clients-lua-lsp-test ()
+ "Test Lua-lsp language server files."
+ (and (f-exists? lsp-clients-lua-lsp-server-install-dir)))
+
+(lsp-register-client
+ (make-lsp-client
+ :new-connection (lsp-stdio-connection (lambda ()
+ (or lsp-clients-lua-lsp-server-install-dir
+ (f-join lsp-clients-luarocks-bin-dir "lua-lsp")))
+ #'lsp-clients-lua-lsp-test)
+ :major-modes '(lua-mode)
+ :priority -3
+ :server-id 'lsp-lua-lsp))
+
+;;; lua-roblox-language-server
+(defgroup lsp-lua-roblox-language-server nil
+ "Roblox Lua LSP client, provided by the Roblox Lua Language Server."
+ :group 'lsp-mode
+ :version "8.0.0"
+ :link '(url-link "https://github.com/NightrainsRbx/RobloxLsp"))
+
+(defcustom lsp-lua-roblox-language-server-install-dir (f-join lsp-server-install-dir "lua-roblox-language-server/")
+ "Installation directory for Lua Language Server."
+ :group 'lsp-lua-roblox-language-server
+ :version "8.0.0"
+ :risky t
+ :type 'directory)
+
+(defcustom lsp-lua-roblox-language-server-bin
+ (f-join lsp-lua-roblox-language-server-install-dir
+ "extension/server/bin/"
+ (pcase system-type
+ ('gnu/linux "Linux/lua-language-server")
+ ('darwin "macOS/lua-language-server")
+ ('windows-nt "Windows/lua-language-server.exe")
+ (_ "Linux/lua-language-server")))
+ "Location of Roblox Lua Language Server."
+ :group 'lsp-lua-roblox-language-server
+ :version "8.0.0"
+ :risky t
+ :type 'file)
+
+(defcustom lsp-lua-roblox-language-server-main-location
+ (f-join lsp-lua-roblox-language-server-install-dir
+ "extension/server/main.lua")
+ "Location of Roblox Lua Language Server main.lua."
+ :group 'lsp-lua-roblox-language-server
+ :version "8.0.0"
+ :risky t
+ :type 'file)
+
+(defcustom lsp-lua-roblox-server-download-url
+ (lsp-vscode-extension-url "Nightrains" "robloxlsp" "0.15.8")
+ "Download url for Roblox Lua vscode extension."
+ :group 'lsp-lua-roblox-language-server
+ :version "8.0.0"
+ :type 'string)
+
+(defcustom lsp-lua-roblox-server-store-path
+ (expand-file-name "vs-lua-roblox" lsp-lua-roblox-language-server-install-dir)
+ "Server file name for the vscode extension."
+ :group 'lsp-lua-roblox-language-server
+ :version "8.0.0"
+ :type 'string)
+
+(defun lsp-lua-roblox-language-server-test ()
+ "Test Lua language server binaries and files."
+ (and (f-exists? lsp-lua-roblox-language-server-main-location)
+ (f-exists? lsp-lua-roblox-language-server-bin)))
+
+(defun lsp-lua-roblox-language-server-install (_client callback error-callback _update?)
+ "Download the latest version of lua-language-server and extract it to
+`lsp-lua-roblox-language-server-download-url'."
+ (lsp-download-install
+ (lambda (&rest _)
+ (set-file-modes lsp-lua-roblox-language-server-bin #o0700)
+ (funcall callback))
+ error-callback
+ :url lsp-lua-roblox-server-download-url
+ :store-path lsp-lua-roblox-server-store-path
+ :decompress :zip))
+
+(lsp-register-client
+ (make-lsp-client
+ :new-connection (lsp-stdio-connection (lambda () (or lsp-clients-lua-language-server-command
+ `(,lsp-lua-roblox-language-server-bin
+ ,@lsp-clients-lua-language-server-args
+ ,lsp-lua-roblox-language-server-main-location)))
+ #'lsp-lua-roblox-language-server-test)
+ :major-modes '(lua-mode)
+ :priority -4
+ :server-id 'lua-roblox-language-server
+ :download-server-fn #'lsp-lua-roblox-language-server-install))
+
+(lsp-consistency-check lsp-lua)
+
+(provide 'lsp-lua)
+;;; lsp-lua.el ends here