LL
Наконец-то #FunBox начали нам выдавать что-то кроме своих вакансий с космическими требованиями))
посмотрим, покритикуем, мяч теперь на нашей стороне))
https://github.com/savonarola/edantic
Size: a a a
LL
МК
МК
МК
LL
SM
SM
LL
issue
😏LL
Code.Typespec.fetch_types
, которым пользуются в edantic
не позволяет тянуть тайпспеки модуля, который ещё не скомпилированSM
Code.Typespec.fetch_types
, которым пользуются в edantic
не позволяет тянуть тайпспеки модуля, который ещё не скомпилирован
Edantic.define_cast_module(MyModule.Cast, for: MyModule)
АЮ
Ecto.Changeset
выглядит удобнее.AD
SM
Code.Typespec.fetch_types
, которым пользуются в edantic
не позволяет тянуть тайпспеки модуля, который ещё не скомпилированModule.get_attribute(:type | :typep | :opaque, [])
внутри @before_compile
-хука получить список всех типов, определённых внутри компилируемого модуля. А для remote-типов рекурсивно уже вызывать Code.Typespec.fetch_types
внутри этого же хука.Module.get_attribute
возвращает AST определения типа, которое отличается от представления, которое возвращает Code.Typespec.fetch_types
(но это представление можно обратно сконвертировать в AST с помощью Code.Typespec.type_to_quoted
).LL
Module.get_attribute(:type | :typep | :opaque, [])
внутри @before_compile
-хука получить список всех типов, определённых внутри компилируемого модуля. А для remote-типов рекурсивно уже вызывать Code.Typespec.fetch_types
внутри этого же хука.Module.get_attribute
возвращает AST определения типа, которое отличается от представления, которое возвращает Code.Typespec.fetch_types
(но это представление можно обратно сконвертировать в AST с помощью Code.Typespec.type_to_quoted
).Module.get_attribute
не будет работать когда ты компилируешь один модуль из своего проекта, который использует тип другого модуляCode.Typespec.fetch_types
тоже не будет работать (я проверял)LL
@before_compile
. Она делает валидаторы в компайле и напрямую из ast
, но у неё есть пара неровностей. И она, скорее всего, не выйдет в открытый доступ, потому что я делал её в рабочее времяSM
Module.get_attribute
не будет работать когда ты компилируешь один модуль из своего проекта, который использует тип другого модуляCode.Typespec.fetch_types
тоже не будет работать (я проверял)Code.Typespec.fetch_types
внутри этого же хука.LL
Code.Typespec.fetch_types
внутри этого же хука.LL
Code.Typespec.fetch_types
внутри этого же хука.defmodule Playground do
@type t :: integer()
end
defmodule Playground.Macro do
defmacro m({{:".", _, [module, _type] }, _, []}) do
module = Macro.expand(module, __CALLER__)
IO.inspect Code.Typespec.fetch_types(module), label: :here
end
end
defmodule Playground2 do
require Playground.Macro
def f() do
Playground.Macro.m(Playground.t())
end
end
here: :error
при компиляцииM
@before_compile
. Она делает валидаторы в компайле и напрямую из ast
, но у неё есть пара неровностей. И она, скорее всего, не выйдет в открытый доступ, потому что я делал её в рабочее времяSM
defmodule Playground do
@type t :: integer()
end
defmodule Playground.Macro do
defmacro m({{:".", _, [module, _type] }, _, []}) do
module = Macro.expand(module, __CALLER__)
IO.inspect Code.Typespec.fetch_types(module), label: :here
end
end
defmodule Playground2 do
require Playground.Macro
def f() do
Playground.Macro.m(Playground.t())
end
end
here: :error
при компиляции