Compartilhar via


Regra linter – usar o operador de acesso seguro

Essa regra busca o uso da função contains() para verificar a existência da propriedade antes do acesso e fornece uma substituição automática mais simples. Ela serve para recomendar e introduzir os usuários a uma sintaxe equivalente simplificada sem introduzir nenhuma alteração de código funcional. Para obter mais informações, confira Operador de desreferência segura.

Os padrões específicos sendo buscados são:

  • Operador ternário para verificar o acesso à propriedade:

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

    A seguinte substituição é sugerida:

    <object>.?<property> ?? <default-value>
    
  • O operador ternário para verificar o acesso à propriedade com nome variável:

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

    A seguinte substituição é sugerida:

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

Código de regra linter

Para personalizar as configurações de regra, use o seguinte valor no arquivo de configuração do Bicep:

use-safe-access

Solução

Aceite a ação de código do editor para executar a refatoração automaticamente.

Exemplos

Acesso à propriedade nomeada

O exemplo a seguir dispara a regra:

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

Aceitar a ação de código resulta no seguinte Bicep:

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

Acesso à propriedade variável

O exemplo a seguir dispara a regra:

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

Aceitar a ação de código resulta no seguinte Bicep:

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

Não são um problema

Os exemplos a seguir não disparam a regra:

Diferença entre a propriedade que está sendo verificada e acessada:

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

Diferença entre a propriedade variável que está sendo verificada e acessada:

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

Próximas etapas

Para saber mais sobre o linter, confira Usar o linter do Bicep.