Linter 规则 - 使用安全访问运算符
此规则在访问之前查找是否使用了用于检查属性存在情况的 contains()
函数,并提供一种更简单的自动替换方法。 它用于向用户推荐和介绍一种简化的等效语法,该语法未引入任何功能代码更改。 有关详细信息,请参阅安全间接引用运算符。
它要查找的特定模式包括:
用于检查属性访问的三元运算符:
contains(<object>, '<property>') ? <object>.<property> : <default-value>
建议使用以下替换项:
<object>.?<property> ?? <default-value>
用于检查变量命名属性访问的三元运算符:
contains(<object>, <property-name>) ? foo[<property-name>] : <default-value>
建议使用以下替换项:
<object>[?<property-name>] ?? <default-value>
Linter 规则代码
若要自定义规则设置,请在 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'
后续步骤
有关 Linter 的详细信息,请参阅使用 Bicep Linter。