Polyglotpiranha는 대규모 변경을 자동화하기위한 가벼운 코드 변환 도구 세트입니다. Uber에서는 주로 오래된 기능 깃발을 정리하는 데 사용됩니다.
우리는 Uber에서 사용되는 언어 만 지원합니다. 우리는이 리포지어에서 새로운 언어를 추가 할 수 없을 것입니다. 추가 기능을 제공 할 수있는 많은 포크 (전체 목록은 https://github.com/uber/piranha/forks 참조)가 있습니다.
Polyglot Piranha를 설치하려면 파이썬 라이브러리 또는 명령 줄 도구로 사용할 수 있습니다.
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
)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 년 5 월 현재)는 여러 언어를 지원하고 플래그 API를 특징으로하는 일반적인 리팩토링 도구입니다. 레거시 언어 별 구현은 다음 태그를 확인하십시오.
Piranha에 대한 몇 가지 추가 링크 :
Piranha를 사용하거나 버그를 찾는 방법에 대한 궁금한 점이 있으면 Github 문제를여십시오.
Piranha는 Apache 2.0 라이센스에 따라 라이센스가 부여됩니다. 자세한 내용은 라이센스 파일을 참조하십시오.
이것은 공식적인 우버 제품이 아니며 그대로 제공됩니다.