Polyglotpiranha เป็นชุดเครื่องมือแปลงรหัสเบาสำหรับการเปลี่ยนแปลงขนาดใหญ่โดยอัตโนมัติ ที่ Uber ส่วนใหญ่จะใช้ในการทำความสะอาดธงฟีเจอร์เก่า
เราสนับสนุนเฉพาะภาษาที่ใช้ที่ Uber เราน่าจะไม่สามารถเพิ่มภาษาใหม่ใน repo นี้ได้ มีหลายส้อม (ดู https://github.com/uber/piranha/forks สำหรับรายการทั้งหมด) ที่อาจให้คุณสมบัติเพิ่มเติม
ในการติดตั้ง Polyglot Piranha คุณสามารถใช้เป็นไลบรารี Python หรือเป็นเครื่องมือบรรทัดคำสั่ง
ในการติดตั้ง Python API ให้เรียกใช้คำสั่งต่อไปนี้:
pip install polyglot-piranha
ในการติดตั้งอินเทอร์เฟซบรรทัดคำสั่งให้ทำตามขั้นตอนเหล่านี้:
git clone https://github.com/uber/piranha.git
cd piranha
cargo build --release
(หรือ cargo build --release --no-default-features
สำหรับ 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 )
สำหรับตัวอย่างเพิ่มเติมและคำอธิบายของชุดเครื่องมือโปรดตรวจสอบการสาธิตของเราและไฟล์ PolyGlot_Readme.md เพิ่มเติม
Feature Flags มักใช้เพื่อเปิดใช้งานการเปิดตัวค่อยเป็นค่อยไปหรือทดลองกับคุณสมบัติใหม่ ในบางกรณีแม้หลังจากวัตถุประสงค์ของการตั้งค่าสถานะสำเร็จแล้วรหัสที่เกี่ยวข้องกับธงฟีเจอร์จะไม่ถูกลบออก เราอ้างถึงธงเช่นธงค้าง การปรากฏตัวของรหัสที่เกี่ยวข้องกับธงค้างอาจมีข้อเสียดังต่อไปนี้:
Polyglotpiranha เป็นเครื่องมือที่สามารถเปลี่ยนรหัสใหม่ที่เกี่ยวข้องกับธงค้างได้โดยอัตโนมัติ ในระดับที่สูงขึ้นอินพุตไปยังเครื่องมือคือชื่อของธงและพฤติกรรมที่คาดหวังหลังจากระบุรายการ APIs ที่เกี่ยวข้องกับธงในไฟล์คุณสมบัติ Piranha จะใช้อินพุตเหล่านี้เพื่อ refactor รหัสโดยอัตโนมัติตามพฤติกรรมที่คาดหวัง
Polyglotpiranha (ณ เดือนพฤษภาคม 2565) เป็นเครื่องมือ refactoring ทั่วไปเพื่อรองรับหลายภาษาและฟีเจอร์ APIs สำหรับการใช้งานเฉพาะภาษาแบบดั้งเดิมโปรดตรวจสอบแท็กต่อไปนี้
ลิงค์เพิ่มเติมสองสามลิงก์บน Piranha:
หากคุณมีคำถามใด ๆ เกี่ยวกับวิธีการใช้ Piranha หรือค้นหาข้อบกพร่องใด ๆ โปรดเปิดปัญหา GitHub
Piranha ได้รับใบอนุญาตภายใต้ใบอนุญาต Apache 2.0 ดูไฟล์ใบอนุญาตสำหรับข้อมูลเพิ่มเติม
นี่ไม่ใช่ผลิตภัณฑ์ Uber อย่างเป็นทางการและมีให้ตามที่เป็นอยู่