directives_ordering 린트 규칙

directives_ordering 린트 규칙

Effective Dart 가이드가 권장하는 import 정렬 규칙을 따르도록 도와주는 린트 규칙이에요.

출처: directives_ordering

본문

Effective Dart 가이드의 지시어(directive) 정렬 규칙을 따르는 게 좋아요.

dart: import를 다른 import보다 앞에 두세요

나쁜 예

import 'package:bar/bar.dart';
import 'package:foo/foo.dart';

import 'dart:async';  // LINT
import 'dart:html';  // LINT

dart: import가 뒤쪽에 섞여 있죠. 이렇게 하면 린트가 잡아내요.

import 'dart:html';  // OK
import 'package:bar/bar.dart';

import 'dart:async';  // LINT
import 'package:foo/foo.dart';

매우 헷갈리는 예시인데, dart:html이 앞에 나오긴 했지만 dart:asyncpackage: 사이에 끼어 있어요. dart: 끼리는 앞쪽에, package:는 뒤쪽에 모아야 해요.

좋은 예

import 'dart:async';  // OK
import 'dart:html';  // OK

import 'package:bar/bar.dart';
import 'package:foo/foo.dart';

dart: import를 맨 앞에, 그다음 package: import를 순서대로 배치했어요.

package: import를 상대(relative) import보다 앞에 두세요

나쁜 예

import 'a.dart';
import 'b.dart';

import 'package:bar/bar.dart';  // LINT
import 'package:foo/foo.dart';  // LINT

상대 import인 a.dart, b.dart가 앞에 있고 package: import가 뒤에 있네요.

import 'package:bar/bar.dart';  // OK
import 'a.dart';

import 'package:foo/foo.dart';  // LINT
import 'b.dart';

앞엔 package:가, 뒤엔 dart: 없이 상대 import가 섞여 있어요. package:와 상대 import가 뒤섞여 있죠.

좋은 예

import 'package:bar/bar.dart';  // OK
import 'package:foo/foo.dart';  // OK

import 'a.dart';
import 'b.dart';

package: import를 먼저, 상대 import를 나중에 배치했어요.

export는 모든 import 다음의 별도 섹션에 두세요

나쁜 예

import 'src/error.dart';
export 'src/error.dart'; // LINT
import 'src/string_source.dart';

export가 import 사이에 끼어 있네요.

좋은 예

import 'src/error.dart';
import 'src/string_source.dart';

export 'src/error.dart'; // OK

import를 모두 모은 뒤에 export를 별도 섹션으로 배치했어요.

섹션 안에서 알파벳 순으로 정렬하세요

나쁜 예

import 'package:foo/bar.dart'; // OK
import 'package:bar/bar.dart'; // LINT

import 'a/b.dart'; // OK
import 'a.dart'; // LINT

package:foopackage:bar보다 앞에 있고, a/b.darta.dart보다 앞에 와서 정렬 순서가 어긋났어요.

좋은 예

import 'package:bar/bar.dart'; // OK
import 'package:foo/bar.dart'; // OK

import 'a.dart'; // OK
import 'a/b.dart'; // OK

package: 섹션과 상대 import 섹션 모두 알파벳 순으로 정렬했어요.

활성화 방법

이 규칙을 활성화하려면 analysis_options.yaml 파일의 linter > rules 아래에 directives_ordering을 추가하면 돼요.

linter:
  rules:
    - directives_ordering

linter > rules를 YAML map 문법으로 작성한다면 directives_ordering: true처럼 불리언 값을 지정해도 되고요.

linter:
  rules:
    directives_ordering: true

더 알아보기

import 정렬에 대한 더 자세한 규칙은 Effective Dart 스타일 가이드의 지시어(ordering) 항목에서 확인할 수 있어요. 린트 규칙 전체 목록은 공식 Linter rules 문서에서 확인할 수 있어요.