Skip to content

Commit bfb67fa

Browse files
committed
autocomplete: In @-mention results, match insensitively to diacritics
Fixes zulip#237
1 parent 9044a9a commit bfb67fa

File tree

4 files changed

+17
-2
lines changed

4 files changed

+17
-2
lines changed

lib/model/autocomplete.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import 'package:diacritic/diacritic.dart';
12
import 'package:flutter/foundation.dart';
23
import 'package:flutter/services.dart';
34

@@ -301,7 +302,7 @@ class MentionAutocompleteQuery {
301302
return false;
302303
}
303304

304-
if (nameWords[nameWordsIndex].startsWith(_lowercaseWords[queryWordsIndex])) {
305+
if (nameWords[nameWordsIndex].startsWith(removeDiacritics(_lowercaseWords[queryWordsIndex]))) {
305306
queryWordsIndex++;
306307
}
307308
nameWordsIndex++;
@@ -326,7 +327,7 @@ class AutocompleteDataCache {
326327
final Map<int, List<String>> _nameWordsByUser = {};
327328

328329
List<String> nameWordsForUser(User user) {
329-
return _nameWordsByUser[user.userId] ??= user.fullName.toLowerCase().split(' ');
330+
return _nameWordsByUser[user.userId] ??= removeDiacritics(user.fullName.toLowerCase()).split(' ');
330331
}
331332

332333
void invalidateUser(int userId) {

pubspec.lock

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,14 @@ packages:
273273
url: "https://pub.dev"
274274
source: hosted
275275
version: "7.0.0"
276+
diacritic:
277+
dependency: "direct main"
278+
description:
279+
name: diacritic
280+
sha256: "96db5db6149cbe4aa3cfcbfd170aca9b7648639be7e48025f9d458517f807fe4"
281+
url: "https://pub.dev"
282+
source: hosted
283+
version: "0.1.5"
276284
drift:
277285
dependency: "direct main"
278286
description:

pubspec.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ dependencies:
6565
url_launcher: ^6.1.11
6666
url_launcher_android: ">=6.1.0"
6767
sqlite3: ^2.4.0
68+
diacritic: ^0.1.5
6869

6970
dev_dependencies:
7071
flutter_driver:

test/model/autocomplete_test.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,11 @@ void main() {
327327
doCheck('full full', eg.user(fullName: 'Full Full Name'), true);
328328
doCheck('full full', eg.user(fullName: 'Full Name Full'), true);
329329

330+
// assert that name checking is diacritic insensitive
331+
doCheck('fűll ñámé', eg.user(fullName: 'Full Name'), true);
332+
doCheck('fűll', eg.user(fullName: 'Full Name'), true);
333+
doCheck('ñámé', eg.user(fullName: 'Full Name'), true);
334+
330335
doCheck('F', eg.user(fullName: ''), false); // Unlikely case, but should not crash
331336
doCheck('Fully Named', eg.user(fullName: 'Full Name'), false);
332337
doCheck('Full Name', eg.user(fullName: 'Full'), false);

0 commit comments

Comments
 (0)