2016-04-04 22 views
5

L'analizzatore dializzatore statico (io lo uso tramite dialyxir) riporta tutti gli usi di Logger (Logger.info "blah") come un ritorno senza pari:rendimenti senza precedenti di Logger

Expression produces a value of type 'ok' | {'error',_}, but this value is unmatched 

Potrei scrivere :ok  = Logger.info "blah" ma, ovviamente, è ingombrante. Potrei anche configurare il dializzatore con -Wno_unmatched_returns per ignorare tutti questi avvisi. Tuttavia, li trovo molto istruttivi e non voglio ignorarli.

Il documentation of dialyzer afferma che è possibile utilizzare gli attributi del modulo per disattivare gli avvisi per modulo, ma non riesco a vedere se è possibile inserire queste informazioni solo nei file di origine Elixir.

C'è un modo per configurare Dialyzer per ignorare tali avvisi, ma solo per Logger?

risposta

3

C'è la documentazione dell'attributo @dialyzer here. Avrai bisogno di cercare un po 'nella pagina per trovarlo.

In questo caso particolare, credo che il seguente attributo modulo:

@dialyzer {:no_return, your_function_name: 1} 

dovrebbe darvi quello che volete. Basta mettere nella parte superiore di ogni modulo in cui si sta utilizzando Logger in questo modo:

defmodule MyLogging do 
@dialyzer {:no_return, your_function_name: 1} 
. 
. 
. 

Nota che sembra che si può chiudere solo al largo delle avvertenze per le funzioni nel modulo corrente. Cioè, non sembra possibile disattivare gli avvisi per le funzioni in un modulo diverso (ad esempio, Logger.info: 1).

+0

Grazie! In effetti, questa è l'opzione 'unmatched_returns' di cui ho bisogno. Attiva il controllo anziché disattivarlo. Tuttavia, come hai detto tu, il problema è che l'attivazione o la disattivazione è per le funzioni di chiamata, non quelle chiamate. Tuttavia, la tua risposta è tecnicamente corretta quando mostri come configurare il dializzatore nel codice sorgente Elixir :-) –