2013-02-23 5 views
5

Aby wyświetlić ostrzeżenia z Ruby, można zadzwonić pod numer ruby z flagą -w. Podczas korzystania z bibliotek Ruby może wyświetlać wiele ostrzeżeń, tak że trudno jest znaleźć ostrzeżenia z plików, nad którymi aktualnie pracujesz. Czy można powiedzieć ruby, aby wyświetlać ostrzeżenia tylko dla niektórych plików?Jak wybrać pliki, dla których mają być wyświetlane ostrzeżenia?

Oto przykład ilustrujący problem. Poniższe ładuje bibliotekę, która generuje wiele ostrzeżeń, a także samodzielnie generuje ostrzeżenie poprzez ponowne zdefiniowanie stałej.

require 'grooveshark' 

CONSTANT = 'foo' 
CONSTANT = 'bar' 

Wyjście ruby -w warning_test.rb jest następujący:

 
/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 

W tym przypadku chciałbym tylko zobaczyć tylko ostatnie ostrzeżenie

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

Ponieważ pozostałe ostrzeżenia wynikają z bibliotek Nie mam bezpośredniej kontroli nad ostrzeżeniami dla nich nie są tak interesujące. Chciałbym móc powiedzieć Ruby, aby wyświetlała tylko ostrzeżenia dotyczące projektu, który się działa.

Zdaję sobie sprawę, że określenie prądu może być trudne. Może wyświetlać ostrzeżenia tylko dla podanego pliku, a pliki dostępne za pośrednictwem usługi require_relative. Inną opcją jest wyświetlanie ostrzeżeń o plikach, które znajdują się blisko struktury katalogów danego pliku.

+0

Jakie ostrzeżenia ty mówisz? –

+0

@AndrewMarshall: może wyjątki? –

+0

@AndrewMarshall Mam na myśli te, które otrzymujesz, gdy używasz '-w' z' ruby'. –

Odpowiedz

1

Możesz przekierować stderr na standardowe wyjście, a następnie grep. Oto przykład:

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

+0

Inną alternatywą jest wyszukanie bibliotek za pomocą 'grep -v gems'. –