64 lines · c
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_UTILS_FILEEXTENSIONSUTILS_H10#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_UTILS_FILEEXTENSIONSUTILS_H11 12#include "../FileExtensionsSet.h"13#include "clang/Basic/SourceLocation.h"14#include "clang/Basic/SourceManager.h"15#include "llvm/ADT/SmallSet.h"16#include "llvm/ADT/StringRef.h"17#include <optional>18 19namespace clang::tidy::utils {20 21/// Checks whether expansion location of \p Loc is in header file.22bool isExpansionLocInHeaderFile(SourceLocation Loc, const SourceManager &SM,23 const FileExtensionsSet &HeaderFileExtensions);24 25/// Checks whether presumed location of \p Loc is in header file.26bool isPresumedLocInHeaderFile(SourceLocation Loc, SourceManager &SM,27 const FileExtensionsSet &HeaderFileExtensions);28 29/// Checks whether spelling location of \p Loc is in header file.30bool isSpellingLocInHeaderFile(SourceLocation Loc, SourceManager &SM,31 const FileExtensionsSet &HeaderFileExtensions);32 33/// Returns recommended default value for the list of header file34/// extensions.35inline StringRef defaultHeaderFileExtensions() { return ";h;hh;hpp;hxx"; }36 37/// Returns recommended default value for the list of implementation file38/// extensions.39inline StringRef defaultImplementationFileExtensions() {40 return "c;cc;cpp;cxx";41}42 43/// Returns recommended default value for the list of file extension44/// delimiters.45inline StringRef defaultFileExtensionDelimiters() { return ",;"; }46 47/// Parses header file extensions from a semicolon-separated list.48bool parseFileExtensions(StringRef AllFileExtensions,49 FileExtensionsSet &FileExtensions,50 StringRef Delimiters);51 52/// Decides whether a file has a header file extension.53/// Returns the file extension, if included in the provided set.54std::optional<StringRef>55getFileExtension(StringRef FileName, const FileExtensionsSet &FileExtensions);56 57/// Decides whether a file has one of the specified file extensions.58bool isFileExtension(StringRef FileName,59 const FileExtensionsSet &FileExtensions);60 61} // namespace clang::tidy::utils62 63#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_UTILS_FILEEXTENSIONSUTILS_H64