implicit_reopen: 클래스를 암묵적으로 reopen하지 마세요
implicit_reopen: 클래스를 암묵적으로 reopen하지 마세요
implicit_reopen 린트는 의도치 않게 클래스의 봉인(sealed) 등을 풀고 암묵적으로 "reopen"하는 상황을 막아주는 규칙이에요. 실험적(Experimental) 규칙이고 Dart 3.0에서 도입됐어요. @reopen 애너테이션으로 명시하지 않으면 린트로 잡아줘요.
출처: implicit_reopen
본문
설명
클래스에 interface, base, final, sealed 수식어를 쓰거나, 믹스인에 base 수식어를 쓰면, 작성자가 해당 클래스와 믹스인이 정의된 라이브러리 밖에서 implement/extend/mixin될 수 있는지 제어할 수 있어요. 어떤 경우에는 작성자가 실수로 이 제어를 느슨하게 만들고 클래스를 암묵적으로 "reopen"할 수도 있어요. (믹스인에서는 비슷한 reopen이 일어날 수 없어요.)
이 린트는 package:meta의 @reopen 애너테이션으로 그런 경우를 명시적으로 만들도록 요구해서, 의도치 않은 클래스 reopen을 막아줘요.
나쁜 예:
interface class I {}
class C extends I {} // LINT
좋은 예:
interface class I {}
final class C extends I {}
import 'package:meta/meta.dart';
interface class I {}
@reopen
class C extends I {}
활성화(Enable)
implicit_reopen 규칙을 활성화하려면 analysis_options.yaml 파일의 linter > rules 아래에 implicit_reopen을 추가해요.
linter:
rules:
- implicit_reopen
대신 YAML 맵 문법으로 린터 규칙을 설정한다면, linter > rules 아래에 implicit_reopen: true를 추가해요.
linter:
rules:
implicit_reopen: true