Pergunta

A maior parte da gravação código que está em Ruby, e de vez em quando, eu faço algum erro de digitação que só é pego depois de um tempo. Isto é irritante quando eu tiver meus scripts executar tarefas longas, e voltar a encontrar I teve um erro de digitação.

Existe uma ferramenta lint ativamente desenvolvido para Ruby que poderia me ajudar a superar isso? Seria possível usá-lo através de um sistema que funciona com um monte de arquivos de origem, alguns deles carregado dinamicamente?

Tome esse trecho como um exemplo:

a = 20
b = 30
puts c

Para ganhar recompensas, mostre-me uma ferramenta que irá detectar a variável c como não criado / indefinido.

Foi útil?

Solução

Você poderia dar Diamondback Rubi uma tentativa. Ele faz um typecheck estática de código Ruby, e, assim, culpa por usar uma variável indefinida.

Enquanto DRuby é um projecto de investigação em curso, que já funciona muito bem para scripts pequenos e independentes Ruby. Atualmente, ele é incapaz de analisar grande parte da biblioteca padrão Ruby “out-of-the-box”. Atualmente eles estão trabalhando para digitação Ruby on Rails (ver seus maioria dos papéis recentes ).

Outras dicas

  • ruby -c myfile.rb irá verificar a sintaxe de Ruby correta.
  • Reek cheques código Ruby para código comum cheiros.
  • Roodi cheques código Ruby para problemas comuns de design orientados a objetos.
  • Flog pode avisá-lo sobre invulgarmente código complexo.

[plug] Se o seu projeto está em um repositório público Github, Caliper pode executar os últimos três ferramentas e outros em seu código de cada vez que você cometeu. (Disclaimer: Eu trabalho em Caliper)

RubyMine ( http://www.jetbrains.com/ruby ) faz o truque:

alt texto http://img707.imageshack.us/img707/5688/31911448. png

Nenhum dos abaixo vai fazer toda a análise que RubyMine faz.

  • Ruby do NetBeans pacote
  • Aptana RadRails
  • gVim (com plugin de syntastic por scrooloose)

Cada uma delas tem a capacidade de identificar erros de sintaxe, como o número errado de parênteses, muitas defs, extremidades, chaves, etc. Mas nada irá identificar método inválido chama a maneira RubyMine faz.

Aqui está o porquê:. É difícil

Uma vez que Ruby é extremamente dinâmico (e métodos como 'c' pode ser facilmente gerada em tempo real), qualquer editor que tenta identificar as variáveis ??inexistentes / métodos precisaria ter uma grande parte de todo o evironment carregado e múltipla caminhos de fluxo programa constantemente testados, a fim de obter resultados precisos 'validade'. Isso é muito mais difícil do que em Java, onde quase toda a programação é estático (pelo menos era quando eu deixei cair o chapéu).

Esta capacidade de gerar facilmente métodos em tempo real é uma das razões pelas quais a comunidade realiza testes para tão alta estima. Eu realmente recomendo que você tente testar também.

Tenha um olhar em RuboCop . É um verificador de estilo código Ruby baseada no Guia de Estilo Ruby . É mantido muito ativa e suporta todos os principais implementações de Ruby. Ele funciona bem com Ruby 1.9 e 2.0 e tem grande integração Emacs.

Sim. Test::Unit

Ok, eu sei que você já sabe disso e que em certo sentido, esta é uma resposta não-útil, mas você trazer a consequência negativa da tipagem pato, que tipo de é (neste momento) nenhuma maneira em torno de apenas escrever mais testes do que algo como Java pode precisar.

Assim, para o registro, consulte Test::Unit na biblioteca padrão Ruby ou uma das outras estruturas de teste.

Tendo testes de unidade que você pode executar e executar novamente é a melhor maneira de erros de captura, e você precisa mais deles (testes, não erros :-) em linguagens dinâmicas como Ruby ...

nitpick pode ser o que você está lookng para.

Com este código:

class MyString < String
  def awesome
    self.gsub("e", "3").gsub("l", "1").uppercase
  end
end

puts MyString.new("leet").awesome

... ele produz:

$ nitpick misspelling.rb 
*** Nitpick had trouble loading "misspelling.rb":
    NoMethodError undefined method `uppercase' for "133t":MyString
Nothing to report boss! He's clean!

não usei ainda, mas parece promissor (atualizará quando eu testei isso).

https://github.com/michaeledgar/laser

Análise estática e linter estilo para o código Ruby.

Pelusa é bom, mas está trabalhando apenas em Rubinius. Este shouln't ser um proplem para pessoas familar com RVM embora.

avdi@lazarus:~$ irb
>> a = 20
=> 20
>> b = 30
=> 30
>> puts c
NameError: undefined local variable or method `c' for main:Object
        from (irb):3
>>

Não ir ya, a ferramenta é chamada de "IRB". Faço para obter a recompensa?

Eu só estou brincando metade. Eu escrevi esta segunda resposta para espero levar a questão de que, em Ruby, se você quer saber que algo está definido ou não, você tem que executar o código .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top