

O Rubycritic é uma jóia que envolve gemas de análise estática, como Reek, Flay e Flog, para fornecer um relatório de qualidade do seu código Ruby.
Esta jóia fornece recursos como:
Uma visão geral do seu projeto: 
Um índice dos arquivos do projeto com seu respectivo número de cheiros: 
Um índice dos cheiros detectados: 
Ao analisar o código como o seguinte:
class Dirty
def awful ( x , y )
if y
@screen = widgets . map { | w | w . each { | key | key += 3 } }
end
end
endBasicamente, vira algo assim:

Em algo assim:

Ele usa seu sistema de controle de origem (apenas o Git, o Mercurial e o Perforce são suportados no momento) para comparar suas alterações atualmente não comprometidas com o seu último compromisso.
Aviso : se o seu código não for, como você espera que seja após a execução do rubycrítico, verifique o esconderijo do sistema de controle de origem.
Confira os /docs se você quiser ler mais sobre nossas métricas principais.
Rubycrítico pode ser instalado com o seguinte comando:
$ gem install rubycriticSe você preferir instalar o rubycrítico usando o Bundler, adicione esta linha ao gemfile do seu aplicativo:
gem "rubycritic" , require : falseE depois execute:
$ bundle Executar rubycritic sem argumentos analisará todos os arquivos Ruby no diretório atual:
$ rubycritic Como alternativa, você pode passar rubycritic uma lista de arquivos e diretórios. A análise será escopo para os arquivos e diretórios fornecidos:
$ rubycritic app lib/foo.rbPara uma lista completa das opções de linha de comando, execute:
$ rubycritic --help| Sinalizador de comando | Descrição |
|---|---|
-v / --version | Exibe a versão atual e sai |
-p / --path | Defina o caminho onde o relatório será salvo (TMP/Rubycrítico por padrão) |
--coverage-path | Defina o caminho onde o SimpleCov será salvo (./cobragem por padrão) |
-f / --format | Relatório cheira no (s) formato (s) 1 (s) 1 (s) 1 |
--custom-format path:classname | Carregar e instanciar formatadores personalizados 2 |
-s / --minimum-score | Defina uma pontuação mínima (Float: Ex: 96.28), Padrão: 0 |
-m / --mode-ci | Use o modo CI 3 |
-b / --branch | Defina a filial para comparar |
-t / --maximum-decrease | Limiar para a diferença de pontuação entre duas filiais 4 |
--deduplicate-symlinks | Dupliques de desdupliques com base em seu alvo final |
--suppress-ratings | Suprimir as classificações de cartas |
--no-browser | Não abra relatório HTML com o navegador |
html (padrão; será aberto em um navegador)jsonconsolelint-b-b , padrão: 0 Você também pode usar um arquivo de configuração. Basta criar um .rubycritic.yml no caminho da raiz do seu projeto.
Aqui estão um exemplo:
mode_ci :
enabled : true # default is false
branch : ' production ' # default is main
branch : ' production ' # default is main
path : ' /tmp/mycustompath ' # Set path where report will be saved (tmp/rubycritic by default)
coverage_path : ' /tmp/coverage ' # Set path where SimpleCov coverage will be saved (./coverage by default)
threshold_score : 10 # default is 0
deduplicate_symlinks : true # default is false
suppress_ratings : true # default is false
no_browser : true # default is false
formats : # Available values are: html, json, console, lint. Default value is html.
- console
minimum_score : 95 # default is 0
paths : # Files to analyse. Churn calculation is scoped to these files when using Git SCM.
- ' app/controllers/ '
- ' app/models/ 'Reek : RubyCritic utiliza o mecanismo de carregamento de configuração padrão de Reek . Isso significa que, se você tiver um arquivo de configuração Reek existente, basta colocá -lo na raiz do projeto e RubyCritic respeitará essa configuração.flay : Usamos a configuração padrão de flay .flog : Usamos a configuração padrão da flog com alguns ajustes menores:all : forças flog a relatar pontuações em todas as classes e métodos. Sem essa opção, flog fornecerá apenas resultados até um certo limite.continue : faz com que flog não aborta quando um arquivo rubi não pode ser analisado.methods : configura flog para pular o código fora dos métodos. Isso impede que flog relate os "métodos" private e protected . Também impede que flog relate métodos de Rails como before_action e has_many .Se você gosta de guarda, poderá gostar de guarda-guarda. Ele analisa automaticamente seus arquivos Ruby à medida que são modificados.
Para integração contínua, você pode dar uma volta a Jenkins. Com ele, você pode facilmente construir seu próprio clima de código (pobre-homem)!
Você pode usar o comando rubycrítico como rake em sua forma mais simples como esta:
require "rubycritic/rake_task"
RubyCritic :: RakeTask . newUma tarefa de rake mais sofisticada que usaria todas as opções de configuração disponíveis pode ser assim:
RubyCritic :: RakeTask . new do | task |
# Name of RubyCritic task. Defaults to :rubycritic.
task . name = 'something_special'
# Glob pattern to match source files. Defaults to FileList['.'].
task . paths = FileList [ 'vendor/**/*.rb' ]
# You can pass all the options here in that are shown by "rubycritic -h" except for
# "-p / --path" since that is set separately. Defaults to ''.
task . options = '--mode-ci --format json'
# Defaults to false
task . verbose = true
# Fail the Rake task if RubyCritic doesn't pass. Defaults to true
task . fail_on_error = true
endO Rubycrítico tentará abrir o relatório gerado com um navegador por padrão. Se você não quiser isso, pode impedir esse comportamento definindo as opções correspondentemente:
RubyCritic :: RakeTask . new do | task |
task . options = '--no-browser'
endSe você deseja criar várias tarefas de rake (por exemplo, para configuração local e específica de CI), você pode fazê-lo! Se você decidir fazer isso, deve fornecer uma descrição mais clara para cada tarefa:
# for local
RubyCritic :: RakeTask . new ( "local" , "Run RubyCritic (local configuration)" do | task |
# ...
end
# for CI
RubyCritic :: RakeTask . new ( "ci" , "Run RubyCritic (CI configuration)" do | task |
task . options = "--mode-ci"
# ...
end Veja os formatados
Rubycrítico está apoiando versões Ruby:
| Versão Ruby | Versão rubycrítica mais recente |
|---|---|
| 2.4 | v4.7.0 |
| 2.5 | v4.7.0 |
| 2.6 | v4.7.0 |
| 2.7 | v4.9.x |
| 3.0 | mais recente |
| 3.1 | mais recente |
| 3.2 | mais recente |
| 3.3 | mais recente |
O rubycrítico não precisa permanecer uma segunda opção para outros serviços de análise de qualidade de código. Juntos, podemos melhorá -lo e continuar construindo as ótimas ferramentas métricas de código que estão disponíveis no ecossistema Ruby.
Indiscutivelmente, a gema Better_errors só ficou popular depois de receber uma solicitação de puxar (bastante impressionante) que mudou o design da página.
Da mesma forma, puxe solicitações que melhorem a aparência da jóia, que ajustem o cálculo das classificações ou que corrigem os problemas existentes serão bem -vindos. Apenas comentar sobre um problema e dar algumas dicas sobre como algo deve funcionar será apreciado. Nenhuma contribuição é muito pequena.
Veja as diretrizes contribuintes da Rubycritic sobre como proceder.
O autor inicial RubyCritics era Guilherme Simões.
A equipe principal atual é composta por:

O rubycrítico é mantido e financiado pela Whitesmith. Tweet suas perguntas ou sugestões para @WhitesMithco.