loadScanConfig function
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);
}