Udostępnij za pośrednictwem


Reguła lintera — używanie operatora bezpiecznego dostępu

Ta reguła wyszukuje użycie contains() funkcji do sprawdzania istnienia właściwości przed uzyskaniem dostępu i zapewnia prostsze automatyczne zastępowanie. Służy do rekomendowania i wprowadzania użytkowników do uproszczonej składni równoważnej bez wprowadzania żadnych funkcjonalnych zmian kodu. Aby uzyskać więcej informacji, zobacz Bezpieczny operator dereference.

Konkretne wzorce, których szukasz, to:

  • Operator Ternary, aby sprawdzić dostęp do właściwości:

    contains(<object>, '<property>') ? <object>.<property> : <default-value>
    

    Sugerowane jest następujące zastąpienie:

    <object>.?<property> ?? <default-value>
    
  • Operator Ternary, aby sprawdzić dostęp do właściwości o nazwie zmiennej:

    contains(<object>, <property-name>) ? foo[<property-name>] : <default-value>
    

    Sugerowane jest następujące zastąpienie:

    <object>[?<property-name>] ?? <default-value>
    

Kod reguły Linter

Aby dostosować ustawienia reguły, użyj następującej wartości w pliku konfiguracji Bicep:

use-safe-access

Rozwiązanie

Zaakceptuj akcję kodu edytora, aby automatycznie wykonać refaktoryzację.

Przykłady

Nazwany dostęp do właściwości

Poniższy przykład wyzwala regułę:

param foo object
var test = contains(foo, 'bar') ? foo.bar : 'baz'

Zaakceptowanie akcji kodu powoduje wyświetlenie następującego Bicepu:

param foo object
var test = foo.?bar ?? 'baz'

Dostęp do właściwości zmiennej

Poniższy przykład wyzwala regułę:

param foo object
param target string
var test = contains(foo, target) ? foo[target] : 'baz'

Zaakceptowanie akcji kodu powoduje wyświetlenie następującego Bicepu:

param foo object
param target string
var test = foo[?target] ?? 'baz'

Niestanowiące problemu

Następujące przykłady nie wyzwalają reguły:

Różnica między sprawdzaną właściwością a dostępem:

param foo object
var test = contains(foo, 'bar') ? foo.baz : 'baz'

Różnica między sprawdzaną właściwością zmiennej a dostępem:

param foo object
param target string
param notTarget string
var test = contains(foo, target) ? bar[notTarget] : 'baz'

Następne kroki

Aby uzyskać więcej informacji na temat lintera, zobacz Use Bicep linter (Używanie lintera Bicep).