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
)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ライセンスに基づいてライセンスされています。詳細については、ライセンスファイルを参照してください。
これは公式のUber製品ではなく、そのまま提供されます。