[PATCH] D51333: Diagnose likely typos in include statements
Christy Lee via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 12 15:06:18 PDT 2018
christylee updated this revision to Diff 165162.
christylee edited the summary of this revision.
christylee added a comment.
Emit non-fatal error for typo if file exists.
https://reviews.llvm.org/D51333
Files:
include/clang/Basic/DiagnosticLexKinds.td
lib/Lex/PPDirectives.cpp
Index: lib/Lex/PPDirectives.cpp
===================================================================
--- lib/Lex/PPDirectives.cpp
+++ lib/Lex/PPDirectives.cpp
@@ -1879,12 +1879,38 @@
Callbacks ? &RelativePath : nullptr, &SuggestedModule, &IsMapped);
if (File) {
SourceRange Range(FilenameTok.getLocation(), CharEnd);
- Diag(FilenameTok, diag::err_pp_file_not_found_not_fatal) <<
+ Diag(FilenameTok, diag::err_pp_file_not_found_angled_include_not_fatal) <<
Filename <<
FixItHint::CreateReplacement(Range, "\"" + Filename.str() + "\"");
}
}
+ // Check for likely typos due to leading or trailing non-isAlphanumeric
+ // characters
+ if (!File) {
+ auto originalFilename = Filename;
+ while (!isAlphanumeric(Filename.front())) {
+ Filename = Filename.drop_front();
+ }
+ while (!isAlphanumeric(Filename.back())) {
+ Filename = Filename.drop_back();
+ }
+
+ File = LookupFile(
+ FilenameLoc,
+ LangOpts.MSVCCompat ? NormalizedPath.c_str() : Filename, false,
+ LookupFrom, LookupFromFile, CurDir,
+ Callbacks ? &SearchPath : nullptr,
+ Callbacks ? &RelativePath : nullptr, &SuggestedModule, &IsMapped);
+ if (File) {
+ SourceRange Range(FilenameTok.getLocation(), CharEnd);
+ Diag(FilenameTok, diag::err_pp_file_not_found_typo_not_fatal)
+ << originalFilename
+ << FixItHint::CreateReplacement(Range,
+ "\"" + Filename.str() + "\"");
+ }
+ }
+
// If the file is still not found, just go with the vanilla diagnostic
if (!File)
Diag(FilenameTok, diag::err_pp_file_not_found) << Filename
Index: include/clang/Basic/DiagnosticLexKinds.td
===================================================================
--- include/clang/Basic/DiagnosticLexKinds.td
+++ include/clang/Basic/DiagnosticLexKinds.td
@@ -422,8 +422,11 @@
"#pragma hdrstop filename not supported, "
"/Fp can be used to specify precompiled header filename">,
InGroup<ClangClPch>;
-def err_pp_file_not_found_not_fatal : Error<
+def err_pp_file_not_found_angled_include_not_fatal : Error<
"'%0' file not found with <angled> include; use \"quotes\" instead">;
+def err_pp_file_not_found_typo_not_fatal
+ : Error<"'%0' file not found due to leading or trailing non-alphanumeric "
+ "characters">;
def err_pp_error_opening_file : Error<
"error opening file '%0': %1">, DefaultFatal;
def err_pp_empty_filename : Error<"empty filename">;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D51333.165162.patch
Type: text/x-patch
Size: 2670 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180912/dabd5db1/attachment.bin>
More information about the cfe-commits
mailing list