loadScanConfig function

ScanConfig? loadScanConfig(
  1. String projectRoot
)

Attempts to load rule config from the project at projectRoot.

Returns null if no analysis_options.yaml exists or it has no diagnostics: section. Uses the same regex patterns as the native plugin's config loader.

Implementation

ScanConfig? loadScanConfig(String projectRoot) {
  final enabled = <String>{};
  final disabled = <String>{};

  // Read severity overrides first (analysis_options_custom.yaml)
  _loadSeverityOverrides(projectRoot, enabled, disabled);

  // Read diagnostics section (analysis_options.yaml)
  final configContent = _readFile(projectRoot, 'analysis_options.yaml');
  if (configContent == null) return null;

  final sectionMatch = RegExp(
    r'^\s+diagnostics:\s*$',
    multiLine: true,
  ).firstMatch(configContent);
  if (sectionMatch == null) return null;

  final lines = configContent.substring(sectionMatch.end).split('\n');
  for (final line in lines) {
    if (line.trim().isEmpty || line.trimLeft().startsWith('#')) continue;
    if (!line.startsWith('      ')) break;

    final match = RegExp(r'^\s+([\w_]+):\s*(true|false)').firstMatch(line);
    if (match == null) continue;

    final ruleName = match.group(1);
    if (ruleName == null || ruleName.isEmpty) continue;

    if (match.group(2) == 'true') {
      enabled.add(ruleName);
      disabled.remove(ruleName);
    } else {
      disabled.add(ruleName);
      enabled.remove(ruleName);
    }
  }

  if (enabled.isEmpty && disabled.isEmpty) return null;
  return ScanConfig(enabledRules: enabled, disabledRules: disabled);
}