defaultFilter function

List<Rank> defaultFilter(
  1. String term,
  2. List<String> targets
)

Default fuzzy filter implementation.

Implementation

List<Rank> defaultFilter(String term, List<String> targets) {
  if (term.isEmpty) {
    return List.generate(targets.length, (i) => Rank(index: i));
  }

  final results = <Rank>[];
  final termLower = term.toLowerCase();

  for (var i = 0; i < targets.length; i++) {
    final target = targets[i].toLowerCase();
    final matches = <int>[];
    var termIdx = 0;

    for (var j = 0; j < target.length && termIdx < termLower.length; j++) {
      if (target[j] == termLower[termIdx]) {
        matches.add(j);
        termIdx++;
      }
    }

    if (termIdx == termLower.length) {
      results.add(Rank(index: i, matchedIndexes: matches));
    }
  }

  // Sort by number of matches and position
  results.sort((a, b) {
    final aScore = _scoreRank(a, targets[a.index]);
    final bScore = _scoreRank(b, targets[b.index]);
    return aScore.compareTo(bScore);
  });

  return results;
}