Skip to content

Commit 2281516

Browse files
committed
Support passing target and env options from LSP
1 parent 8a151e1 commit 2281516

File tree

3 files changed

+42
-3
lines changed

3 files changed

+42
-3
lines changed

Diff for: lib/next_ls.ex

+26-2
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,12 @@ defmodule NextLS do
9191
@impl true
9292
def handle_request(
9393
%Initialize{
94-
params: %InitializeParams{root_uri: root_uri, workspace_folders: workspace_folders, capabilities: caps}
94+
params: %InitializeParams{
95+
root_uri: root_uri,
96+
workspace_folders: workspace_folders,
97+
capabilities: caps,
98+
initialization_options: init_opts
99+
}
95100
},
96101
lsp
97102
) do
@@ -102,6 +107,15 @@ defmodule NextLS do
102107
%{name: Path.basename(root_uri), uri: root_uri}
103108
end
104109

110+
safe_opt = fn opts, key, default ->
111+
if val = opts[key] in ["", nil], do: default, else: val
112+
end
113+
114+
safe_init_opts = %{
115+
mix_env: safe_opt.(init_opts, "mix_env", "dev"),
116+
mix_target: safe_opt.(init_opts, "mix_target", "host")
117+
}
118+
105119
{:reply,
106120
%InitializeResult{
107121
capabilities: %ServerCapabilities{
@@ -124,7 +138,13 @@ defmodule NextLS do
124138
}
125139
},
126140
server_info: %{name: "Next LS"}
127-
}, assign(lsp, root_uri: root_uri, workspace_folders: workspace_folders, client_capabilities: caps)}
141+
},
142+
assign(lsp,
143+
root_uri: root_uri,
144+
workspace_folders: workspace_folders,
145+
client_capabilities: caps,
146+
init_opts: safe_init_opts
147+
)}
128148
end
129149

130150
def handle_request(%TextDocumentDefinition{params: %{text_document: %{uri: uri}, position: position}}, lsp) do
@@ -530,6 +550,8 @@ defmodule NextLS do
530550
task_supervisor: lsp.assigns.runtime_task_supervisor,
531551
working_dir: working_dir,
532552
uri: uri,
553+
mix_env: lsp.assigns.init_opts.mix_env,
554+
mix_target: lsp.assigns.init_opts.mix_target,
533555
on_initialized: fn status ->
534556
if status == :ready do
535557
Progress.stop(lsp, token, "NextLS runtime for folder #{name} has initialized!")
@@ -643,6 +665,8 @@ defmodule NextLS do
643665
task_supervisor: lsp.assigns.runtime_task_supervisor,
644666
working_dir: working_dir,
645667
uri: uri,
668+
mix_env: lsp.assigns.init_opts.mix_env,
669+
mix_target: lsp.assigns.init_opts.mix_target,
646670
on_initialized: fn status ->
647671
if status == :ready do
648672
Progress.stop(lsp, token, "NextLS runtime for folder #{name} has initialized!")

Diff for: lib/next_ls/runtime.ex

+4-1
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ defmodule NextLS.Runtime do
4949
registry = Keyword.fetch!(opts, :registry)
5050
on_initialized = Keyword.fetch!(opts, :on_initialized)
5151
db = Keyword.fetch!(opts, :db)
52+
mix_env = Keyword.fetch!(opts, :mix_env)
53+
mix_target = Keyword.fetch!(opts, :mix_target)
5254

5355
Registry.register(registry, :runtimes, %{name: name, uri: uri, path: working_dir, db: db})
5456

@@ -86,7 +88,8 @@ defmodule NextLS.Runtime do
8688
env: [
8789
{~c"LSP", ~c"nextls"},
8890
{~c"NEXTLS_PARENT_PID", parent},
89-
{~c"MIX_ENV", ~c"dev"},
91+
{~c"MIX_ENV", ~c"#{mix_env}"},
92+
{~c"MIX_TARGET", ~c"#{mix_target}"},
9093
{~c"MIX_BUILD_ROOT", ~c".elixir-tools/_build"},
9194
{~c"ROOTDIR", false},
9295
{~c"BINDIR", false},

Diff for: test/next_ls/runtime_test.exs

+12
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ defmodule NextLs.RuntimeTest do
6767
parent: self(),
6868
logger: logger,
6969
db: :some_db,
70+
mix_env: "dev",
71+
mix_target: "host",
7072
registry: RuntimeTest.Registry},
7173
restart: :temporary
7274
)
@@ -97,6 +99,8 @@ defmodule NextLs.RuntimeTest do
9799
parent: self(),
98100
logger: logger,
99101
db: :some_db,
102+
mix_env: "dev",
103+
mix_target: "host",
100104
registry: RuntimeTest.Registry},
101105
restart: :temporary
102106
)
@@ -127,6 +131,8 @@ defmodule NextLs.RuntimeTest do
127131
parent: self(),
128132
logger: logger,
129133
db: :some_db,
134+
mix_env: "dev",
135+
mix_target: "host",
130136
registry: RuntimeTest.Registry}
131137
)
132138

@@ -153,6 +159,8 @@ defmodule NextLs.RuntimeTest do
153159
parent: self(),
154160
logger: logger,
155161
db: :some_db,
162+
mix_env: "dev",
163+
mix_target: "host",
156164
registry: RuntimeTest.Registry}
157165
)
158166

@@ -180,6 +188,8 @@ defmodule NextLs.RuntimeTest do
180188
parent: self(),
181189
logger: logger,
182190
db: :some_db,
191+
mix_env: "dev",
192+
mix_target: "host",
183193
registry: RuntimeTest.Registry}
184194
)
185195

@@ -232,6 +242,8 @@ defmodule NextLs.RuntimeTest do
232242
parent: self(),
233243
logger: logger,
234244
db: :some_db,
245+
mix_env: "dev",
246+
mix_target: "host",
235247
registry: RuntimeTest.Registry}
236248
)
237249

0 commit comments

Comments
 (0)