[cfe-commits] r144644 - in /cfe/trunk: include/clang/Basic/DiagnosticFrontendKinds.td lib/Basic/DiagnosticIDs.cpp lib/Frontend/Warnings.cpp
Benjamin Kramer
benny.kra at googlemail.com
Tue Nov 15 04:26:40 PST 2011
Author: d0k
Date: Tue Nov 15 06:26:39 2011
New Revision: 144644
URL: http://llvm.org/viewvc/llvm-project?rev=144644&view=rev
Log:
Warning option typo correction: When two options have the same edit_distance don't display either.
Also add a maximum edit distance threshold, so we don't correct "-Wx" to "-W#pragma-messages".
Modified:
cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td
cfe/trunk/lib/Basic/DiagnosticIDs.cpp
cfe/trunk/lib/Frontend/Warnings.cpp
Modified: cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td?rev=144644&r1=144643&r2=144644&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td Tue Nov 15 06:26:39 2011
@@ -148,9 +148,15 @@
def err_not_a_pch_file : Error<
"'%0' does not appear to be a precompiled header file">, DefaultFatal;
def warn_unknown_warning_option : Warning<
- "unknown warning option '%0'; did you mean '%1'?">,
+ "unknown warning option '%0'">,
InGroup<DiagGroup<"unknown-warning-option"> >;
def warn_unknown_negative_warning_option : Warning<
+ "unknown warning option '%0'?">,
+ InGroup<DiagGroup<"unknown-warning-option"> >, DefaultIgnore;
+def warn_unknown_warning_option_suggest : Warning<
+ "unknown warning option '%0'; did you mean '%1'?">,
+ InGroup<DiagGroup<"unknown-warning-option"> >;
+def warn_unknown_negative_warning_option_suggest : Warning<
"unknown warning option '%0'; did you mean '%1'?">,
InGroup<DiagGroup<"unknown-warning-option"> >, DefaultIgnore;
def warn_unknown_warning_specifier : Warning<
Modified: cfe/trunk/lib/Basic/DiagnosticIDs.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/DiagnosticIDs.cpp?rev=144644&r1=144643&r2=144644&view=diff
==============================================================================
--- cfe/trunk/lib/Basic/DiagnosticIDs.cpp (original)
+++ cfe/trunk/lib/Basic/DiagnosticIDs.cpp Tue Nov 15 06:26:39 2011
@@ -683,7 +683,7 @@
StringRef DiagnosticIDs::getNearestWarningOption(StringRef Group) {
StringRef Best;
- unsigned BestDistance = 0;
+ unsigned BestDistance = Group.size() + 1; // Sanity threshold.
for (const WarningOption *i = OptionTable, *e = OptionTable + OptionTableSize;
i != e; ++i) {
// Don't suggest ignored warning flags.
@@ -691,9 +691,11 @@
continue;
unsigned Distance = i->getName().edit_distance(Group, true, BestDistance);
-
- // Check if this is a better match.
- if (Best.empty() || Distance < BestDistance) {
+ if (Distance == BestDistance) {
+ // Two matches with the same distance, don't prefer one over the other.
+ Best = "";
+ } else if (Distance < BestDistance) {
+ // This is a better match.
Best = i->getName();
BestDistance = Distance;
}
Modified: cfe/trunk/lib/Frontend/Warnings.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/Warnings.cpp?rev=144644&r1=144643&r2=144644&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/Warnings.cpp (original)
+++ cfe/trunk/lib/Frontend/Warnings.cpp Tue Nov 15 06:26:39 2011
@@ -31,6 +31,21 @@
#include <algorithm>
using namespace clang;
+// EmitUnkownDiagWarning - Emit a warning and typo hint for unknown warning opts
+static void EmitUnkownDiagWarning(DiagnosticsEngine &Diags,
+ StringRef Prefix, StringRef Opt,
+ bool isPositive) {
+ StringRef Suggestion = DiagnosticIDs::getNearestWarningOption(Opt);
+ if (!Suggestion.empty())
+ Diags.Report(isPositive? diag::warn_unknown_warning_option_suggest :
+ diag::warn_unknown_negative_warning_option_suggest)
+ << (Prefix.str() += Opt) << (Prefix.str() += Suggestion);
+ else
+ Diags.Report(isPositive? diag::warn_unknown_warning_option :
+ diag::warn_unknown_negative_warning_option)
+ << (Prefix.str() += Opt);
+}
+
void clang::ProcessWarningOptions(DiagnosticsEngine &Diags,
const DiagnosticOptions &Opts) {
Diags.setSuppressSystemWarnings(true); // Default to -Wno-system-headers
@@ -118,11 +133,7 @@
// Set the warning as error flag for this specifier.
Diags.setDiagnosticGroupWarningAsError(Specifier, isPositive);
} else if (DiagIDs->getDiagnosticsInGroup(Specifier, _Diags)) {
- Diags.Report(isPositive ? diag::warn_unknown_warning_option :
- diag::warn_unknown_negative_warning_option)
- << ("-W" + Opt.str())
- << ("-Werror=" +
- DiagnosticIDs::getNearestWarningOption(Specifier).str());
+ EmitUnkownDiagWarning(Diags, "-Werror", Specifier, isPositive);
}
continue;
}
@@ -150,20 +161,13 @@
// Set the error as fatal flag for this specifier.
Diags.setDiagnosticGroupErrorAsFatal(Specifier, isPositive);
} else if (DiagIDs->getDiagnosticsInGroup(Specifier, _Diags)) {
- Diags.Report(isPositive ? diag::warn_unknown_warning_option :
- diag::warn_unknown_negative_warning_option)
- << ("-W" + Opt.str())
- << ("-Wfatal-errors=" +
- DiagnosticIDs::getNearestWarningOption(Specifier).str());
+ EmitUnkownDiagWarning(Diags, "-Wfatal-errors", Specifier, isPositive);
}
continue;
}
if (Report && DiagIDs->getDiagnosticsInGroup(Opt, _Diags)) {
- Diags.Report(isPositive ? diag::warn_unknown_warning_option :
- diag::warn_unknown_negative_warning_option)
- << ("-W" + Opt.str())
- << ("-W" + DiagnosticIDs::getNearestWarningOption(Opt).str());
+ EmitUnkownDiagWarning(Diags, "-W", Opt, isPositive);
} else {
Diags.setDiagnosticGroupMapping(Opt, Mapping);
}
More information about the cfe-commits
mailing list