diff options
Diffstat (limited to 'src/main.cpp')
| -rw-r--r-- | src/main.cpp | 26 |
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; } |