Size: a a a

2021 April 07

((

(fun () -> ()) in pro.elixir
Ну да
источник

((

(fun () -> ()) in pro.elixir
Потому кстати цикл в теории категорий выглядит как просто map или что там надо сделать над монадой list.
источник

DP

D. P. in pro.elixir
А не поскажет ли многомудрый :all, есть ли уже сделанное решение по такой задачке. Ну или хоть бы куда копать.

Надо из одного единого списка типов и их атрибутов создать-сгенерировать одновременно:

а) несколько вариантов документации (два API по разным протоколам)
б) SQL миграции на ecto

Формат исходного списка пока не определён. Определены только хотелки - известен список объектов и их атрибуты, которые должны обрабатываться. Объектов порядка 12, но будет больше, атрибутов-полей у них от 10 до 40, часть из них стандартные для всех, часть - нет. Всё это в дикой и длительной движухе, поэтому править два места при изменении одного атрибута нельзя - ошибёмся с третьего раза.

Предварительно типы описываются в заголовочном файле на эрланге, но я рассматриваю и другие варианты: например птичий язык в yaml, заголовочный файл эликсира.

Что-то вроде:
-type xml() :: string(). 
-record(smartcontract,{
 oid = innoutils:uuidv4_to_binary() :: binary() | undefined,
 correlation_id = innoutils:uuidv4_to_binary() :: binary() | undefined,
 disabled_at = erlang:system_time(microsecond) :: integer() | undefined,
 type = atom(),
 payload = std_types:xml()
}.

% elixir
create_table(smartcontract) do
 add :oid, :uuid, null: false
 add :correlation_id, uuid
 add :disabled_at, :unixtime, default: 'now()'
 add :type, :string, null: false
 add :payload, :string, null: false
end
источник

AD

Anastasiya Dyachenko in pro.elixir
чет не очень понятно, т.е. нужно чтобы динамически создавались миграции? и что значит генерить документацию, какую?
источник

VS

Vladimir Sekisov in pro.elixir
Готовых не видел,
я для такого пользуюсь
https://hex.pm/packages/open_api_spex
Вокруг него несколько макросов и генерю, что надо.
Swagger API идёт бонусом.
источник

DP

D. P. in pro.elixir
Ну на готовые я не рассчитывал, но надеялся, что можно как-то сгенерить из эрланг-кода.
Посмотрю, спасибо.
источник

AB

Alex Bubnov in pro.elixir
посмотри, как написан Record в stdlib, там как раз переработка эрланговых исходников
источник

DR

Dmitry Russ (Aleksan... in pro.elixir
Нашёл ошибку
источник

AB

Alex Bubnov in pro.elixir
вообще, тут возможны два немного разных подхода - макросы или компилятор.
макросы - это Record, пишешь свой модуль, в нем вызов макроса, который в итоге развернется в какие-то функции с функциональностью или функции, возвращающие описания.
компилятор - см. github.com/pinterest/elixir-thrift. делает по сути то же самое, но в другой обертке, с возможностью выбора момента работы(до/после компиляции эликсирных исходников) и в процессе порождает не куски аст, а модули целиком, до файлов на диске.

конкретно в твоем случае для документации нужно будет сделать две фазы работы. первая - описана выше, макросами или компилятором сгенерить модули с метаданными. вторая - mix-таск, который пройдется по всем модулям проекта, вытащит из них эти метаданные и превратит их в собственно документацию, проставит ссылки, etc.
источник

DR

Dmitry Russ (Aleksan... in pro.elixir
get_render_prefix(conn) - была багги, т.е. она вызывала внутри структуры, которые не соответствуют типам в conn-а и dialyzer это видимо ловил и ожидал, что в put_status может попасть что-то другое, не только conn.
источник

DR

Dmitry Russ (Aleksan... in pro.elixir
Cтранно, что добавить spec-у к call-у вообще не помогло.
источник

ŹR

Źmićer Rubinštejn in pro.elixir
А ты удалял plt?
источник

DR

Dmitry Russ (Aleksan... in pro.elixir
Удалял
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Тогда хз.
источник

DR

Dmitry Russ (Aleksan... in pro.elixir
Радует, что это не очередной случай, когда dialyzer был не прав 🙂
источник

БЁ

Борщевик Ёбаный... in pro.elixir
А количество времени, потраченного на выяснение такой простой ошибки вас устраивает?
источник

DP

D. P. in pro.elixir
Спасибо.
источник

LL

Lama Lover in pro.elixir
А у тебя есть предложения как улучшить dialyzer ?
источник

БЁ

Борщевик Ёбаный... in pro.elixir
Что значит улучшить?
источник

LL

Lama Lover in pro.elixir
Если бы я улучшал dialyzer, то я бы хотел чтобы он писал строки с кодом, где происходит конфликт
И ещё было бы прикольно если бы он умел выделать дифф как это, например, делает mix test
источник