Regla linter: use el operador de acceso seguro.
Esta regla busca el uso de la función contains()
para comprobar la existencia de propiedades antes del acceso y proporciona un reemplazo automático más sencillo. Sirve para recomendar e introducir a los usuarios una sintaxis equivalente simplificada sin introducir ningún cambio de código funcional. Para obtener más información, consulte Caja fuerte desreferenciar segura.
Los patrones específicos que busca son:
Operador ternario para comprobar el acceso a las propiedades:
contains(<object>, '<property>') ? <object>.<property> : <default-value>
Se sugiere el reemplazo siguiente:
<object>.?<property> ?? <default-value>
Operador Ternary para comprobar si hay acceso a propiedades con nombre variable:
contains(<object>, <property-name>) ? foo[<property-name>] : <default-value>
Se sugiere el reemplazo siguiente:
<object>[?<property-name>] ?? <default-value>
Código de regla de linter
Para personalizar la configuración de la regla, use el siguiente valor en el archivo de configuración de Bicep:
use-safe-access
Solución
Acepte la acción de código del editor para realizar automáticamente la refactorización.
Ejemplos
Acceso a propiedades con nombre
En el ejemplo siguiente se desencadena la regla:
param foo object
var test = contains(foo, 'bar') ? foo.bar : 'baz'
La aceptación de la acción de código da como resultado el siguiente Bicep:
param foo object
var test = foo.?bar ?? 'baz'
Acceso a la propiedad Variable
En el ejemplo siguiente se desencadena la regla:
param foo object
param target string
var test = contains(foo, target) ? foo[target] : 'baz'
La aceptación de la acción de código da como resultado el siguiente Bicep:
param foo object
param target string
var test = foo[?target] ?? 'baz'
Problemas irrelevantes
Los ejemplos siguientes no desencadenan la regla:
Diferencia entre la propiedad que se está comprobando y a la que se accede:
param foo object
var test = contains(foo, 'bar') ? foo.baz : 'baz'
Diferencia entre la propiedad variable que se está comprobando y a la que se accede:
param foo object
param target string
param notTarget string
var test = contains(foo, target) ? bar[notTarget] : 'baz'
Pasos siguientes
Para obtener más información acerca de linter, consulte Uso de linter de Bicep.