Partager via


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.