aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2026-02-13 15:15:03 +0100
committerJeroen van Rijn <Kelimion@users.noreply.github.com>2026-02-13 15:15:03 +0100
commit6386b395de7e0e537e092601ff0ac4d353806ebb (patch)
tree80d44c794e9a4d13dedc2479db832e4f7eb1bb0f /src/main.cpp
parentf7f19e5ebe45547732c2af39aa7f71feefd76f72 (diff)
Add `-did-you-mean-limit:N`
``` -did-you-mean-limit:<integer> Sets the maximum number of suggestions the compiler provides. Must be an integer >0. If not set, the default limit is 10. ``` e.g. with a limit of 5 ``` W:/Scratch/main.odin(44:7) Error: Undeclared name 'B1' for type 'E' e = .B1 ^^ Suggestion: Did you mean? A23 A02 A19 A20 A21 ... and 25 more ... ```
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/main.cpp b/src/main.cpp
index bba9ffe13..fdafa0cf2 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -330,6 +330,7 @@ enum BuildFlagKind {
BuildFlag_UseSingleModule,
BuildFlag_NoThreadedChecker,
BuildFlag_ShowDebugMessages,
+ BuildFlag_DidYouMeanLimit,
BuildFlag_ShowDefineables,
BuildFlag_ExportDefineables,
@@ -562,6 +563,7 @@ gb_internal bool parse_build_flags(Array<String> args) {
add_flag(&build_flags, BuildFlag_UseSingleModule, str_lit("use-single-module"), BuildFlagParam_None, Command__does_build);
add_flag(&build_flags, BuildFlag_NoThreadedChecker, str_lit("no-threaded-checker"), BuildFlagParam_None, Command__does_check);
add_flag(&build_flags, BuildFlag_ShowDebugMessages, str_lit("show-debug-messages"), BuildFlagParam_None, Command_all);
+ add_flag(&build_flags, BuildFlag_DidYouMeanLimit, str_lit("did-you-mean-limit"), BuildFlagParam_Integer, Command__does_check);
add_flag(&build_flags, BuildFlag_ShowDefineables, str_lit("show-defineables"), BuildFlagParam_None, Command__does_check);
add_flag(&build_flags, BuildFlag_ExportDefineables, str_lit("export-defineables"), BuildFlagParam_String, Command__does_check);
@@ -1305,6 +1307,20 @@ gb_internal bool parse_build_flags(Array<String> args) {
case BuildFlag_ShowDebugMessages:
build_context.show_debug_messages = true;
break;
+
+ case BuildFlag_DidYouMeanLimit:
+ {
+ GB_ASSERT(value.kind == ExactValue_Integer);
+ isize count = cast(isize)big_int_to_i64(&value.value_integer);
+ if (count <= 0) {
+ gb_printf_err("%.*s expected a positive non-zero number, got %.*s\n", LIT(name), LIT(param));
+ build_context.did_you_mean_limit = DEFAULT_DID_YOU_MEAN_LIMIT;
+ } else {
+ build_context.did_you_mean_limit = (int)count;
+ }
+ }
+ break;
+
case BuildFlag_Vet:
build_context.vet_flags |= VetFlag_All;
break;
@@ -1853,6 +1869,8 @@ gb_internal bool parse_build_flags(Array<String> args) {
bad_flags = true;
}
+ if (build_context.did_you_mean_limit == 0) build_context.did_you_mean_limit = DEFAULT_DID_YOU_MEAN_LIMIT;
+
return !bad_flags;
}
@@ -2836,6 +2854,12 @@ gb_internal int print_show_help(String const arg0, String command, String option
print_usage_line(2, "Must be an integer >0.");
print_usage_line(2, "If not set, the default max error count is %d.", DEFAULT_MAX_ERROR_COLLECTOR_COUNT);
}
+
+ if (print_flag("-did-you-mean-limit:<integer>")) {
+ print_usage_line(2, "Sets the maximum number of suggestions the compiler provides.");
+ print_usage_line(2, "Must be an integer >0.");
+ print_usage_line(2, "If not set, the default limit is %d.", DEFAULT_DID_YOU_MEAN_LIMIT);
+ }
}
if (run_or_build) {