Use shorter name for doctests module (#1874)

Co-authored-by: José Valim <jose.valim@dashbit.co>
This commit is contained in:
Jonatan Kłosko 2023-04-27 15:34:20 +01:00 committed by GitHub
parent 30df25a709
commit a6a56ff30c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 65 additions and 2 deletions

View file

@ -143,4 +143,21 @@ defmodule Livebook.Intellisense.Docs do
# loads elixir.beam, so we explicitly list it.
defp ensure_loaded?(Elixir), do: false
defp ensure_loaded?(module), do: Code.ensure_loaded?(module)
@doc """
Checks if the module has any documentation.
"""
@spec any_docs?(module()) :: boolean()
def any_docs?(module) do
case Code.fetch_docs(module) do
{:docs_v1, _, _, _, %{}, _, _} ->
true
{:docs_v1, _, _, _, _, _, docs} ->
Enum.any?(docs, &match?({_, _, _, %{}, _}, &1))
_ ->
false
end
end
end

View file

@ -456,7 +456,9 @@ defmodule Livebook.Runtime.Evaluator do
end
if ebin_path() do
Livebook.Runtime.Evaluator.Doctests.run(new_context.env.context_modules)
new_context.env.context_modules
|> Enum.filter(&Livebook.Intellisense.Docs.any_docs?/1)
|> Livebook.Runtime.Evaluator.Doctests.run()
end
state = put_context(state, ref, new_context)

View file

@ -36,7 +36,18 @@ defmodule Livebook.Runtime.Evaluator.Doctests do
end
defp define_test_module(modules) do
name = Module.concat([LivebookDoctest | modules])
id =
modules
|> Enum.sort()
|> Enum.map_join("-", fn module ->
module
|> Atom.to_string()
|> String.replace_prefix("Elixir.", "")
end)
|> :erlang.md5()
|> Base.encode32(padding: false)
name = Module.concat([LivebookDoctest, "TestModule#{id}"])
try do
defmodule name do

View file

@ -0,0 +1,13 @@
defmodule Livebook.Intellisense.DocsTest do
use ExUnit.Case, async: true
alias Livebook.Intellisense.Docs
test "any_docs?/1" do
refute Docs.any_docs?(Livebook.TestModules.Docs.Without)
refute Docs.any_docs?(Livebook.TestModules.Docs.ModuleHidden)
refute Docs.any_docs?(Livebook.TestModules.Docs.FunctionHidden)
assert Docs.any_docs?(Livebook.TestModules.Docs.Module)
assert Docs.any_docs?(Livebook.TestModules.Docs.Function)
end
end

View file

@ -0,0 +1,20 @@
defmodule Livebook.TestModules.Docs.Without do
end
defmodule Livebook.TestModules.Docs.ModuleHidden do
@moduledoc false
end
defmodule Livebook.TestModules.Docs.Module do
@moduledoc "Hello."
end
defmodule Livebook.TestModules.Docs.FunctionHidden do
@doc false
def hello(), do: "hello"
end
defmodule Livebook.TestModules.Docs.Function do
@doc "Hello."
def hello(), do: "hello"
end