Skip to content

Commit c56518a

Browse files
jjcarstensmhanberg
andauthored
feat: configureable MIX_ENV and MIX_TARGET (#246)
Closes #246 --------- Co-authored-by: Mitchell Hanberg <[email protected]>
1 parent 7099370 commit c56518a

File tree

4 files changed

+57
-3
lines changed

4 files changed

+57
-3
lines changed

lib/next_ls.ex

+40-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,8 @@ defmodule NextLS do
102107
%{name: Path.basename(root_uri), uri: root_uri}
103108
end
104109

110+
{:ok, init_opts} = __MODULE__.InitOpts.validate(init_opts)
111+
105112
{:reply,
106113
%InitializeResult{
107114
capabilities: %ServerCapabilities{
@@ -124,7 +131,13 @@ defmodule NextLS do
124131
}
125132
},
126133
server_info: %{name: "Next LS"}
127-
}, assign(lsp, root_uri: root_uri, workspace_folders: workspace_folders, client_capabilities: caps)}
134+
},
135+
assign(lsp,
136+
root_uri: root_uri,
137+
workspace_folders: workspace_folders,
138+
client_capabilities: caps,
139+
init_opts: init_opts
140+
)}
128141
end
129142

130143
def handle_request(%TextDocumentDefinition{params: %{text_document: %{uri: uri}, position: position}}, lsp) do
@@ -555,6 +568,8 @@ defmodule NextLS do
555568
task_supervisor: lsp.assigns.runtime_task_supervisor,
556569
working_dir: working_dir,
557570
uri: uri,
571+
mix_env: lsp.assigns.init_opts.mix_env,
572+
mix_target: lsp.assigns.init_opts.mix_target,
558573
on_initialized: fn status ->
559574
if status == :ready do
560575
Progress.stop(lsp, token, "NextLS runtime for folder #{name} has initialized!")
@@ -668,6 +683,8 @@ defmodule NextLS do
668683
task_supervisor: lsp.assigns.runtime_task_supervisor,
669684
working_dir: working_dir,
670685
uri: uri,
686+
mix_env: lsp.assigns.init_opts.mix_env,
687+
mix_target: lsp.assigns.init_opts.mix_target,
671688
on_initialized: fn status ->
672689
if status == :ready do
673690
Progress.stop(lsp, token, "NextLS runtime for folder #{name} has initialized!")
@@ -985,4 +1002,25 @@ defmodule NextLS do
9851002

9861003
# penalty for unmatched letter
9871004
defp calc_unmatched_penalty(score, _traits), do: score - 1
1005+
1006+
defmodule InitOpts do
1007+
@moduledoc false
1008+
import Schematic
1009+
1010+
defstruct mix_target: "host", mix_env: "dev"
1011+
1012+
def validate(opts) do
1013+
schematic =
1014+
nullable(
1015+
schema(__MODULE__, %{
1016+
optional(:mix_target) => str(),
1017+
optional(:mix_env) => str()
1018+
})
1019+
)
1020+
1021+
with {:ok, nil} <- unify(schematic, opts) do
1022+
{:ok, %__MODULE__{}}
1023+
end
1024+
end
1025+
end
9881026
end

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},

mix.exs

+1
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ defmodule NextLS.MixProject do
6363
{:exqlite, "~> 0.13.14"},
6464
{:gen_lsp, "~> 0.6"},
6565
{:req, "~> 0.3.11"},
66+
{:schematic, "~> 0.2"},
6667

6768
{:burrito, github: "burrito-elixir/burrito", only: [:dev, :prod]},
6869
{:bypass, "~> 2.1", only: :test},

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)