DormQL Analyzer Plugin
A Dart analyzer plugin that provides static analysis for DormQL annotations. It validates entity configurations, relationship mappings, and database schema definitions at development time.
Features
Entity Validation Rules
| Rule | Code | Severity | Description |
|---|---|---|---|
| Missing ID | dormql_missing_id |
Error | Ensures every @Entity class has a primary key (@Id or @PrimaryKey) |
| Multiple IDs | dormql_multiple_ids |
Warning | Prevents multiple @Id annotations in a single entity |
| ID Type Mismatch | dormql_uuid_requires_string |
Error | UUID strategy requires String type |
| ID Type Mismatch | dormql_autoincrement_requires_int |
Error | AutoIncrement/Serial requires int or BigInt |
| ID Nullable | dormql_id_nullable_not_allowed |
Error | ID field cannot be nullable when autoIncrement: false |
| ID Conflict | dormql_id_primarykey_conflict |
Warning | Prevents using both @Id and @PrimaryKey together |
| Field Conflict | dormql_id_column_primarykey_conflict |
Warning | Prevents @Id + @Column(primaryKey: true) on same field |
| Column Type | dormql_column_type_mismatch |
Warning | Validates @Column columnType matches Dart field type |
@OneToOne Relationship Rules
| Rule | Code | Severity | Description |
|---|---|---|---|
| Missing Target | dormql_onetoone_missing_target |
Error | @OneToOne must specify targetEntity parameter |
| Invalid Target | dormql_onetoone_invalid_target |
Error | targetEntity must be an @Entity class |
| MappedBy Not Found | dormql_onetoone_mappedby_not_found |
Error | mappedBy field must exist in target entity |
| MappedBy Invalid | dormql_onetoone_mappedby_not_onetoone |
Error | mappedBy field must have @OneToOne annotation |
Other Relationship Validation (Planned)
@OneToMany,@ManyToOne,@ManyToManyconfiguration checks- Join table configuration validation
Database Version Checking (Planned)
- Schema change detection
- Migration version bump warnings
Getting Started
Requirements
- Dart SDK
^3.10.1 analyzer^9.0.0
Installation
Add the plugin to your project's analysis_options.yaml:
analyzer:
plugins:
- dormql_analyzer_plugin
Add the dependency to your pubspec.yaml:
dev_dependencies:
dormql_analyzer_plugin: ^0.1.1
Usage
Once configured, the plugin automatically analyzes your DormQL entities and reports issues in your IDE.
Example: Valid Entity
@Entity(tableName: 'users')
class UserEntity {
@Id()
int id;
String name;
String email;
}
Example: Invalid - Missing ID
@Entity(tableName: 'posts')
class PostEntity { // Error: Entity must have a primary key
String title;
String content;
}
Example: Invalid - UUID Type Mismatch
@Entity(tableName: 'documents')
class DocumentEntity {
@Id.uuid()
int id; // Error: UUID strategy requires String type
String content;
}
Example: Invalid - Multiple IDs
@Entity(tableName: 'items')
class ItemEntity {
@Id()
int id;
@Id() // Error: Multiple @Id annotations
String uuid;
}
Example: Invalid - Nullable ID with UUID
@Entity(tableName: 'documents')
class DocumentEntity {
@Id.uuid()
String? id; // Error: ID cannot be nullable when autoIncrement is false
String content;
}
Quick Fixes
The plugin provides quick fixes for common issues:
| Diagnostic | Fix | Description |
|---|---|---|
dormql_missing_id |
Add @Id() int id; |
Adds an auto-increment integer ID field |
dormql_missing_id |
Add @Id.uuid() String id; |
Adds a UUID string ID field |
dormql_id_nullable_not_allowed |
Remove ? from type |
Removes nullable marker from ID field |
Diagnostics
Diagnostics are registered with appropriate severity levels:
- Error: Critical issues that must be fixed (e.g., missing ID, nullable ID with autoIncrement=false)
- Warning: Best practice violations that should be addressed
Architecture
lib/src/
├── dormql_analyzer_plugin.dart # Main plugin entry
├── utils/
│ └── annotation_checker.dart # AST annotation utilities
├── visitor/
│ └── entity_visitor.dart # Entity AST visitor
├── rules/
│ └── entity/
│ ├── missing_id_rule.dart
│ ├── multiple_ids_rule.dart
│ ├── id_type_mismatch_rule.dart
│ ├── id_nullable_rule.dart
│ └── id_primarykey_conflict_rule.dart
└── fixes/
├── add_id_fix.dart # Quick fix for missing ID
└── remove_nullable_fix.dart # Quick fix for nullable ID
Contributing
Contributions are welcome! Please feel free to submit issues and pull requests.
License
See the LICENSE file for details.