La mia esperienza è stata che il modo più semplice per verificare se il mio codice è stato compilato correttamente è quello di eseguire test automatici. Il compilatore farà lo stesso lavoro sia che compili per eseguire i test sia che controlli che i file siano lessicalmente corretti.
MRI
parser di risonanza magnetica è scritto in C. non riuscivo a trovare un riferimento specifico alla modalità di accesso, anche se sono sicuro che c'è un modo per farlo. Se solo qualcuno avesse trascorso qualche tempo rendendo più Rubino Rubino-aware ...
Rubinius
In Rubinius, si accede direttamente al parser via Melbourne:
rbx-2.2.10 :039 > Rubinius::ToolSets::Runtime::Melbourne.parse_file("./todo.txt")
SyntaxError: expecting keyword_do or '{' or '(': ./todo.txt:2:17
e per un rubino valida File:
rbx-2.2.10 :044 > Rubinius::ToolSets::Runtime::Melbourne.parse_file('./valid.rb')
=> #<Rubinius::ToolSets::Runtime::AST::Class:0x1e6b4 @name=# <Rubinius::ToolSets::Runtime::AST::ClassName:0x1e6b8 @name=:RubyStuff @line=1 @superclass=#<Rubinius::ToolSets::Runtime::AST::NilLiteral:0x1e6bc @line=1>> @body=#<Rubinius::ToolSets::Runtime::AST::EmptyBody:0x1e6c8 @line=1> @line=1 @superclass=#<Rubinius::ToolSets::Runtime::AST::NilLiteral:0x1e6bc @line=1>>
riga di comando
stai usin g strumenti da riga di comando per analizzare ruby. Se si sta facendo un po 'di loop attraverso i file in Ruby, forse si dovrebbe semplicemente prendere che alla riga di comando come bene e fare qualcosa di simile:
[email protected]:/projects/open/compile-test$ find . | grep ".rb$" | xargs ruby -c
Syntax OK
[email protected]:/projects/open/compile-test$ find . | grep ".rb$" | xargs ruby -c
./invalid.rb:2: expecting $end: ./invalid.rb:2:3
che assomiglia a questo in Ruby:
system "find . | grep ".rb$" | xargs ruby -c"
Riferimenti
http://rubini.us/doc/en/bytecode-compiler/parser/
Sembra come si sta facendo nel modo giusto. Potrebbe essere interessante per te: https://github.com/cypher/git-ruby-syntax-check/blob/master/pre-commit –
controlla la sintassi in runtime? –
dove metti quella linea? – Stefan