2015-08-13 6 views
6

Ich finde die Kompilierzeit Warnungen sehr nützlich, aber ich kann sie gelegentlich vermissen, besonders wenn es auf einer Pull-Anfrage ist, wo die Tests auf einem CI-Server laufen.Ist es möglich, dass der Compiler vorzeitig beendet wird und der Build fehlschlägt, wenn eine Kompilierungswarnung ausgegeben wird?

Idealerweise würde ich etwas in der Projektmixdatei angeben, das den Compiler strenger machen würde.

Ich möchte dies für alle Mischaufgaben gelten, und ich möchte nicht die Flagge an den Befehl übergeben, da dies leicht zu vergessen ist.

Zum Beispiel mit einem Projekt mit einer Compiler-Warnung, soll dieser Befehl

mix clean && mix compile 

Wie scheitern soll dies ein

mix clean && mix test 

Antwort

7

Mögliche zu einem gewissen Grad. Es gibt eine Flagge --warnings-as-errors in elixirc Befehl.

☁ hello_elixir [master] ⚡ elixirc 
Usage: elixirc [elixir switches] [compiler switches] [.ex files] 

    -o    The directory to output compiled files 
    --no-docs  Do not attach documentation to compiled modules 
    --no-debug-info Do not attach debug info to compiled modules 
    --ignore-module-conflict 
    --warnings-as-errors Treat warnings as errors and return non-zero exit code 
    --verbose  Print informational messages. 

** Options given after -- are passed down to the executed code 
** Options can be passed to the erlang runtime using ELIXIR_ERL_OPTIONS 
** Options can be passed to the erlang compiler using ERL_COMPILER_OPTIONS 

Für ein Modul wie diese, mit einer Warnung:

defmodule Useless do 
    defp another_userless, do: nil 
end 

Wenn Sie ohne das Flag kompilieren:

☁ 01_language [master] ⚡ elixirc useless.ex 
useless.ex:2: warning: function another_userless/0 is unused 
☁ 01_language [master] ⚡ echo $? 
0 

Sie erhalten den Rückgabecode als . Wenn Sie mit dem Flag --warnings-as-errors kompilieren, gibt es einen Exit-Code zurück.

☁ 01_language [master] ⚡ elixirc --warnings-as-errors useless.ex 
useless.ex:1: warning: redefining module Useless 
useless.ex:2: warning: function another_userless/0 is unused 
☁ 01_language [master] ⚡ echo $? 
1 

Sie können diesen Rückkehrcode in Ihrem Kompilierungsskript verwenden, um den Buildprozess zu unterbrechen.

6

In Ihrem mix.exs:

def project do 
    [..., 
    aliases: aliases] 
end 

defp aliases do 
    ["compile": ["compile --warnings-as-errors"]] 
end 

Dann wird mix compile--warnings-as-errors zum compile.elixir Unteraufgabe passieren.

Dies funktioniert auch für mix test, da es die compile Aufgabe implizit ausführt.


Wenn Sie keinen Aliasnamen hinzufügen, können Sie immer noch mix compile --warnings-as-errors laufen und es wird tun, was Sie erwarten, aber mix test --warnings-as-errors nicht tun, was Sie erwarten, da das Flag nicht die compile.elixir Aufgabe nicht erreicht.

+0

Clever, danke. – lpil

Verwandte Themen