Правило Linter — используйте оператор безопасного доступа

Это правило ищет использование contains() функции для проверки существования свойства перед доступом и обеспечивает более простую автоматическую замену. Он позволяет рекомендовать и вводить пользователей в упрощенный эквивалентный синтаксис без внесения изменений в функциональный код. Дополнительные сведения см. в разделе "Оператор безопасного разыменования".

Конкретные шаблоны, которые он ищет:

  • Оператор Ternary для проверки доступа к свойствам:

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

    Предлагается следующая замена:

    <object>.?<property> ?? <default-value>
    
  • Оператор Ternary для проверки доступа к свойству с именем переменной:

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

    Предлагается следующая замена:

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

Код правила анализатора кода

Чтобы настроить параметры правила, используйте следующее значение в файле конфигурации Bicep:

use-safe-access

Решение

Примите действие кода редактора для автоматического выполнения рефакторинга.

Примеры

Доступ к именованным свойствам

В следующем примере активируется правило:

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

Принятие действия кода приводит к следующему Bicep:

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

Доступ к свойствам переменной

В следующем примере активируется правило:

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

Принятие действия кода приводит к следующему Bicep:

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

Не связанные с проблемами

В следующих примерах правило не активируется:

Разница между проверяемой и доступной свойством:

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

Разница между проверяемых и доступом свойством переменной:

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

Следующие шаги

Дополнительные сведения об анализаторе кода Bicep см. в разделе Использование анализатора кода Bicep.