🔀
[Elixir] PropCheck を使っていると VSCode の ElixirLS 拡張がクラッシュする問題の対処
テストにPropCheckを使っているとElixirLSがクラッシュする。
どうやらElixirLSがテストコードを読んだとき、コードに PropCheck.Properties.property/2
があると GenServer.call/3
を実行してしまってエラーになるせいでクラッシュするらしい。
これを回避するため、ElixirLS実行時のみ PropCheck.Properties.property
を差し替えるようにする。
.vscode/settings.json
{
"elixirLS.envVariables": {
"RUNNING_IN_ELIXIR_LS": "1"
}
}
test/test1_test.exs
defmodule Els.PropCheck do
@doc """
Stub for PropCheck.Properties.property/2
"""
def property(_, _, _ \\ nil, _ \\ nil) do
end
defmacro __using__(opts) do
if System.get_env("RUNNING_IN_ELIXIR_LS") == nil do
quote do
use PropCheck, unquote(opts)
end
else
quote do
# Copied from PropCheck.__using__/1
# PropCheck.Properties.property/2 crash the Elixir Language Server
import PropCheck
import PropCheck.Properties, except: [property: 1, property: 2, property: 3, property: 4]
# import :proper_types, except: [lazy: 1, to_binary: 1, function: 2]
import PropCheck.BasicTypes
import PropCheck.TargetedPBT
import Els.PropCheck
end
end
end
end
defmodule Els.Test1 do
use ExUnit.Case
use Els.PropCheck
property "int-str round-trip" do
forall v <- integer() do
decoded =
v
|> to_string()
|> String.to_integer()
decoded == v
end
end
end
環境
- ElixirLS: v0.20.0
- PropCheck: 1.4.1
Discussion