clang-tools  3.9.0
HeaderFileExtensionsUtils.cpp
Go to the documentation of this file.
1 //===--- HeaderFileExtensionsUtils.cpp - clang-tidy--------------*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
11 #include "clang/Basic/CharInfo.h"
12 #include "llvm/Support/Path.h"
13 
14 namespace clang {
15 namespace tidy {
16 namespace utils {
17 
19  SourceLocation Loc, const SourceManager &SM,
20  const HeaderFileExtensionsSet &HeaderFileExtensions) {
21  SourceLocation ExpansionLoc = SM.getExpansionLoc(Loc);
22  StringRef FileExtension =
23  llvm::sys::path::extension(SM.getFilename(ExpansionLoc));
24  return HeaderFileExtensions.count(FileExtension.substr(1)) > 0;
25 }
26 
28  SourceLocation Loc, SourceManager &SM,
29  const HeaderFileExtensionsSet &HeaderFileExtensions) {
30  PresumedLoc PresumedLocation = SM.getPresumedLoc(Loc);
31  StringRef FileExtension =
32  llvm::sys::path::extension(PresumedLocation.getFilename());
33  return HeaderFileExtensions.count(FileExtension.substr(1)) > 0;
34 }
35 
37  SourceLocation Loc, SourceManager &SM,
38  const HeaderFileExtensionsSet &HeaderFileExtensions) {
39  SourceLocation SpellingLoc = SM.getSpellingLoc(Loc);
40  StringRef FileExtension =
41  llvm::sys::path::extension(SM.getFilename(SpellingLoc));
42 
43  return HeaderFileExtensions.count(FileExtension.substr(1)) > 0;
44 }
45 
46 bool parseHeaderFileExtensions(StringRef AllHeaderFileExtensions,
47  HeaderFileExtensionsSet &HeaderFileExtensions,
48  char delimiter) {
49  SmallVector<StringRef, 5> Suffixes;
50  AllHeaderFileExtensions.split(Suffixes, delimiter);
51  HeaderFileExtensions.clear();
52  for (StringRef Suffix : Suffixes) {
53  StringRef Extension = Suffix.trim();
54  for (StringRef::const_iterator it = Extension.begin();
55  it != Extension.end(); ++it) {
56  if (!isAlphanumeric(*it))
57  return false;
58  }
59  HeaderFileExtensions.insert(Extension);
60  }
61  return true;
62 }
63 
64 } // namespace utils
65 } // namespace tidy
66 } // namespace clang
SourceLocation Loc
'#' location in the include directive
bool parseHeaderFileExtensions(StringRef AllHeaderFileExtensions, HeaderFileExtensionsSet &HeaderFileExtensions, char delimiter)
Parses header file extensions from a semicolon-separated list.
bool isSpellingLocInHeaderFile(SourceLocation Loc, SourceManager &SM, const HeaderFileExtensionsSet &HeaderFileExtensions)
Checks whether spelling location of Loc is in header file.
bool isPresumedLocInHeaderFile(SourceLocation Loc, SourceManager &SM, const HeaderFileExtensionsSet &HeaderFileExtensions)
Checks whether presumed location of Loc is in header file.
bool isExpansionLocInHeaderFile(SourceLocation Loc, const SourceManager &SM, const HeaderFileExtensionsSet &HeaderFileExtensions)
Checks whether expansion location of Loc is in header file.
SourceManager & SM
llvm::SmallSet< llvm::StringRef, 5 > HeaderFileExtensionsSet