Polyglotpiranha ist ein leichter Code -Transformationstoolset zur Automatisierung von Änderungen in großem Maßstab. Bei Uber wird es meistens verwendet, um abgestandene Feature -Flaggen zu reinigen.
Wir unterstützen nur Sprachen, die bei Uber verwendet werden. Wir werden wahrscheinlich nicht in der Lage sein, in diesem Repo neue Sprachen hinzuzufügen. Es gibt eine Reihe von Gabeln (siehe https://github.com/uber/piranha/forks für eine vollständige Liste), die möglicherweise zusätzliche Funktionen liefern.
Um Polyglot Piranha zu installieren, können Sie es als Python-Bibliothek oder als Befehlszeilenwerkzeug verwenden.
Führen Sie den folgenden Befehl aus, um die Python -API zu installieren:
pip install polyglot-piranha
Befolgen Sie die folgenden Schritte, um die Befehlszeilenschnittstelle zu installieren:
git clone https://github.com/uber/piranha.git
cd piranha
cargo build --release
(oder cargo build --release --no-default-features
für macOS)target/release
generiert 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 )
Weitere Beispiele und Erklärungen für das Toolset finden Sie in unserer Demos und der erweiterten Datei polyglot_readme.md.
Feature -Flags werden üblicherweise verwendet, um ein allmähliches Rollout oder das Experimentieren mit neuen Funktionen zu aktivieren. In einigen Fällen wird auch nach dem Zweck des Flaggens der Code, der sich auf das Feature -Flag bezieht, nicht entfernt. Wir verweisen auf Flaggen wie veraltete Flaggen. Das Vorhandensein von Code, das sich auf abgestandene Flaggen bezieht, kann die folgenden Nachteile haben:
Polyglotpiranha ist ein Tool, mit dem sich automatisch Refactor -Code im Zusammenhang mit abgestandenen Flaggen bezieht. Auf einer höheren Ebene ist die Eingabe des Tools der Name des Flaggen und das erwartete Verhalten, nachdem eine Liste von APIs angegeben hat, die sich auf Flags in einer Eigenschaftendatei beziehen. Piranha verwendet diese Eingänge, um den Code automatisch nach dem erwarteten Verhalten neu zu überarbeiten.
Polyglotpiranha (ab Mai 2022) ist ein übliches Refactoring -Tool zur Unterstützung mehrerer Sprachen und Feature -Flag -APIs. Für älter sprachspezifische Implementierungen überprüfen Sie bitte das folgende Tag.
Ein paar zusätzliche Links zu Piranha:
Wenn Sie Fragen zur Verwendung von Piranha oder zur Suche nach Fehlern haben, öffnen Sie bitte ein GitHub -Problem.
Piranha ist unter der Apache 2.0 -Lizenz lizenziert. Weitere Informationen finden Sie in der Lizenzdatei.
Dies ist kein offizielles Uber -Produkt und bereitgestellt wie es ist.