buildFileMentionOrder function
List<int>
buildFileMentionOrder(
- List<
FileMentionEntry> entries, { - String query = '',
- FileMentionMatcher? matcher,
Returns source entry indexes in display order after applying query.
Implementation
List<int> buildFileMentionOrder(
List<FileMentionEntry> entries, {
String query = '',
FileMentionMatcher? matcher,
}) {
final trimmed = _sanitizeMentionText(query).trim();
if (trimmed.isEmpty) {
return List<int>.unmodifiable(
List<int>.generate(entries.length, (index) => index),
);
}
if (matcher != null) {
return List<int>.unmodifiable([
for (var index = 0; index < entries.length; index++)
if (matcher(entries[index], trimmed)) index,
]);
}
final q = trimmed.toLowerCase();
final exact = <int>[];
final prefix = <int>[];
final contains = <int>[];
final fuzzy = <int>[];
for (var index = 0; index < entries.length; index++) {
switch (_mentionRank(entries[index], q)) {
case _MentionRank.exact:
exact.add(index);
case _MentionRank.prefix:
prefix.add(index);
case _MentionRank.contains:
contains.add(index);
case _MentionRank.fuzzy:
fuzzy.add(index);
case null:
break;
}
}
return List<int>.unmodifiable([...exact, ...prefix, ...contains, ...fuzzy]);
}