Condividi tramite


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.