validateBindings function

List<KeybindingWarning> validateBindings(
  1. List userBlocks,
  2. List<ParsedBinding> parsedBindings
)

Run all validations and return combined, deduplicated warnings.

Implementation

List<KeybindingWarning> validateBindings(
  List<dynamic> userBlocks,
  List<ParsedBinding> parsedBindings,
) {
  final warnings = <KeybindingWarning>[];
  warnings.addAll(validateUserConfig(userBlocks));

  final typed = <KeybindingBlock>[];
  for (final block in userBlocks) {
    if (block is Map<String, dynamic> &&
        block['context'] is String &&
        block['bindings'] is Map<String, dynamic>) {
      typed.add(KeybindingBlock.fromJson(block));
    }
  }
  if (typed.isNotEmpty) {
    warnings.addAll(checkDuplicates(typed));
    final userParsed = parseBindingBlocks(typed);
    warnings.addAll(checkReservedShortcuts(userParsed));
  }

  // Deduplicate warnings.
  final seen = <String>{};
  return warnings.where((w) {
    final key = '${w.type}:${w.key}:${w.context}';
    if (seen.contains(key)) return false;
    seen.add(key);
    return true;
  }).toList();
}