Polyglotpiranha es un conjunto de herramientas de transformación de código liviano para automatizar cambios a gran escala. En Uber, se usa principalmente para limpiar banderas de características rancias.
Solo apoyamos los idiomas que se usan en Uber. Probablemente no podamos agregar nuevos idiomas en este repositorio. Hay una serie de tenedores (ver https://github.com/uber/piranha/forks para una lista completa) que pueden proporcionar características adicionales.
Para instalar Pirglot Piranha, puede usarla como una biblioteca de Python o como una herramienta de línea de comandos.
Para instalar la API de Python, ejecute el siguiente comando:
pip install polyglot-piranha
Para instalar la interfaz de línea de comandos, siga estos pasos:
git clone https://github.com/uber/piranha.git
cd piranha
cargo build --release
(o cargo build --release --no-default-features
for MacOS)target/release
from polyglot_piranha import execute_piranha , PiranhaArguments , Rule , RuleGraph , OutgoingEdges
# Original code snippet
code = """
if (obj.isLocEnabled() || x > 0) {
// do something
} else {
// do something else!
}
"""
# Define the rule to replace the method call
r1 = Rule (
name = "replace_method" ,
query = "cs :[x].isLocEnabled()" , # cs indicates we are using concrete syntax
replace_node = "*" ,
replace = "true" ,
is_seed_rule = True
)
# Define the edges for the rule graph.
# In this case, boolean_literal_cleanup is already defined for java [see src/cleanup_rules]
edge = OutgoingEdges ( "replace_method" , to = [ "boolean_literal_cleanup" ], scope = "parent" )
# Create Piranha arguments
piranha_arguments = PiranhaArguments (
code_snippet = code ,
language = "java" ,
rule_graph = RuleGraph ( rules = [ r1 ], edges = [ edge ])
)
# Execute Piranha and print the transformed code
piranha_summary = execute_piranha ( piranha_arguments )
print ( piranha_summary [ 0 ]. content )
Para obtener más ejemplos y explicaciones del conjunto de herramientas, consulte nuestras demostraciones y el archivo extendido Polyglot_readMe.md.
Las banderas de características se usan comúnmente para habilitar el despliegue gradual o experimentar con nuevas características. En algunos casos, incluso después de que se logra el propósito de la bandera, no se elimina el código relacionado con el indicador de características. Nos referimos a banderas como banderas obsoletas. La presencia de código relacionado con los indicadores rancios puede tener los siguientes inconvenientes:
Polyglotpiranha es una herramienta que puede refactorizar automáticamente el código relacionado con las banderas obsoletas. En un nivel superior, la entrada a la herramienta es el nombre de la bandera y el comportamiento esperado, después de especificar una lista de API relacionadas con las banderas en un archivo de propiedades. Piranha usará estas entradas para refactorizar automáticamente el código de acuerdo con el comportamiento esperado.
Polyglotpiranha (a partir de mayo de 2022) es una herramienta de refactorización común para admitir múltiples idiomas y apisas de bandera. Para las implementaciones específicas del lenguaje heredado, verifique la siguiente etiqueta.
Algunos enlaces adicionales en Piranha:
Si tiene alguna pregunta sobre cómo usar Piranha o encontrar algún error, abra un problema de GitHub.
Piranha tiene licencia bajo la licencia Apache 2.0. Consulte el archivo de licencia para obtener más información.
Este no es un producto oficial de Uber, y se proporciona como está.