Polyglotpiranha - это легкий набор инструментов преобразования кода для автоматизации крупномасштабных изменений. В Uber он в основном используется для очистки флагов устаревших функций.
Мы поддерживаем только языки, которые используются в Uber. Скорее всего, мы не сможем добавить новые языки в этом репо. Есть несколько вилок (см. 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.
Флаги функций обычно используются для обеспечения постепенного развертывания или эксперимента с новыми функциями. В некоторых случаях, даже после достижения цели флага, код, относящийся к флагу объектов, не удален. Мы ссылаемся на такие флаги, как устаревшие флаги. Наличие кода, относящегося к устаревшим флагам, может иметь следующие недостатки:
Polyglotpiranha - это инструмент, который может автоматически рефракторный код, связанный с устаревшими флагами. На более высоком уровне вход в инструмент - это имя флага и ожидаемого поведения, после указания списка API, связанных с флагами в файле свойств. Piranha будет использовать эти входы для автоматического рефакторирования кода в соответствии с ожидаемым поведением.
Polyglotpiranha (по состоянию на май 2022 г.) является распространенным инструментом рефакторинга для поддержки нескольких языков и API -интерфейсов флагов. На устаревших реализациях, пожалуйста, проверьте следующую тег.
Несколько дополнительных ссылок на Piranha:
Если у вас есть какие -либо вопросы о том, как использовать Piranha или найти какие -либо ошибки, откройте проблему GitHub.
Piranha лицензирована по лицензии Apache 2.0. См. Файл лицензии для получения дополнительной информации.
Это не официальный продукт Uber, и предоставляется как есть.