Encontre methods não utilizados, Classes , CONSTANTS , @instance_variables , @@class_variables e $global_variables em seus projetos de rubi.
Código que nunca é executado é o código que você não precisa manter
As sobras usarão a análise estática para encontrar esses bits de código para você.
Está ciente de como algumas jóias chamam métodos para você, incluindo suporte para muitos trilhos.
Adicione esta linha ao GemFile do seu aplicativo:
gem 'leftovers' , require : falseE depois execute:
$ bundle
Ou instale você mesmo como:
$ gem install leftovers
Execute leftovers em sua linha de comando na raiz do seu projeto. Isso produzirá progresso à medida que coleta as chamadas/referências e definições em seu projeto. Em seguida, produzirá quaisquer métodos definidos (ou classes etc.) que não são chamados.
$ leftovers
checked 25 files, collected 2473 calls, 262 definitions
Only directly called in tests:
lib/hello_world.rb:10:6 tested_unused_method def tested_unused_method
lib/hello_world.rb:18:6 another_tested_unused_method def another_tested_unused_method
Not directly called at all:
lib/hello_world.rb:6:6 generated_method= attr_accessor :generated_method
lib/hello_world.rb:6:6 generated_method attr_accessor :generated_method
how to resolve: https://github.com/robotdana/leftovers/tree/main/Readme.md#how-to-resolve
Se houver um número esmagador de resultados, tente usar --write-todo
Ao executar leftovers , você receberá uma lista de definições de método, constante e variável que acha que não são utilizadas. Agora o quê?
Eles ficaram sem querer ao remover suas ligações:
Eles são chamados dinamicamente:
# leftovers:call my_unused_method ; ou# leftovers:keepEles são definidos intencionalmente apenas para serem usados apenas por testes:
# leftovers:test_onlyEles são de um arquivo que não deve ser verificado por sobras:
exclude_paths: list no arquivo .leftovers.yml Se houver muitos para abordar quando adicionar as sobras ao seu projeto, tente correr leftovers --write-todo ,
leftovers --write-todo gerarão um arquivo de configuração suplementar, permitindo todas as definições não prejudicadas atualmente detectadas, que serão lidas nas execuções subsequentes de leftovers sem alertar nenhum dos itens mencionados nele.
Comprometa esse arquivo para que você/sua equipe possa abordar gradualmente esses itens, enquanto ainda está com as sobras de alerta para qualquer itens recém -utilizados.
# leftovers:keep Aliases leftovers:keeps , leftovers:skip , leftovers:skips , leftovers:skipped , leftovers:allow , leftovers:allows , leftovers:allowed marcar uma definição de método como não utilizada, adicione o comentário # leftovers:keep com a mesma linha que a definição
class MyClass
def my_method # leftovers:keep
true
end
end Isso relataria que MyClass não é utilizada, mas não o My_Method para fazer isso para todas as definições desse nome, em vez de adicionar um comentário, adicione o nome à lista de keep: Keep no arquivo de configuração.
# leftovers:test_only Aliases leftovers:for_test , leftovers:for_tests , leftovers:test , leftovers:tests , leftovers:testing
Para marcar uma definição de um dir não-teste, como intencionalmente usado apenas pelos testes, use leftovers:test_only
# app/my_class.rb
class MyClass
def my_method # leftovers:test_only
true
end
end # spec/my_class_spec.rb
describe MyClass do
it { expect ( subject . my_method ) . to be true }
end Isso consideraria my_method a ser usado, mesmo que seja chamado apenas pelos testes.
Para fazer isso para todas as definições desse nome, em vez de adicionar um comentário, adicione o nome ao test_only: list no arquivo de configuração.
# leftovers:call Aliases leftovers:calls para marcar uma chamada que não use valores literais, use leftovers:call com o nome do método listado
method = [ :puts , :warn ] . sample # leftovers:call puts, warn
send ( method , 'text' ) Isso consideraria puts e warn os dois foram chamados
# leftovers:dynamic:* Para marcar um apelo dinâmico para valores de hash literal e matriz sem enumerar tudo no comentário novamente, use leftovers:dynamic: na mesma linha que o início da matriz ou hash
[ # leftovers:dynamic:call_attributes
:user ,
:admin
] . map { | method | send ( " #{ method } _attributes" ) } Com a seguinte configuração correspondendo ao name: value às leftovers:dynamic:process_name
dynamic :
name : call_attributes
arguments : ' * '
add_suffix : ' _attributes ' Isso consideraria user_attributes e admin_attributes para ambos foram chamados.
A configuração é lida no .leftovers.yml em sua raiz do projeto. Sua presença é opcional e todas essas configurações são opcionais.
include_paths:exclude_paths:test_paths:requires:precompile:gems:keep:test_only:dynamic:Consulte a documentação completa de configuração para obter detalhes. Consulte os arquivos de configuração embutidos ou a própria configuração deste repo para obter exemplos.
As sobras relatarão métodos/constantes que você define que são chamados fora do seu código (talvez por gemas) como não utilizados
Adicione esses nomes à keep: Lista no .leftovers.yml ou adicione um comentário embutido com # leftovers:allow my_method_name
As sobras não executam seu código, por isso não está ciente das variáveis por exemplo nas chamadas para send (por exemplo send(variable_method_name) ). (Está ciente das chamadas estáticas (por exemplo send(:my_method_name) ); portanto, usar o método de envio para ignorar o método é "fino")
Adicione o método/padrão à dynamic: listar com skip: true no .leftovers.yml ou adicione um comentário embutido com a lista de possibilidades # leftovers:call my_method_1, my_method_2 .
As sobras se comparam apenas pelo nome, portanto, várias definições com o mesmo nome serão contadas conforme usado, mesmo que apenas uma seja.
Os números de linha e coluna Haml, Slim & Erb estarão errados, pois os arquivos precisam ser pré -compilados antes de verificar.
Chamadas e definições dinâmicas com base em valores copiados pelo método Rails with_options não são capturados pelas sobras.
Depois de verificar o repositório, execute bin/setup para instalar dependências. Em seguida, execute rake spec para executar os testes.
Para instalar esta gema na sua máquina local, execute bundle exec rake install .
Relatórios de bug e solicitações de tração são bem -vindos no github em https://github.com/robotdana/leftovers.
Encorajo especialmente questões e melhorias na configuração padrão, seja expandindo a configuração existente/*. YML ou adicionando novas jóias. O arquivo deve ser nomeado [rubygems name].yml e sua estrutura é idêntica à configuração do projeto
A GEM está disponível como código aberto nos termos da licença do MIT.