Dela via


Linter-regel – använd operatorn för säker åtkomst

Den här regeln söker efter användningen av contains() funktionen för att kontrollera att egenskapen finns före åtkomst och ger en enklare automatisk ersättning. Det används för att rekommendera och introducera användare till en förenklad motsvarande syntax utan att införa några funktionella kodändringar. Mer information finns i Säker dereferenceoperator.

De specifika mönster som den letar efter är:

  • Operatorn Ternary för att söka efter egenskapsåtkomst:

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

    Följande ersättning föreslås:

    <object>.?<property> ?? <default-value>
    
  • Operatorn Ternary för att söka efter egenskapsåtkomst med variabelnamn:

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

    Följande ersättning föreslås:

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

Linterregelkod

Om du vill anpassa regelinställningar använder du följande värde i Bicep-konfigurationsfilen:

use-safe-access

Lösning

Godkänn redigeringskodåtgärden för att automatiskt utföra refaktorn.

Exempel

Namngiven egenskapsåtkomst

Följande exempel utlöser regeln:

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

Om du godkänner kodåtgärden resulterar det i följande Bicep:

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

Åtkomst till variabelegenskap

Följande exempel utlöser regeln:

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

Om du godkänner kodåtgärden resulterar det i följande Bicep:

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

Inget problem

Följande exempel utlöser inte regeln:

Skillnad mellan den egenskap som kontrolleras och används:

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

Skillnad mellan variabelegenskapen som kontrolleras och används:

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

Nästa steg

Mer information om linter finns i Använda Bicep-linter.