다음을 통해 공유


Linter 규칙 - 안전 액세스 연산자 사용

이 규칙은 액세스하기 전에 속성 존재 여부를 확인하기 위해 contains() 함수의 사용을 찾고 더 단순한 자동 대체를 제공합니다. 기능적 코드를 변경하지 않고도 간소화된 동등 구문을 사용자에게 권장하고 소개하는 역할을 합니다. 자세한 내용은 안전한 역참조 연산자를 참조하세요.

찾고 있는 특정 패턴은 다음과 같습니다.

  • 속성 액세스를 확인하는 3개로 구성된 연산자:

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

    다음 대체가 제안됩니다.

    <object>.?<property> ?? <default-value>
    
  • 변수 이름의 속성 액세스를 확인하는 3개로 구성된 연산자:

    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 사용을 참조하세요.