blob: 749ce6c667396d044134a887e38533d145341fa2 [file] [log] [blame]
Haojian Wuc2d75772016-02-05 11:23:59 +00001//===--- 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
10#include "HeaderFileExtensionsUtils.h"
11#include "clang/Basic/CharInfo.h"
12
13namespace clang {
14namespace tidy {
15namespace utils {
16
17bool isExpansionLocInHeaderFile(
18 SourceLocation Loc, const SourceManager &SM,
19 const HeaderFileExtensionsSet &HeaderFileExtensions) {
20 SourceLocation ExpansionLoc = SM.getExpansionLoc(Loc);
21 StringRef FileExtension =
22 llvm::sys::path::extension(SM.getFilename(ExpansionLoc));
23 return HeaderFileExtensions.count(FileExtension.substr(1)) > 0;
24}
25
26bool isPresumedLocInHeaderFile(
27 SourceLocation Loc, SourceManager &SM,
28 const HeaderFileExtensionsSet &HeaderFileExtensions) {
29 PresumedLoc PresumedLocation = SM.getPresumedLoc(Loc);
30 StringRef FileExtension =
31 llvm::sys::path::extension(PresumedLocation.getFilename());
32 return HeaderFileExtensions.count(FileExtension.substr(1)) > 0;
33}
34
35bool isSpellingLocInHeaderFile(
36 SourceLocation Loc, SourceManager &SM,
37 const HeaderFileExtensionsSet &HeaderFileExtensions) {
38 SourceLocation SpellingLoc = SM.getSpellingLoc(Loc);
39 StringRef FileExtension =
40 llvm::sys::path::extension(SM.getFilename(SpellingLoc));
41
42 return HeaderFileExtensions.count(FileExtension.substr(1)) > 0;
43}
44
45bool parseHeaderFileExtensions(StringRef AllHeaderFileExtensions,
46 HeaderFileExtensionsSet &HeaderFileExtensions,
47 char delimiter) {
48 SmallVector<StringRef, 5> Suffixes;
49 AllHeaderFileExtensions.split(Suffixes, delimiter);
50 HeaderFileExtensions.clear();
51 for (StringRef Suffix : Suffixes) {
52 StringRef Extension = Suffix.trim();
53 for (StringRef::const_iterator it = Extension.begin();
54 it != Extension.end(); ++it) {
55 if (!isAlphanumeric(*it))
56 return false;
57 }
58 HeaderFileExtensions.insert(Extension);
59 }
60 return true;
61}
62
63} // namespace utils
64} // namespace tidy
65} // namespace clang