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

더 알아보기