runWithReporter method

  1. @override
void runWithReporter(
  1. SaropaDiagnosticReporter reporter,
  2. SaropaContext context
)
override

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.addCompilationUnit((CompilationUnit unit) {
    final LineInfo? lineInfo = unit.lineInfo;
    final String content = context.fileContent;
    if (lineInfo == null) return;

    final List<String> lines = content.split('\n');
    for (int i = 0; i < lines.length; i++) {
      final String line = lines[i];
      final Match? match = _ignoreLinePattern.firstMatch(line);
      if (match == null) continue;

      final String rest = match.group(1) ?? '';
      final List<String> names = rest
          .split(',')
          .map((String s) => s.trim().toLowerCase().replaceAll('-', '_'))
          .where((String s) => s.isNotEmpty)
          .toList();
      if (names.length <= 1) continue;

      final Set<String> seen = {};
      for (final String name in names) {
        if (!seen.add(name)) {
          final int offset = lineInfo.getOffsetOfLine(i + 1);
          reporter.atOffset(offset: offset, length: line.length);
          break;
        }
      }
    }
  });
}