From 3486cc014b208df3897cf5656db0d0fdeae26d6b Mon Sep 17 00:00:00 2001 From: Jonathan Roelofs Date: Tue, 25 Feb 2020 10:41:32 -0700 Subject: [clang-tidy] Generalize HeaderFileExtensions.{h,cpp}. NFC https://reviews.llvm.org/D75489 --- .../clang-tidy/utils/FileExtensionsUtils.cpp | 60 ++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 clang-tools-extra/clang-tidy/utils/FileExtensionsUtils.cpp (limited to 'clang-tools-extra/clang-tidy/utils/FileExtensionsUtils.cpp') diff --git a/clang-tools-extra/clang-tidy/utils/FileExtensionsUtils.cpp b/clang-tools-extra/clang-tidy/utils/FileExtensionsUtils.cpp new file mode 100644 index 0000000..c016a72 --- /dev/null +++ b/clang-tools-extra/clang-tidy/utils/FileExtensionsUtils.cpp @@ -0,0 +1,60 @@ +//===--- FileExtensionsUtils.cpp - clang-tidy -------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "FileExtensionsUtils.h" +#include "clang/Basic/CharInfo.h" +#include "llvm/Support/Path.h" + +namespace clang { +namespace tidy { +namespace utils { + +bool isExpansionLocInHeaderFile(SourceLocation Loc, const SourceManager &SM, + const FileExtensionsSet &HeaderFileExtensions) { + SourceLocation ExpansionLoc = SM.getExpansionLoc(Loc); + return isFileExtension(SM.getFilename(ExpansionLoc), HeaderFileExtensions); +} + +bool isPresumedLocInHeaderFile(SourceLocation Loc, SourceManager &SM, + const FileExtensionsSet &HeaderFileExtensions) { + PresumedLoc PresumedLocation = SM.getPresumedLoc(Loc); + return isFileExtension(PresumedLocation.getFilename(), HeaderFileExtensions); +} + +bool isSpellingLocInHeaderFile(SourceLocation Loc, SourceManager &SM, + const FileExtensionsSet &HeaderFileExtensions) { + SourceLocation SpellingLoc = SM.getSpellingLoc(Loc); + return isFileExtension(SM.getFilename(SpellingLoc), HeaderFileExtensions); +} + +bool parseFileExtensions(StringRef AllFileExtensions, + FileExtensionsSet &FileExtensions, char Delimiter) { + SmallVector Suffixes; + AllFileExtensions.split(Suffixes, Delimiter); + FileExtensions.clear(); + for (StringRef Suffix : Suffixes) { + StringRef Extension = Suffix.trim(); + if (!llvm::all_of(Extension, isAlphanumeric)) + return false; + FileExtensions.insert(Extension); + } + return true; +} + +bool isFileExtension(StringRef FileName, + const FileExtensionsSet &FileExtensions) { + StringRef Extension = llvm::sys::path::extension(FileName); + if (Extension.empty()) + return false; + // Skip "." prefix. + return FileExtensions.count(Extension.substr(1)) > 0; +} + +} // namespace utils +} // namespace tidy +} // namespace clang -- cgit v1.1