Sdílet prostřednictvím


Pravidlo Linter – použití operátoru bezpečného přístupu

Toto pravidlo hledá použití contains() funkce pro kontrolu existence vlastnosti před přístupem a poskytuje jednodušší automatické nahrazení. Slouží k doporučování a zavádění uživatelů do zjednodušené ekvivalentní syntaxe bez zavedení jakýchkoli změn funkčního kódu. Další informace naleznete v tématu Safe dereference operátor.

Konkrétní vzory, které hledáte, jsou:

  • Ternární operátor pro kontrolu přístupu k vlastnostem:

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

    Navrhuje se následující náhrada:

    <object>.?<property> ?? <default-value>
    
  • Ternární operátor pro kontrolu přístupu k vlastnosti pojmenované proměnné:

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

    Navrhuje se následující náhrada:

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

Kód pravidla Linteru

Pokud chcete přizpůsobit nastavení pravidla, použijte v konfiguračním souboru Bicep následující hodnotu:

use-safe-access

Řešení

Přijměte akci kódu editoru, aby se refaktoring automaticky provedl.

Příklady

Přístup k pojmenované vlastnosti

Následující příklad aktivuje pravidlo:

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

Přijetí výsledku akce kódu způsobí následující příkaz Bicep:

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

Přístup k vlastnosti proměnné

Následující příklad aktivuje pravidlo:

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

Přijetí výsledku akce kódu způsobí následující příkaz Bicep:

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

Potíže nepředstavující problém

Následující příklady neaktivují pravidlo:

Rozdíl mezi kontrolovanou a přístupnou vlastností:

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

Rozdíl mezi kontrolovanou a přístupnou vlastností proměnné:

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

Další kroky

Další informace o linteru naleznete v tématu Použití linter Bicep.