Rewriteアクションによるアノテーションへのパラメータ追加
Rewriteアクションによるアノテーションへのパラメータ追加
このブログ記事では、私たちは
- アノテーションの検索と照合のデモンストレーション
- ヒゲのテンプレートを使ったアノテーション
Sensei は、問題のあるコードパターンを照合して、合意した実装に修正する機能を提供します。この例では、@Disabled without a parameterを問題のあるコードパターンとして使用しています。
無効化テストのアノテーション
特定の理由なしにテストを無効にすると、無効にした理由を忘れてしまうため、長期的には問題となります。
@Disabled
void thisTestMethodHasNoDisabledReason(){
Assertions.fail("This test is disabled and should not run");
}
リスクとしては、時間の経過とともにコードベースが移動し、無効化されたテストがコードの目的に合わせて更新されず、最終的には冗長で無意味なものとなり、再び有効化されない可能性があることです。
コードレビューでは、アノテーションパラメータとして説明文を追加すると良いと指摘されることがあります。
@Disabled ("Disabled to demonstrate adding a reason")
void thisTestMethodHasDisabledReason(){
Assertions.fail("This test is disabled and should not run");
}
Sensei レシピ
説明なしに@Disabledが追加されたことを検知するレシピと、なぜ無効にしたのかを説明する実際の理由を追加するように思い出させるQuick Fixを書くことができます。
自分が何をしようかと考えたときに
- パラメータなしでDisabledアノテーションにマッチ
- TODO: add a description here "というマーカーテキストのパラメータを持つようにDisabledアノテーションを変更しました。
ワーニングレシピの作成
私はAlt+Enterで新しいレシピを作成しています。
そして、一般情報の中に基本的な説明文を追加します。
ルールを警告にすることで、一致するコードはハイライトされますが、明らかなエラーとしては表示されません。
アノテーションの検索
レシピエディターでは、「検索」をアノテーションに合わせて変更します。
これにより、プレビューに表示されているすべての注釈がハイライトされます。
そうすると、今度はアノテーションの種類でフィルタリングしたくなります。
Disabled を使うこともできますが、クラスをパッケージで完全に修飾することで、JUnit 5 のアノテーションにのみ合致するようにしています。プレビューではソースコードが表示されているので、実際のコードから簡単にコピー&ペーストして、タイプミスを防ぐことができます。
そして、Parametersのないアノテーションだけをマッチさせたいのですが、これはGUIでできます。
i.e.検索
search:
annotation:
type: "org.junit.jupiter.api.Disabled"
without:
parameters:
- {}
リライトクイックフィックスアクションの作成
今回のQuickFixでは、リライトアクションを使用します。
変数の表示機能を使って、Mustacheの変数を表示し、内容をプレビューしています。
そして、プレースマーカーのコメントを作成するために必要な追加のコードを追加します。
i.e. QuickFix。
availableFixes:
- name: "Add a todo comment parameter"
actions:
- rewrite:
to: "{{{ . }}}(\"TODO: add a description here\")"
target: "self"
Sensei 活動中
レシピ作成の様子を短い動画でご紹介します。
概要
書き換えクイックフィックスを構築する際には、書き換えたいコード要素を検索できれば、それが行動できる自己の実体となるため、より簡単になります。
この例では、リライトアクションを使ってアノテーションを修正しました。Rewriteは、どんなコード要素にも適用できる汎用的なアクションであり、デフォルトで使用するのに適しています。
セキュアコーディングに関する最新の知見をブログでご紹介しています。
当社の豊富なリソースライブラリは、安全なコーディングアップスキルに対する人間的なアプローチを強化することを目的としています。
開発者主導のセキュリティに関する最新の研究成果を入手する
ホワイトペーパーからウェビナーまで、開発者主導のセキュアコーディングを始めるために役立つリソースが満載のリソースライブラリです。今すぐご覧ください。
Rewriteアクションによるアノテーションへのパラメータ追加
このブログ記事では、私たちは
- アノテーションの検索と照合のデモンストレーション
- ヒゲのテンプレートを使ったアノテーション
Sensei は、問題のあるコードパターンを照合して、合意した実装に修正する機能を提供します。この例では、@Disabled without a parameterを問題のあるコードパターンとして使用しています。
無効化テストのアノテーション
特定の理由なしにテストを無効にすると、無効にした理由を忘れてしまうため、長期的には問題となります。
@Disabled
void thisTestMethodHasNoDisabledReason(){
Assertions.fail("This test is disabled and should not run");
}
リスクとしては、時間の経過とともにコードベースが移動し、無効化されたテストがコードの目的に合わせて更新されず、最終的には冗長で無意味なものとなり、再び有効化されない可能性があることです。
コードレビューでは、アノテーションパラメータとして説明文を追加すると良いと指摘されることがあります。
@Disabled ("Disabled to demonstrate adding a reason")
void thisTestMethodHasDisabledReason(){
Assertions.fail("This test is disabled and should not run");
}
Sensei レシピ
説明なしに@Disabledが追加されたことを検知するレシピと、なぜ無効にしたのかを説明する実際の理由を追加するように思い出させるQuick Fixを書くことができます。
自分が何をしようかと考えたときに
- パラメータなしでDisabledアノテーションにマッチ
- TODO: add a description here "というマーカーテキストのパラメータを持つようにDisabledアノテーションを変更しました。
ワーニングレシピの作成
私はAlt+Enterで新しいレシピを作成しています。
そして、一般情報の中に基本的な説明文を追加します。
ルールを警告にすることで、一致するコードはハイライトされますが、明らかなエラーとしては表示されません。
アノテーションの検索
レシピエディターでは、「検索」をアノテーションに合わせて変更します。
これにより、プレビューに表示されているすべての注釈がハイライトされます。
そうすると、今度はアノテーションの種類でフィルタリングしたくなります。
Disabled を使うこともできますが、クラスをパッケージで完全に修飾することで、JUnit 5 のアノテーションにのみ合致するようにしています。プレビューではソースコードが表示されているので、実際のコードから簡単にコピー&ペーストして、タイプミスを防ぐことができます。
そして、Parametersのないアノテーションだけをマッチさせたいのですが、これはGUIでできます。
i.e.検索
search:
annotation:
type: "org.junit.jupiter.api.Disabled"
without:
parameters:
- {}
リライトクイックフィックスアクションの作成
今回のQuickFixでは、リライトアクションを使用します。
変数の表示機能を使って、Mustacheの変数を表示し、内容をプレビューしています。
そして、プレースマーカーのコメントを作成するために必要な追加のコードを追加します。
i.e. QuickFix。
availableFixes:
- name: "Add a todo comment parameter"
actions:
- rewrite:
to: "{{{ . }}}(\"TODO: add a description here\")"
target: "self"
Sensei 活動中
レシピ作成の様子を短い動画でご紹介します。
概要
書き換えクイックフィックスを構築する際には、書き換えたいコード要素を検索できれば、それが行動できる自己の実体となるため、より簡単になります。
この例では、リライトアクションを使ってアノテーションを修正しました。Rewriteは、どんなコード要素にも適用できる汎用的なアクションであり、デフォルトで使用するのに適しています。