Size: a a a

2020 August 24

Е

Евгений in pro.elixir
Но я бы всегда гонял диалайзер. Доп проверка уже самих спеков.
источник

P

Pavel in pro.elixir
Евгений
Короче, уточню немного. Если не генеришь доков и/или не используешь диалайзер от спеков мало толку.
Не использовать диалайзер - это конечно, удобно. Вот ты сидишь и вспоминаешь тебе функция {:ok, entity} или там не может быть ошибки и она вернет entity просто. Удобненько 🙂
источник

Е

Евгений in pro.elixir
Pavel
Не использовать диалайзер - это конечно, удобно. Вот ты сидишь и вспоминаешь тебе функция {:ok, entity} или там не может быть ошибки и она вернет entity просто. Удобненько 🙂
Эх, я все равно в доки лезу. Часто даже для стандартных функций. Прямо в iex через h
источник

Е

Евгений in pro.elixir
И там уже смотрю на спеку
источник

Е

Евгений in pro.elixir
А вот no_return() или none() когда использовать? Если значение возвращаемое из функции не имеет никакого смысла или если функция всегда кидает исключение?
источник

T

Tharin in pro.elixir
Elixir removed all no_return() in the specs.
источник

T

Tharin in pro.elixir
источник

AB

Alex Bubnov in pro.elixir
Anastasiya Dyachenko
ощущение что реально каждый в этом чате пишет документацию
нет, я не пишу, терпеть это не могу.
лучшая документация - это код.
источник

Е

Евгений in pro.elixir
Вот код, на который диалайзер должен ругаться, но не ругается:
defmodule Foo do
 @type options() :: [
         {:k1, integer()}
         | {:k2, integer()}
         | {:k3, integer()}
         | {:k4, integer()}
         | {:k5, integer()}
         | {:k6, boolean()}
       ]

 @spec foo(options()) :: options()
 def foo(a), do: a

 def bar() do
   # тут должна быть ошибка
   foo(k6: 10)
 end
end
источник

T

Tharin in pro.elixir
Евгений
Вот код, на который диалайзер должен ругаться, но не ругается:
defmodule Foo do
 @type options() :: [
         {:k1, integer()}
         | {:k2, integer()}
         | {:k3, integer()}
         | {:k4, integer()}
         | {:k5, integer()}
         | {:k6, boolean()}
       ]

 @spec foo(options()) :: options()
 def foo(a), do: a

 def bar() do
   # тут должна быть ошибка
   foo(k6: 10)
 end
end
почему?
источник

T

Tharin in pro.elixir
а, ну да
источник

T

Tharin in pro.elixir
буль же
источник

Е

Евгений in pro.elixir
Причем там какая-то странная закономерность, если например убрать одну из опций, то он начинает ругаться :)
источник

AB

Alex Bubnov in pro.elixir
тут нужно посмотреть, а во что же эта спека схлопывается.
если в [{:k1|:k2|...|:k6, integer()|boolean()}] - понятно, почему не ругается
источник

Е

Евгений in pro.elixir
Alex Bubnov
тут нужно посмотреть, а во что же эта спека схлопывается.
если в [{:k1|:k2|...|:k6, integer()|boolean()}] - понятно, почему не ругается
хм, а зачем она так схлопывается?
источник

Е

Евгений in pro.elixir
Так устроено?
источник

AB

Alex Bubnov in pro.elixir
а я не знаю, это предположение
источник

RP

Roman Pushkov in pro.elixir
это было бы странно конечно
источник

AB

Alex Bubnov in pro.elixir
проверь с foo(k6: "asd")
источник

PG

Pig Greenest in pro.elixir
а похоже на правду
источник