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.