aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/main.cpp b/src/main.cpp
index ea370a03f..d1c549b0f 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -992,7 +992,33 @@ bool parse_build_flags(Array<String> args) {
}
if (!found) {
+ struct DistanceAndTarget {
+ isize distance;
+ isize target_index;
+ };
+ DistanceAndTarget distances[gb_count_of(named_targets)] = {};
+ for (isize i = 0; i < gb_count_of(named_targets); i++) {
+ distances[i].target_index = i;
+ distances[i].distance = levenstein_distance_case_insensitive(str, named_targets[i].name);
+ }
+ gb_sort_array(distances, gb_count_of(distances), gb_isize_cmp(gb_offset_of(DistanceAndTarget, distance)));
+
gb_printf_err("Unknown target '%.*s'\n", LIT(str));
+
+ enum {MAX_SMALLEST_DISTANCE = 3};
+ if (distances[0].distance <= MAX_SMALLEST_DISTANCE) {
+ gb_printf_err("Did you mean:\n");
+ for (isize i = 0; i < gb_count_of(named_targets); i++) {
+ if (distances[i].distance > MAX_SMALLEST_DISTANCE) {
+ break;
+ }
+ gb_printf_err("\t%.*s\n", LIT(named_targets[distances[i].target_index].name));
+ }
+ }
+ gb_printf_err("All supported targets:\n");
+ for (isize i = 0; i < gb_count_of(named_targets); i++) {
+ gb_printf_err("\t%.*s\n", LIT(named_targets[i].name));
+ }
bad_flags = true;
}