티스토리 뷰

IntelliJ 혹은 Android Studio에서 freezed나 drift 같은 패키지를 쓰면 같은 이름으로 확장자가 다르게 여러 파일이 나온다.

user.dart
user.freezed.dart
user.g.dart

사실 직접 눌러서 볼 일이 거의 없기 때문에, 합쳐서 깔끔하게 보고 싶을 때 쓰는 방법이다.

설정 방법

IntelliJ 혹은 Android Studio에서 만능찾기인 Shift 연속 2번을 누르고 nest를 검색하면 File Nesting...이 나온다.

해당 항목을 선택하여 같은 확장자끼리 묶어주면 하나의 파일로 합쳐져서 나온다.

Parent file suffix: .dart
Child file suffix: .g.dart; .freezed.dart; .config.dart; .gr.dart

이제 하나로 합쳐져서 나오는 탐색기를 볼 수 있다. 부모 파일 왼쪽에 화살표가 생기고, 펼치면 생성된 파일들이 안에 들어 있다.

Dart에서 자주 쓰는 조합

사용하는 패키지에 따라 자식 확장자를 추가하면 된다.

  • .g.dart — json_serializable, drift, hive 등 build_runner 계열
  • .freezed.dart — freezed
  • .gr.dart — auto_route
  • .config.dart — injectable
  • .mocks.dart — mockito

다른 언어에서도 유용하다

File Nesting은 Dart 전용 기능이 아니다. 기본 제공되는 규칙도 있고 직접 추가할 수도 있다.

  • .ts.js, .js.map, .d.ts
  • .vue.vue.d.ts
  • .java.class
  • .scss.css, .css.map

VS Code에서는

VS Code도 같은 기능이 있다. 설정 파일에 직접 넣는다.

// .vscode/settings.json
{
  "explorer.fileNesting.enabled": true,
  "explorer.fileNesting.expand": false,
  "explorer.fileNesting.patterns": {
    "*.dart": "${capture}.g.dart, ${capture}.freezed.dart, ${capture}.gr.dart",
    "pubspec.yaml": "pubspec.lock, .flutter-plugins, .flutter-plugins-dependencies, .packages",
    "*.ts": "${capture}.js, ${capture}.d.ts, ${capture}.js.map"
  }
}

이 설정을 .vscode/settings.json에 넣고 커밋하면 팀원 전체가 같은 탐색기 뷰를 쓰게 된다. IntelliJ의 File Nesting 설정은 IDE 전역이라 프로젝트 단위 공유가 안 되는데, 이 점은 VS Code 쪽이 낫다.

덤: 생성 파일은 검색에서도 빼는 게 좋다

탐색기에서 숨기는 것도 좋지만, 전체 검색 결과에 생성 파일이 섞여 나오는 게 더 성가시다. 같은 코드가 두 번씩 잡히기 때문이다.

// VS Code
{
  "search.exclude": {
    "**/*.g.dart": true,
    "**/*.freezed.dart": true
  }
}

IntelliJ에서는 해당 파일을 우클릭 → Mark Directory asExcluded 하거나, Settings > Editor > File TypesIgnored Files and Folders에 패턴을 추가한다.

생성 파일을 Git에 커밋할 것인가

관련해서 자주 나오는 논쟁이다. 정답은 없고 트레이드오프가 있다.

커밋한다 커밋 안 한다
클론 후 바로 빌드 가능 저장소가 가볍다
CI에서 생성 단계 불필요 diff에 노이즈가 없다
diff가 지저분해진다 CI에 build_runner 단계 필요
머지 충돌이 잦다 클론 후 생성 단계를 잊으면 에러

Dart 커뮤니티에서는 커밋하지 않고 CI에서 생성하는 쪽이 더 일반적이다. 다만 팀에 신규 인원이 자주 들어온다면 커밋해두는 편이 온보딩 마찰이 적다.

# .gitignore (커밋 안 하는 경우)
*.g.dart
*.freezed.dart
*.config.dart
# 클론 후 실행
flutter pub get
dart run build_runner build --delete-conflicting-outputs

정리

  • Shift 두 번File Nesting 으로 생성 파일을 부모 아래로 묶는다
  • Dart는 .g.dart, .freezed.dart, .gr.dart, .config.dart
  • VS Code는 explorer.fileNesting.patterns프로젝트 단위 공유 가능
  • 탐색기뿐 아니라 검색 결과에서도 제외하면 훨씬 쾌적하다
  • 생성 파일 커밋 여부는 팀 상황에 따라. Dart는 보통 커밋 안 한다
댓글


최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday