2013-02-23 11 views
5

Per visualizzare gli avvisi con Ruby, è possibile chiamare ruby con la bandiera -w. Quando si utilizzano le librerie Ruby può mostrare molti avvisi in modo che sia difficile trovare gli avvisi dai file su cui si sta effettivamente lavorando. È possibile indicare allo ruby di visualizzare solo gli avvisi per alcuni file?Come selezionare i file per cui visualizzare gli avvisi?

Ecco un esempio per illustrare il problema. Il seguente carica una libreria che genera molti avvisi e produce anche un avvertimento da solo ridefinendo una costante.

require 'grooveshark' 

CONSTANT = 'foo' 
CONSTANT = 'bar' 

L'uscita del ruby -w warning_test.rb è il seguente:

 
/var/lib/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient/exceptions.rb:157: warning: assigned but unused variable - message 
/var/lib/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient/exceptions.rb:167: warning: assigned but unused variable - message 
/var/lib/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient/response.rb:11: warning: method redefined; discarding old body 
/var/lib/gems/1.9.1/gems/rest-client-1.6.7/lib/restclient/payload.rb:47: warning: mismatched indentations at 'end' with 'case' at 40 
/var/lib/gems/1.9.1/gems/macaddr-1.6.1/lib/macaddr.rb:63: warning: assigned but unused variable - status 
/var/lib/gems/1.9.1/gems/macaddr-1.6.1/lib/macaddr.rb:63: warning: assigned but unused variable - stderr 
/var/lib/gems/1.9.1/gems/macaddr-1.6.1/lib/macaddr.rb:56: warning: assigned but unused variable - re 
/var/lib/gems/1.9.1/gems/macaddr-1.6.1/lib/macaddr.rb:59: warning: assigned but unused variable - null 
/var/lib/gems/1.9.1/gems/systemu-2.5.2/lib/systemu.rb:126: warning: shadowing outer local variable - cid 
/var/lib/gems/1.9.1/gems/systemu-2.5.2/lib/systemu.rb:213: warning: shadowing outer local variable - buf 
/var/lib/gems/1.9.1/gems/systemu-2.5.2/lib/systemu.rb:215: warning: shadowing outer local variable - buf 
/var/lib/gems/1.9.1/gems/systemu-2.5.2/lib/systemu.rb:208: warning: assigned but unused variable - ignored 
/var/lib/gems/1.9.1/gems/systemu-2.5.2/lib/systemu.rb:252: warning: shadowing outer local variable - key 
/var/lib/gems/1.9.1/gems/systemu-2.5.2/lib/systemu.rb:249: warning: assigned but unused variable - ignored 
/var/lib/gems/1.9.1/gems/grooveshark-0.2.7/lib/grooveshark/user.rb:65: warning: method redefined; discarding old playlists 
/var/lib/gems/1.9.1/gems/grooveshark-0.2.7/lib/grooveshark/user.rb:93: warning: method redefined; discarding old favorites 
warning_test.rb:4: warning: already initialized constant CONSTANT 

In questo caso vorrei solo per vedere solo l'ultimo avvertimento

 
warning_test.rb:4: warning: already initialized constant CONSTANT 

Poiché gli altri avvertimenti sono dovuti alle biblioteche Non ho il controllo diretto sugli avvertimenti per loro non sono così interessanti. Mi piacerebbe poter dire a Ruby di mostrare solo gli avvertimenti per il progetto su cui si sta lavorando.

Mi rendo conto che definire la corrente potrebbe essere complicato. Forse per mostrare solo gli avvertimenti per il dato file e file inclusi tramite require_relative farebbe. Un'altra alternativa è mostrare gli avvertimenti per i file che sono vicini nella struttura della directory al file specificato.

+0

Che tipo di avvertimento stai parlando? –

+0

@AndrewMarshall: eccezioni, forse? –

+0

@AndrewMarshall Mi riferisco a quelli che ottieni quando usi '-w' con' ruby'. –

risposta

1

È possibile reindirizzare lo stderr su stdout e quindi su grep. Ecco un esempio:

ruby -w warning_test.rb 2>&1 | grep "warning_test"

+0

Un'altra alternativa è quella di scaricare le librerie usando 'grep -v gems'. –

Problemi correlati