Regola linter: usare l'operatore di accesso sicuro
Questa regola cerca l'uso della funzione contains()
per verificare l'esistenza della proprietà prima dell'accesso e fornisce una sostituzione automatica più semplice. Serve a consigliare e introdurre agli utenti una sintassi equivalente semplificata senza introdurre modifiche al codice funzionale. Per altre informazioni, vedere Operatore di dereferenziazione sicura.
I modelli specifici da cercare sono:
Operatore ternario per verificare l'accesso alle proprietà:
contains(<object>, '<property>') ? <object>.<property> : <default-value>
Viene suggerita la sostituzione seguente:
<object>.?<property> ?? <default-value>
Operatore ternario per verificare la presenza di accesso alle proprietà con nome variabile:
contains(<object>, <property-name>) ? foo[<property-name>] : <default-value>
Viene suggerita la sostituzione seguente:
<object>[?<property-name>] ?? <default-value>
Codice regola Linter
Per personalizzare le impostazioni delle regole, usare il valore seguente nel file di configurazione Bicep:
use-safe-access
Soluzione
Accettare l'azione del codice dell'editor per eseguire automaticamente il refactoring.
Esempi
Accesso alle proprietà denominate
L'esempio seguente attiva la regola:
param foo object
var test = contains(foo, 'bar') ? foo.bar : 'baz'
L'accettazione dell'azione di codice comporta il Bicep seguente:
param foo object
var test = foo.?bar ?? 'baz'
Accesso alle proprietà variable
L'esempio seguente attiva la regola:
param foo object
param target string
var test = contains(foo, target) ? foo[target] : 'baz'
L'accettazione dell'azione di codice comporta il Bicep seguente:
param foo object
param target string
var test = foo[?target] ?? 'baz'
Non problemi
Gli esempi seguenti non attivano la regola:
Differenza tra la proprietà selezionata e a cui è stato fatto l’accesso:
param foo object
var test = contains(foo, 'bar') ? foo.baz : 'baz'
Differenza tra la proprietà della variabile selezionata e a cui è stato fatto l'accesso:
param foo object
param target string
param notTarget string
var test = contains(foo, target) ? bar[notTarget] : 'baz'
Passaggi successivi
Per ulteriori informazioni su linter, vedere Usare linter di Bicep.