O POLELOTPIRANHA é um conjunto de ferramentas de transformação de código leve para automatizar alterações em larga escala. No Uber, é usado principalmente para limpar sinalizadores de recursos obsoletos.
Apoiamos apenas idiomas usados no Uber. Provavelmente não poderemos adicionar novos idiomas neste repositório. Existem vários garfos (consulte https://github.com/uber/piranha/forks para uma lista completa) que podem fornecer recursos adicionais.
Para instalar o Poliglot Piranha, você pode usá-lo como uma biblioteca Python ou como uma ferramenta de linha de comando.
Para instalar a API Python, execute o seguinte comando:
pip install polyglot-piranha
Para instalar a interface da linha de comando, siga estas etapas:
git clone https://github.com/uber/piranha.git
cd piranha
cargo build --release
(ou cargo build --release --no-default-features
para 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 mais exemplos e explicações do conjunto de ferramentas, consulte nossas demos e estendido do arquivo poliGlot_readme.md.
Os sinalizadores de recursos são comumente usados para ativar o lançamento gradual ou experimentar novos recursos. Em alguns casos, mesmo após o objetivo do sinalizador ser realizado, o código referente ao sinalizador de recursos não é removido. Nós nos referimos a sinalizadores como bandeiras obsoletas. A presença de código referente a bandeiras obsoletas pode ter as seguintes desvantagens:
O Polyglotpiranha é uma ferramenta que pode refatorar automaticamente o código relacionado a sinalizadores obsoletos. Em um nível superior, a entrada para a ferramenta é o nome do sinalizador e o comportamento esperado, depois de especificar uma lista de APIs relacionadas a sinalizadores em um arquivo de propriedades. A Piranha usará esses insumos para refatorar automaticamente o código de acordo com o comportamento esperado.
O Polyglotpiranha (em maio de 2022) é uma ferramenta de refatoração comum para suportar vários idiomas e apresentar APIs de sinalizador. Para implementações específicas do idioma herdado, verifique a tag a seguir.
Alguns links adicionais sobre Piranha:
Se você tiver alguma dúvida sobre como usar o Piranha ou encontrar bugs, abra um problema do GitHub.
A Piranha é licenciada sob a licença Apache 2.0. Consulte o arquivo de licença para obter mais informações.
Este não é um produto oficial do Uber e, como está.