リンター ルール - セーフ アクセス演算子を使用する

この規則は、アクセス前にプロパティの存在を確認するための contains() 関数の使用を検索し、よりシンプルな自動置換を提供します。 これは、機能コードの変更を導入することなく、簡略化された同等の構文をユーザーに推奨、案内するのに役立ちます。 詳細については、「安全な逆参照演算子」を参照してください。

検索する特定のパターンは、次のとおりです。

  • プロパティ アクセスをチェックする三項演算子:

    contains(<object>, '<property>') ? <object>.<property> : <default-value>
    

    次の置換が推奨されます。

    <object>.?<property> ?? <default-value>
    
  • 変数名付きプロパティ アクセスをチェックする三項演算子:

    contains(<object>, <property-name>) ? foo[<property-name>] : <default-value>
    

    次の置換が推奨されます。

    <object>[?<property-name>] ?? <default-value>
    

リンター ルールのコード

ルール設定をカスタマイズするには、Bicep 構成ファイルで次の値を使用します。

use-safe-access

解決策

エディターのコード アクションを受け入れて、リファクターを自動的に実行します。

名前付きプロパティ アクセス

次の例では、ルールがトリガーされます。

param foo object
var test = contains(foo, 'bar') ? foo.bar : 'baz'

コード アクションを受け入れると、次の Bicep になります。

param foo object
var test = foo.?bar ?? 'baz'

変数プロパティ アクセス

次の例では、ルールがトリガーされます。

param foo object
param target string
var test = contains(foo, target) ? foo[target] : 'baz'

コード アクションを受け入れると、次の Bicep になります。

param foo object
param target string
var test = foo[?target] ?? 'baz'

問題なし

次の例では、ルールはトリガーされません。

チェックされるプロパティとアクセスされるプロパティの違い:

param foo object
var test = contains(foo, 'bar') ? foo.baz : 'baz'

チェックされる変数プロパティとアクセスされる変数プロパティの違い:

param foo object
param target string
param notTarget string
var test = contains(foo, target) ? bar[notTarget] : 'baz'

次のステップ

リンターの詳細については、「Bicep リンターの使用方法」を参照してください。