ctest: Add CLI argument spell checking

Use Levenshtein distance to track when the user may have made a typo in
an argument to `ctest`.
This commit is contained in:
Tyler Yankee
2026-09-11 08:23:32 -04:00
parent 1a68ffd75f
commit ec138e6f8e
4 changed files with 13 additions and 1 deletions
+9 -1
View File
@@ -2615,7 +2615,15 @@ int cmCTest::Run(std::vector<std::string> const& args)
}
}
if (!matched && cmHasPrefix(arg, '-') && !isPresetArgument(arg)) {
cmSystemTools::Error(cmStrCat("Unknown argument: ", arg));
std::string error = cmStrCat("Unknown argument: ", arg);
std::vector<CommandArgument> allArguments = arguments;
cm::append(allArguments, presetArguments);
std::string const suggestion =
cmFindClosestCommandLineArgument(arg, allArguments);
if (!suggestion.empty()) {
error = cmStrCat(error, ". Did you mean: ", suggestion, '?');
}
cmSystemTools::Error(error);
cmSystemTools::Error("Run 'ctest --help' for all supported options.");
return 1;
}
@@ -951,6 +951,7 @@ endfunction()
run_output_junit_invalid()
run_cmake_command(invalid-ctest-argument ${CMAKE_CTEST_COMMAND} --not-a-valid-ctest-argument)
run_cmake_command(invalid-ctest-argument-did-you-mean ${CMAKE_CTEST_COMMAND} --parallell 2)
block()
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/TimeoutDefault)
@@ -0,0 +1,2 @@
CMake Error: Unknown argument: --parallell\. Did you mean: --parallel\?
CMake Error: Run 'ctest --help' for all supported options\.