Añadir parámetros a las anotaciones mediante acciones de reescritura
Añadir parámetros a las anotaciones mediante acciones de reescritura
En esta entrada del blog, lo haremos:
- Demostrar la búsqueda y el cotejo de anotaciones
- Anotaciones de amén mediante plantillas de bigote
Sensei ofrece la posibilidad de comparar patrones de código problemáticos y luego modificarlos según las implementaciones acordadas. En este ejemplo, estoy utilizando @Disabled sin parámetro como patrón de código problemático.
Anotación de prueba desactivada
Desactivar las pruebas sin una razón específica puede resultar problemático a largo plazo porque olvidamos por qué las desactivamos.
@Disabled
void thisTestMethodHasNoDisabledReason(){
Assertions.fail("This test is disabled and should not run");
}
El riesgo es que, con el tiempo, la base de código avanza, la prueba deshabilitada no se actualiza al ritmo del propósito del código y eventualmente se vuelve redundante e irrelevante, y potencialmente nunca se vuelve a habilitar.
Durante las revisiones de código, a menudo señalamos que es una buena idea añadir una descripción explicativa como parámetro de anotación.
@Disabled ("Disabled to demonstrate adding a reason")
void thisTestMethodHasDisabledReason(){
Assertions.fail("This test is disabled and should not run");
}
Una receta de Sensei
Podemos escribir una receta para detectar cuando se añade @Disabled sin explicación y un Quick Fix que nos recuerde que debemos añadir la razón real que explique por qué lo hemos desactivado.
Cuando pienso en lo que voy a hacer, tengo que hacerlo:
- coinciden con la anotación Disabled sin ningún parámetro
- cambiar la anotación Disabled para tener un parámetro con el texto del marcador "TODO: añadir una descripción aquí"
Crear una receta de advertencia
Uso Alt+Enter para crear una nueva receta.
A continuación, añada el texto descriptivo básico en la información general.
Al convertir la regla en una advertencia, cualquier código que coincida se resalta pero no se muestra como un error flagrante.
Encontrar la anotación
En el editor de recetas, cambio la Búsqueda para que coincida con una anotación.
Esto resaltará todas las anotaciones en la vista previa.
Una vez hecho esto, quiero filtrar por el tipo de anotación.
Podría usar simplemente Disabled pero califico completamente la clase con el paquete para que sólo coincida con la anotación de JUnit 5. Como el código fuente se muestra en la vista previa, puedo copiar y pegar esto fácilmente desde el código real para evitar cualquier error tipográfico.
A continuación, quiero hacer coincidir sólo las anotaciones sin Parámetros, y puedo utilizar la GUI para hacerlo.
es decir, la búsqueda:
search:
annotation:
type: "org.junit.jupiter.api.Disabled"
without:
parameters:
- {}
Crear una acción de reescritura rápida
Para mi QuickFix utilizaré una acción de reescritura.
Utilizo la funcionalidad de Mostrar Variables para mostrarme las variables de Mustache y previsualizar el contenido.
Y luego añado el código extra necesario para crear el comentario del marcador de posición.
es decir, QuickFix:
availableFixes:
- name: "Add a todo comment parameter"
actions:
- rewrite:
to: "{{{ . }}}(\"TODO: add a description here\")"
target: "self"
Sensei en acción
Hemos creado un breve vídeo que muestra el proceso de creación de recetas en acción.
Resumen
Cuando se construye un Quick Fix de reescritura, es más fácil cuando podemos buscar el elemento de código que queremos reescribir, porque entonces es la entidad propia sobre la que podemos actuar.
En este ejemplo, he utilizado una acción de reescritura para modificar la anotación. La reescritura es una acción de propósito general que puede aplicarse a cualquier elemento de código y es una buena opción por defecto para explorar.
Sumérjase en nuestras últimas ideas sobre codificación segura en el blog.
Nuestra amplia biblioteca de recursos tiene como objetivo potenciar el enfoque humano de la mejora de la codificación segura.
Obtenga las últimas investigaciones sobre la seguridad impulsada por los desarrolladores
Nuestra amplia biblioteca de recursos está repleta de recursos útiles, desde libros blancos hasta seminarios web, que le ayudarán a iniciarse en la codificación segura orientada a los desarrolladores. Explórela ahora.
Añadir parámetros a las anotaciones mediante acciones de reescritura
En esta entrada del blog, lo haremos:
- Demostrar la búsqueda y el cotejo de anotaciones
- Anotaciones de amén mediante plantillas de bigote
Sensei ofrece la posibilidad de comparar patrones de código problemáticos y luego modificarlos según las implementaciones acordadas. En este ejemplo, estoy utilizando @Disabled sin parámetro como patrón de código problemático.
Anotación de prueba desactivada
Desactivar las pruebas sin una razón específica puede resultar problemático a largo plazo porque olvidamos por qué las desactivamos.
@Disabled
void thisTestMethodHasNoDisabledReason(){
Assertions.fail("This test is disabled and should not run");
}
El riesgo es que, con el tiempo, la base de código avanza, la prueba deshabilitada no se actualiza al ritmo del propósito del código y eventualmente se vuelve redundante e irrelevante, y potencialmente nunca se vuelve a habilitar.
Durante las revisiones de código, a menudo señalamos que es una buena idea añadir una descripción explicativa como parámetro de anotación.
@Disabled ("Disabled to demonstrate adding a reason")
void thisTestMethodHasDisabledReason(){
Assertions.fail("This test is disabled and should not run");
}
Una receta de Sensei
Podemos escribir una receta para detectar cuando se añade @Disabled sin explicación y un Quick Fix que nos recuerde que debemos añadir la razón real que explique por qué lo hemos desactivado.
Cuando pienso en lo que voy a hacer, tengo que hacerlo:
- coinciden con la anotación Disabled sin ningún parámetro
- cambiar la anotación Disabled para tener un parámetro con el texto del marcador "TODO: añadir una descripción aquí"
Crear una receta de advertencia
Uso Alt+Enter para crear una nueva receta.
A continuación, añada el texto descriptivo básico en la información general.
Al convertir la regla en una advertencia, cualquier código que coincida se resalta pero no se muestra como un error flagrante.
Encontrar la anotación
En el editor de recetas, cambio la Búsqueda para que coincida con una anotación.
Esto resaltará todas las anotaciones en la vista previa.
Una vez hecho esto, quiero filtrar por el tipo de anotación.
Podría usar simplemente Disabled pero califico completamente la clase con el paquete para que sólo coincida con la anotación de JUnit 5. Como el código fuente se muestra en la vista previa, puedo copiar y pegar esto fácilmente desde el código real para evitar cualquier error tipográfico.
A continuación, quiero hacer coincidir sólo las anotaciones sin Parámetros, y puedo utilizar la GUI para hacerlo.
es decir, la búsqueda:
search:
annotation:
type: "org.junit.jupiter.api.Disabled"
without:
parameters:
- {}
Crear una acción de reescritura rápida
Para mi QuickFix utilizaré una acción de reescritura.
Utilizo la funcionalidad de Mostrar Variables para mostrarme las variables de Mustache y previsualizar el contenido.
Y luego añado el código extra necesario para crear el comentario del marcador de posición.
es decir, QuickFix:
availableFixes:
- name: "Add a todo comment parameter"
actions:
- rewrite:
to: "{{{ . }}}(\"TODO: add a description here\")"
target: "self"
Sensei en acción
Hemos creado un breve vídeo que muestra el proceso de creación de recetas en acción.
Resumen
Cuando se construye un Quick Fix de reescritura, es más fácil cuando podemos buscar el elemento de código que queremos reescribir, porque entonces es la entidad propia sobre la que podemos actuar.
En este ejemplo, he utilizado una acción de reescritura para modificar la anotación. La reescritura es una acción de propósito general que puede aplicarse a cualquier elemento de código y es una buena opción por defecto para explorar.