avoid_multiple_declarations_per_file
Warns about multiple nominal declarations (classes, enums, mixins, extensions, extension types) in a single file.
Each declaration should ideally live in its own dedicated file matching its name, improving navigation, test structure, and Single Responsibility Principle.
Example config:
solid_lints:
diagnostics:
avoid_multiple_declarations_per_file:
ignored_types:
- State
exclude_entity:
- extension_type
- enum
allow_private: true
maximum_loc: 20
Example
BAD:
class Parent extends StatelessWidget {}
class _Child extends StatelessWidget {} // LINT
class User {}
enum UserRole { admin, regular } // LINT
GOOD:
// parent.dart
import 'child.dart';
class Parent extends StatelessWidget {}
// child.dart
class Child extends StatelessWidget {}
Parameters
ignored_types (String | List<String> | Map<String, Object?>)
Types and their subtypes that should be ignored as violations.
Example:
solid_lints:
diagnostics:
avoid_multiple_declarations_per_file:
ignored_types:
- State
class MyWidget extends StatefulWidget {}
class _MyWidgetState extends State<MyWidget> {} // OK
exclude_entity (String | List<String>)
AST entities (e.g. enum, mixin, extension, extension_type) to exclude.
Example:
solid_lints:
diagnostics:
avoid_multiple_declarations_per_file:
exclude_entity:
- extension_type
- enum
class User {}
extension type UserId(int id) {} // OK
enum UserRole { admin, regular } // OK
allow_private (bool)
Whether private declarations (e.g. prefixed with _) are allowed.
Example:
solid_lints:
diagnostics:
avoid_multiple_declarations_per_file:
allow_private: true
class PublicClass {}
class _PrivateHelper {} // OK
maximum_loc (int?)
Maximum lines of code allowed for secondary declarations, excluding blank lines and comments.
Example:
solid_lints:
diagnostics:
avoid_multiple_declarations_per_file:
maximum_loc: 10
class MainClass {}
class SmallHelper {
// Comments and blank lines are excluded from LOC calculation.
void run() {}
} // OK if LOC <= 10