Encuentre methods , Classes , CONSTANTS , @instance_variables no utilizados, @@class_variables y $global_variables en sus proyectos Ruby.
El código que nunca se ejecuta es el código que no debería necesitar mantener
Las sobras utilizarán el análisis estático para encontrar estos bits de código para usted.
Es consciente de cómo algunas gemas llaman métodos para usted, incluido el soporte para gran parte de los rieles.
Agregue esta línea al archivo gem de su aplicación:
gem 'leftovers' , require : falseY luego ejecutar:
$ bundle
O instálelo usted mismo como:
$ gem install leftovers
Ejecute leftovers en su línea de comando en la raíz de su proyecto. Esto generará progreso a medida que recopile las llamadas/referencias y definiciones en su proyecto. Luego generará cualquier método definido (o clases, etc.) que no se llame.
$ 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
Si hay un número abrumador de resultados, intente usar --write-todo
Al ejecutar leftovers , se le dará una lista de definiciones de método, constante y variable que cree que no se utilizan. ¿Ahora que?
Se quedaron involuntariamente al retirar sus llamadas:
Se llaman dinámicamente:
# leftovers:call my_unused_method ; o# leftovers:keepSe definen intencionalmente para ser utilizados solo por pruebas:
# leftovers:test_onlySon de un archivo que no debe ser verificado por las sobras:
exclude_paths: en el archivo .lettovers.yml Si hay demasiados para abordar al agregar por primera vez las sobras a su proyecto, intente ejecutar leftovers --write-todo ,
Ejecutando leftovers --write-todo generará un archivo de configuración suplementario que permite todas las definiciones no detectadas actualmente, que se leerán en ejecuciones posteriores de leftovers sin alertar ninguno de los elementos mencionados en él.
Configure este archivo para que usted/su equipo pueda abordar gradualmente estos elementos mientras que las sobras lo alertarán sobre cualquier elemento recién no utilizado.
# leftovers:keep alias leftovers:keeps , leftovers:skip , leftovers:skips , leftovers:skipped , leftovers:allow , leftovers:allows , leftovers:allowed marcar una definición de método como no se usa, agregue el comentario # leftovers:keep la misma línea que la definición
class MyClass
def my_method # leftovers:keep
true
end
end Esto informaría que MyClass no se usa, pero no my_method para hacer esto para todas las definiciones de este nombre, en lugar de agregar un comentario, agregue el nombre a la lista keep: en el archivo de configuración.
# leftovers:test_only leftovers:for_test , leftovers:for_tests , leftovers:test , leftovers:tests , leftovers:testing
Para marcar una definición de un directorio de no prueba, como lo usan intencionalmente las pruebas, 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 Esto consideraría que se usa my_method , a pesar de que solo se llama por las pruebas.
Para hacer esto para todas las definiciones de este nombre, en lugar de agregar un comentario, agregue el nombre al test_only: lista en el archivo de configuración.
# leftovers:call leftovers:calls para marcar una llamada que no usa valores literal, use leftovers:call con el nombre del método enumerado
method = [ :puts , :warn ] . sample # leftovers:call puts, warn
send ( method , 'text' ) Esto consideraría que puts y warn que ambos han sido llamados
# leftovers:dynamic:* Para marcar un llamado dinámico para el hash literal y los valores de matriz sin enumerar todo en el comentario nuevamente, use leftovers:dynamic: en la misma línea que el comienzo de la matriz o el hash
[ # leftovers:dynamic:call_attributes
:user ,
:admin
] . map { | method | send ( " #{ method } _attributes" ) } con la siguiente configuración que coincide con el name: value a las leftovers:dynamic:process_name
dynamic :
name : call_attributes
arguments : ' * '
add_suffix : ' _attributes ' Esto consideraría user_attributes y admin_attributes a ambos.
La configuración se lee de .leftovers.yml en la raíz de su proyecto. Su presencia es opcional y todas estas configuraciones son opcionales.
include_paths:exclude_paths:test_paths:requires:precompile:gems:keep:test_only:dynamic:Consulte la documentación de configuración completa para obtener más detalles. Consulte los archivos de configuración incorporados o la configuración de este repositorio para ejemplos.
Las sobras informarán métodos/constantes que define que se llaman fuera de su código (tal vez por gemas) como no utilizados
Agregue estos nombres a la keep: Lista en .leftovers.yml o agregue un comentario en línea con # leftovers:allow my_method_name
Las sobras no ejecutan su código, por lo que no es consciente de las variables de EG en las llamadas para send (por ejemplo, send(variable_method_name) ). (es consciente de las llamadas estáticas (por ejemplo, send(:my_method_name) ), por lo que usar el método de bypass de envío para bypass está "bien")
Agregue el método/patrón a la dynamic: Lista con skip: true en .leftovers.yml , o agregue un comentario en línea con la lista de posibilidades # leftovers:call my_method_1, my_method_2 .
Las sobras se comparan solo por nombre, por lo que las definiciones múltiples con el mismo nombre contarán como se usa incluso si solo una lo es.
Los números de línea y columna Haml, Slim & Erb estarán mal ya que los archivos deben precompilarse antes de verificar.
Las llamadas dinámicas y las definiciones basadas en valores copiados por el método de rieles with_options no son capturadas por las sobras.
Después de revisar el repositorio, ejecute bin/setup para instalar dependencias. Luego, ejecute rake spec para ejecutar las pruebas.
Para instalar esta gema en su máquina local, ejecute bundle exec rake install .
Los informes de errores y las solicitudes de extracción son bienvenidas en GitHub en https://github.com/robotdana/leftovers.
Fomento especialmente los problemas y mejoras en la configuración predeterminada, ya sea expandiendo la configuración existente/*. YML o agregando nuevas gemas. El archivo debe llamarse [rubygems name].yml y su estructura es idéntica a la configuración del proyecto
La gema está disponible como código abierto bajo los términos de la licencia MIT.