Правило 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.