Предупреждение компилятора Elixir о игнорируемых возвращаемых значениях функций - PullRequest
2 голосов
/ 15 января 2020

Есть ли способ получить предупреждение - от компилятора elixirc, Credo или какого-либо другого инструмента для рисования - когда я непреднамеренно игнорирую возвращаемое значение функции?

То есть я ' Мне нравится предупреждение в этом примере, где он игнорирует результат increment_state():

defmodule CountingServer do
  use GenServer

  def init(_) do
    :timer.send_interval(1000, :tick)
    {:ok, 1}
  end

  def handle_info(:tick, count_state) do
    IO.puts count_state
    increment_state(count_state)
    {:noreply, count_state}
  end

  def increment_state(prev_count) do
    prev_count + 1
  end
end

В вышеприведенном примере мы «намеревались» вернуть увеличенное состояние из handle_info/2 вызов, а не «старое» состояние; то есть мы намеревались, чтобы сервер печатал 1, 2, 3, ... вместо печати 1 раз.

Если образец кода имел намеренно , то игнорировал результат increment_state/1 call (назначив его, например, на _), предупреждение не потребовалось бы.

Я просмотрел параметры конфигурации Credo и не смог найти ничего, что соответствовало бы требованиям. .

1 Ответ

0 голосов
/ 17 января 2020

Я пошел дальше и сделал проверку Credo на основе значения по умолчанию Credo UnusedOperation и UnusedFunctionReturnHelper .

Эти проверки почти поддерживают то, что я хочу сделать «как есть», но они, по сути, требуют «черного списка», чтобы точно сказать, какие возвращаемые значения функций нельзя игнорировать; Мне просто нужно было инвертировать логи c для поддержки предупреждения о любой функции, отсутствующей в белом списке (Logger.info, Enum.each, и т. Д. c.).

Проверка поддерживает добавление дополнительных (предположительно) Специфический проект c) функционирует в белый список через конфигурацию .credo.exs.

См. первый комментарий для инструкций по его использованию в вашем собственном проекте. (TL; DR: удалите файл в своем проекте, добавьте его в списки requires и checks в вашем .credo.exs.)

...