runWithReporter method
Override this method to implement your lint rule.
Use context to register callbacks for AST node types:
context.addMethodInvocation((node) {
if (condition) {
reporter.atNode(node);
}
});
Implementation
@override
void runWithReporter(
SaropaDiagnosticReporter reporter,
SaropaContext context,
) {
context.addClassDeclaration((ClassDeclaration node) {
// Collect all instance fields
final Set<String> fieldNames = <String>{};
for (final ClassMember member in node.body.members) {
if (member is FieldDeclaration && !member.isStatic) {
for (final VariableDeclaration variable in member.fields.variables) {
fieldNames.add(variable.name.lexeme);
}
}
}
if (fieldNames.isEmpty) return;
// Find copyWith method
for (final ClassMember member in node.body.members) {
if (member is MethodDeclaration && member.name.lexeme == 'copyWith') {
final FormalParameterList? params = member.parameters;
if (params == null) continue;
// Get parameter names
final Set<String> paramNames = <String>{};
for (final FormalParameter param in params.parameters) {
final String? name = param.name?.lexeme;
if (name != null) {
paramNames.add(name);
}
}
// Check if any fields are missing
final Set<String> missingFields = fieldNames.difference(paramNames);
if (missingFields.isNotEmpty) {
reporter.atNode(member);
}
}
}
});
}