Règle Linter - utiliser l’opérateur d’accès sécurisé
Cette règle recherche l’utilisation de la fonction contains()
pour vérifier l’existence des propriétés avant l’accès et fournit un remplacement automatique plus simple. Elle sert à recommander et à présenter aux utilisateurs une syntaxe équivalente simplifiée sans introduire de changement de code fonctionnel. Pour plus d’informations, consultez Opérateur de déréférencement sécurisé.
Les modèles spécifiques qu’elle recherche sont les suivants :
Opérateur ternaire pour vérifier l’accès aux propriétés :
contains(<object>, '<property>') ? <object>.<property> : <default-value>
Le remplacement suivant est suggéré :
<object>.?<property> ?? <default-value>
Opérateur ternaire pour vérifier l’accès aux propriétés nommées avec des variables :
contains(<object>, <property-name>) ? foo[<property-name>] : <default-value>
Le remplacement suivant est suggéré :
<object>[?<property-name>] ?? <default-value>
Code de règle de linter
Pour personnaliser les paramètres de règle, utilisez la valeur suivante dans le fichier config Bicep :
use-safe-access
Solution
Acceptez l’action de code de l’éditeur pour effectuer automatiquement la refactorisation.
Exemples
Accès aux propriétés nommées
L’exemple suivant déclenche la règle :
param foo object
var test = contains(foo, 'bar') ? foo.bar : 'baz'
L’acceptation de l’action de code aboutit au code Bicep suivant :
param foo object
var test = foo.?bar ?? 'baz'
Accès aux propriétés de variable
L’exemple suivant déclenche la règle :
param foo object
param target string
var test = contains(foo, target) ? foo[target] : 'baz'
L’acceptation de l’action de code aboutit au code Bicep suivant :
param foo object
param target string
var test = foo[?target] ?? 'baz'
Faux problèmes
Les exemples suivants ne déclenchent pas la règle :
Différence entre la propriété en cours de vérification et d’accès :
param foo object
var test = contains(foo, 'bar') ? foo.baz : 'baz'
Différence entre la propriété de variable en cours de vérification et d’accès :
param foo object
param target string
param notTarget string
var test = contains(foo, target) ? bar[notTarget] : 'baz'
Étapes suivantes
Pour plus d’informations sur le linter, consultez Utiliser le linter Bicep.