#+TITLE:   lang/lua
#+DATE:    Jun 3, 2020
#+SINCE:   v3.0
#+STARTUP: inlineimages nofold

* Table of Contents :TOC_3:noexport:
- [[#description][Description]]
  - [[#maintainers][Maintainers]]
  - [[#module-flags][Module Flags]]
  - [[#plugins][Plugins]]
- [[#prerequisites][Prerequisites]]
  - [[#language-server-protocol-servers][Language Server Protocol servers]]
    - [[#lsp-mode][LSP-mode]]
    - [[#eglot][Eglot]]
- [[#features][Features]]
- [[#configuration][Configuration]]
- [[#troubleshooting][Troubleshooting]]
  - [[#install-lua-language-server][Install lua-language-server]]

* Description
Adds Lua support to Doom Emacs
# A summary of what this module does.

+ REPL
+ Love2D specific functions
+ Moonscript support

** Maintainers
This module has no dedicated maintainers.

** Module Flags
+ =+moonscript= Moonscript language support
+ =+fennel= Fennel language support
+ =+lsp= Language Server Protocol support

** Plugins
# A list of linked plugins
+ [[https://github.com/immerrr/lua-mode][lua-mode]]
+ [[https://github.com/k2052/moonscript-mode][moonscript-mode]] (=+moonscript=)
+ [[https://gitlab.com/technomancy/fennel-mode][fennel-mode]] (=+fennel=)

* Prerequisites
** Language Server Protocol servers
LSP server support depends on which flavor of the =:tools lsp= module you have
installed (Eglot or LSP-mode).

*** LSP-mode
Three servers are supported, ordered from highest to lowest priority:

+ [[https://github.com/EmmyLua/EmmyLua-LanguageServer][EmmyLua-LanguageServer]] :: Must be in =~/.emacs.d/.local/etc/lsp/EmmyLua-LS-all.jar=. See ~lsp-clients-emmy-lua-jar-path~ variable to change this.
+ [[https://github.com/sumneko/lua-language-server][Sumneko language server]] (lua-language-server) :: Must be in
  =~/.config/emacs/.local/etc/lsp/lua-language-server/=. See
  ~lsp-clients-lua-language-server-bin~ variable to change this.
+ [[https://github.com/Alloyed/lua-lsp][lua-lsp]] :: Must be available in =~/.luarocks/bin/lua-lsp=. See
  ~lsp-clients-lua-lsp-server-install-dir~ variable to change this.

[[https://emacs-lsp.github.io/lsp-mode/page/lsp-emmy-lua/][LSP-mode documentation]] has more information about setting up the server and the
configuration variables correctly.

*** Eglot
Eglot currently only supports one of the above servers out of the box:

+ [[https://github.com/sumneko/lua-language-server][Sumneko language server]] (lua-language-server) :: Must be in
  =~/.config/emacs/.local/etc/lsp/lua-language-server/=. See
  ~+lua-lsp-dir~ variable to change this.

* TODO Features
# An in-depth list of features, how to use them, and their dependencies.

* Configuration
- lua-lsp-dir :: This must be set when using =+lsp= and using
  [[https://github.com/sumneko/lua-language-server][lua-language-server]]. This controls where the repository has been cloned and
  built to finish the configuration of the server.

* Troubleshooting
** Install lua-language-server
A [[https://github.com/sumneko/lua-language-server/issues/60][catch-all issue]] has been created to gather help for installing
lua-language-server on non-VSCode platforms.
