Onde posso encontrar uma ferramenta lint ativamente desenvolvido para Ruby?
-
05-07-2019 - |
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.
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 .