еще момент, правильно ли я понимаю, что диализер ругается и предлагает вставить no_return когда функция помимо результата может вернуть эксепшн?
диалайзер обычно не ругается, если функция может грохнутся. Когда диалайзер говорит "function has no return" это скорее всего нарушени контракта. типа:
case Repo.get() do
{:ok, val} -> val
{:error, err} -> err
end
Хотя у Repo.get() возрат "term() | nil" т.е. он не возвращает туплы {:ok | :error, _} соответсвенно не сматчится ни одно условие в case и функция ничего не вернет