ElixirLS - the Elixir Language Server

Thanks for your tips, but I cannot get it to work…

So when sublime starts the elixir-ls server it outputs this in the console:

startup, version: 3200 linux x64 channel: stable
executable: /opt/sublime_text/sublime_text
working dir: /
packages path: /home/elixir/.config/sublime-text-3/Packages
state path: /home/elixir/.config/sublime-text-3/Local
zip path: /opt/sublime_text/Packages
zip path: /home/elixir/.config/sublime-text-3/Installed Packages
ignored_packages: ["Vintage"]
pre session restore time: 0.124293
startup time: 0.169236
git: tracking working dir /home/elixir/workspace/elixir-for-programmers
first paint time: 0.197519
reloading plugin Default.arithmetic
reloading plugin Default.auto_indent_tag
reloading plugin Default.block
reloading plugin Default.colors
reloading plugin Default.comment
reloading plugin Default.convert_color_scheme
reloading plugin Default.convert_syntax
reloading plugin Default.copy_path
reloading plugin Default.detect_indentation
reloading plugin Default.echo
reloading plugin Default.exec
reloading plugin Default.fold
reloading plugin Default.font
reloading plugin Default.goto_line
reloading plugin Default.history_list
reloading plugin Default.indentation
reloading plugin Default.install_package_control
reloading plugin Default.kill_ring
reloading plugin Default.mark
reloading plugin Default.new_templates
reloading plugin Default.open_context_url
reloading plugin Default.open_in_browser
reloading plugin Default.pane
reloading plugin Default.paragraph
reloading plugin Default.paste_from_history
reloading plugin Default.profile
reloading plugin Default.quick_panel
reloading plugin Default.rename
reloading plugin Default.run_syntax_tests
reloading plugin Default.save_on_focus_lost
reloading plugin Default.scroll
reloading plugin Default.set_unsaved_view_name
reloading plugin Default.settings
reloading plugin Default.show_scope_name
reloading plugin Default.side_bar
reloading plugin Default.sort
reloading plugin Default.switch_file
reloading plugin Default.symbol
reloading plugin Default.transform
reloading plugin Default.transpose
reloading plugin Default.ui
reloading plugin CSS.css_completions
reloading plugin Diff.diff
reloading plugin HTML.encode_html_entities
reloading plugin HTML.html_completions
reloading plugin ShellScript.ShellScript
reloading plugin 0_package_control_loader.00-package_control
reloading plugin 0_package_control_loader.01-pygments
reloading plugin 0_package_control_loader.50-markupsafe
reloading plugin 0_package_control_loader.50-pymdownx
reloading plugin 0_package_control_loader.50-python-markdown
reloading plugin 0_package_control_loader.50-pyyaml
reloading plugin 0_package_control_loader.51-python-jinja2
reloading plugin 0_package_control_loader.55-mdpopups
reloading plugin Package Control.1_reloader
reloading plugin Package Control.2_bootstrap
reloading plugin Package Control.Package Control
reloading plugin LSP.boot
plugins loaded
LSP: global configs ['lsp-tsserver=False', 'javascript-typescript-langserver=False', 'reason=False', 'haskell-ide-engine=False', 'eslint=False', 'elixir-ls=True', 'clangd=False', 'jdtls=False', 'ocaml=False', 'pyls=False', 'polymer-ide=False', 'typescript-language-server=False', 'rls=False', 'cquery=False', 'phpls=False', 'golsp=False']
LSP: window 2 starting 1 initial views
Package Control: Skipping automatic upgrade, last run at 2019-04-06 10:48:14, next run at 2019-04-06 11:48:14 or after
LSP: window 2 requests elixir-ls for /home/elixir/workspace/elixir-for-programmers/hangman/lib/hangman.ex
LSP: starting in /home/elixir/workspace/elixir-for-programmers
LSP: starting ['elixir-ls']
LSP:  --> initialize
LSP: window 2 added session elixir-ls
server: warning: variable "deps" does not exist and is being expanded to "deps()", please use parentheses to remove the ambiguity or change the variable name
server: /home/elixir/elixir-ls/deps/erl2ex/mix.exs:14
server: 
server: warning: variable "docs" does not exist and is being expanded to "docs()", please use parentheses to remove the ambiguity or change the variable name
server: /home/elixir/elixir-ls/deps/erl2ex/mix.exs:15
server: 
server: warning: variable "description" does not exist and is being expanded to "description()", please use parentheses to remove the ambiguity or change the variable name
server: /home/elixir/elixir-ls/deps/erl2ex/mix.exs:16
server: 
server: warning: variable "package" does not exist and is being expanded to "package()", please use parentheses to remove the ambiguity or change the variable name
server: /home/elixir/elixir-ls/deps/erl2ex/mix.exs:17
server: 

@JakeBecker does it look ok the start of the server to you?

But I cannot get it to work with this LSP settings:

{
	"auto_show_diagnostics_panel_level": 4,
	"clients":
	{
		"elixir-ls":
		{
			"command":
			[
				"elixir-ls"
			],
			"enabled": true,
			"languageId": "elixir",
			"scopes":
			[
				"source.elixir"
			],
			"syntaxes":
			[
				"Packages/ElixirSyntax/Elixir.sublime-syntax"
			]
		}
	},
	"diagnostics_highlight_style": "box",
	"log_debug": true,
	"log_payloads": true,
	"log_stderr": true,
	"only_show_lsp_completions": true,
	"resolve_completion_for_snippets": true,
	"show_code_actions_bulb": true,
	"show_diagnostics_phantoms": true,
	"show_diagnostics_severity_level": 4
}

My bash script to start elixir-ls the is in my path at ~/bin:

#!/bin/bash

set -eu

cd ~/elixir-ls && mix run --no-halt

So if I start it form the command line:

╭─elixir@043149b4ce3c ~  
╰─$ elixir-ls
warning: variable "deps" does not exist and is being expanded to "deps()", please use parentheses to remove the ambiguity or change the variable name
  /home/elixir/elixir-ls/deps/erl2ex/mix.exs:14

warning: variable "docs" does not exist and is being expanded to "docs()", please use parentheses to remove the ambiguity or change the variable name
  /home/elixir/elixir-ls/deps/erl2ex/mix.exs:15

warning: variable "description" does not exist and is being expanded to "description()", please use parentheses to remove the ambiguity or change the variable name
  /home/elixir/elixir-ls/deps/erl2ex/mix.exs:16

warning: variable "package" does not exist and is being expanded to "package()", please use parentheses to remove the ambiguity or change the variable name
  /home/elixir/elixir-ls/deps/erl2ex/mix.exs:17

  Warning: the `dialyxir` application's start function was called, which likely means you
  did not add the dependency with the `runtime: false` flag. This is not recommended because
  it will mean that unnecessary applications are started, and unnecessary applications are most
  likely being added to your PLT file, increasing build time.
  Please add `runtime: false` in your `mix.exs` dependency section e.g.:
  {:dialyxir, "~> 0.5", only: [:dev], runtime: false}

It does not give me back the shell prompt… is that the expected behaviour @JakeBecker?

Troubleshooting

Sublime version:

╭─elixir@043149b4ce3c ~  
╰─$ subl --version                                                                                                                              127 ↵
Sublime Text Build 3200

Elixir version:

╭─elixir@043149b4ce3c ~  
╰─$ elixir --version                                                                                                                            
Erlang/OTP 21 [erts-10.3.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe]

Elixir 1.7.4 (compiled with Erlang/OTP 21)

Checking the syntax package to use in settings:

>>> sublime.active_window().active_view().settings().get("syntax")
'Packages/ElixirSyntax/Elixir.sublime-syntax'

So this is the same I have declared in LSP settings, and I already tried to use a different package for syntax, but makes no difference to get LSP working.

What bothers me is that I cannot find that file:

╭─elixir@043149b4ce3c ~  
╰─$ l ~/.config/sublime-text-3/Packages/ElixirSyntax/Elixir.sublime-syntax
ls: cannot access '/home/elixir/.config/sublime-text-3/Packages/ElixirSyntax/Elixir.sublime-syntax': No such file or directory
╭─elixir@043149b4ce3c ~  
╰─$ l ~/.config/sublime-text-3/Packages/                                                                                                          
total 56K
drwxr-xr-x 1 elixir elixir 4.0K Apr  5 22:18 .
drwxr-xr-x 1 elixir elixir 4.0K Apr  5 22:16 ..
drwxr-xr-x 1 elixir elixir 4.0K Apr  5 21:59 LSP
drwxr-xr-x 3 elixir elixir 4.0K Apr  5 22:18 markupsafe
drwxr-xr-x 6 elixir elixir 4.0K Apr  5 22:18 mdpopups
drwxr-xr-x 3 elixir elixir 4.0K Apr  5 22:18 pygments
drwxr-xr-x 3 elixir elixir 4.0K Apr  5 22:18 pymdownx
drwxr-xr-x 3 elixir elixir 4.0K Apr  5 22:18 python-jinja2
drwxr-xr-x 3 elixir elixir 4.0K Apr  5 22:18 python-markdown
drwxr-xr-x 4 elixir elixir 4.0K Apr  5 22:18 pyyaml
drwx------ 3 elixir elixir 4.0K Apr  5 22:20 User

So in the packages folder I don’t have the ElixirSyntax package, but is installed:

╭─elixir@043149b4ce3c ~  
╰─$ l ~/.config/sublime-text-3/Installed\ Packages 
total 304K
drwx------ 2 elixir elixir 4.0K Apr  6 11:21 .
drwxr-xr-x 1 elixir elixir 4.0K Apr  5 22:16 ..
-rw-r--r-- 1 elixir elixir 3.9K Apr  5 22:18 0_package_control_loader.sublime-package
-rw-r--r-- 1 elixir elixir 7.8K Apr  6 11:21 ElixirSyntax.sublime-package
-rw-r--r-- 1 elixir elixir 280K Apr  5 22:13 Package Control.sublime-package

and I can see cache for it:

╭─elixir@043149b4ce3c ~  
╰─$ l ~/.config/sublime-text-3/Cache/ElixirSyntax
total 40K
drwx------  2 elixir elixir 4.0K Apr  6 11:21 .
drwx------ 51 elixir elixir 4.0K Apr  6 11:21 ..
-rw-r--r--  1 elixir elixir 4.4K Apr  6 11:21 Elixir.sublime-syntax.cache
-rw-r--r--  1 elixir elixir  15K Apr  6 11:21 Elixir.sublime-syntax.rcache
-rw-r--r--  1 elixir elixir 4.2K Apr  6 11:21 HTML (EEx).sublime-syntax.cache

Am I missing something in my steps?

P.S: This is running from docker with Debian, but this should not be the problem.