Polyglotpiranha adalah toolset transformasi kode ringan untuk mengotomatisasi perubahan skala besar. Di Uber, sebagian besar digunakan untuk membersihkan bendera fitur basi.
Kami hanya mendukung bahasa yang digunakan di Uber. Kami mungkin tidak akan dapat menambahkan bahasa baru dalam repo ini. Ada sejumlah garpu (lihat https://github.com/uber/piranha/forks untuk daftar lengkap) yang dapat memberikan fitur tambahan.
Untuk menginstal polyglot piranha, Anda dapat menggunakannya sebagai pustaka python atau sebagai alat baris perintah.
Untuk menginstal API Python, jalankan perintah berikut:
pip install polyglot-piranha
Untuk menginstal antarmuka baris perintah, ikuti langkah-langkah ini:
git clone https://github.com/uber/piranha.git
cd piranha
cargo build --release
(atau cargo build --release --no-default-features
UNTUK 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 )
Untuk lebih banyak contoh dan penjelasan toolset, silakan periksa demo kami dan file polyglot_readme.md yang diperluas.
Bendera fitur biasanya digunakan untuk mengaktifkan peluncuran secara bertahap atau bereksperimen dengan fitur baru. Dalam beberapa kasus, bahkan setelah tujuan bendera tercapai, kode yang berkaitan dengan bendera fitur tidak dihapus. Kami menyebut bendera seperti bendera basi. Kehadiran kode yang berkaitan dengan bendera basi dapat memiliki kelemahan berikut:
Polyglotpiranha adalah alat yang secara otomatis dapat refactor kode yang terkait dengan bendera basi. Pada tingkat yang lebih tinggi, input ke alat adalah nama bendera dan perilaku yang diharapkan, setelah menentukan daftar API yang terkait dengan bendera dalam file properti. Piranha akan menggunakan input ini untuk secara otomatis refactor kode sesuai dengan perilaku yang diharapkan.
Polyglotpiranha (pada Mei 2022) adalah alat refactoring yang umum untuk mendukung berbagai bahasa dan API bendera fitur. Untuk implementasi khusus bahasa lama, silakan periksa tag berikut.
Beberapa tautan tambahan di piranha:
Jika Anda memiliki pertanyaan tentang cara menggunakan piranha atau menemukan bug, buka masalah github.
Piranha dilisensikan di bawah lisensi Apache 2.0. Lihat file lisensi untuk informasi lebih lanjut.
Ini bukan produk Uber resmi, dan disediakan apa adanya.