CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
65 lines
2.4 KiB
C++
65 lines
2.4 KiB
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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_ABSEIL_ABSEILMATCHER_H
|
|
#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_ABSEIL_ABSEILMATCHER_H
|
|
|
|
#include "clang/AST/ASTContext.h"
|
|
#include "clang/ASTMatchers/ASTMatchFinder.h"
|
|
#include <algorithm>
|
|
|
|
namespace clang::ast_matchers {
|
|
|
|
/// Matches AST nodes that were found within Abseil files.
|
|
///
|
|
/// Example matches Y but not X
|
|
/// (matcher = cxxRecordDecl(isInAbseilFile())
|
|
/// \code
|
|
/// #include "absl/strings/internal-file.h"
|
|
/// class X {};
|
|
/// \endcode
|
|
/// absl/strings/internal-file.h:
|
|
/// \code
|
|
/// class Y {};
|
|
/// \endcode
|
|
///
|
|
/// Usable as: Matcher<Decl>, Matcher<Stmt>, Matcher<TypeLoc>,
|
|
/// Matcher<NestedNameSpecifierLoc>
|
|
AST_POLYMORPHIC_MATCHER(
|
|
isInAbseilFile, AST_POLYMORPHIC_SUPPORTED_TYPES(Decl, Stmt, TypeLoc,
|
|
NestedNameSpecifierLoc)) {
|
|
auto &SourceManager = Finder->getASTContext().getSourceManager();
|
|
const SourceLocation Loc = SourceManager.getSpellingLoc(Node.getBeginLoc());
|
|
if (Loc.isInvalid())
|
|
return false;
|
|
OptionalFileEntryRef FileEntry =
|
|
SourceManager.getFileEntryRefForID(SourceManager.getFileID(Loc));
|
|
if (!FileEntry)
|
|
return false;
|
|
// Determine whether filepath contains "absl/[absl-library]" substring, where
|
|
// [absl-library] is AbseilLibraries list entry.
|
|
StringRef Path = FileEntry->getName();
|
|
static constexpr StringRef AbslPrefix("absl/");
|
|
const size_t PrefixPosition = Path.find(AbslPrefix);
|
|
if (PrefixPosition == StringRef::npos)
|
|
return false;
|
|
Path = Path.drop_front(PrefixPosition + AbslPrefix.size());
|
|
static constexpr StringRef AbseilLibraries[] = {
|
|
"algorithm", "base", "container", "debugging", "flags",
|
|
"hash", "iterator", "memory", "meta", "numeric",
|
|
"profiling", "random", "status", "strings", "synchronization",
|
|
"time", "types", "utility"};
|
|
return llvm::any_of(AbseilLibraries, [&](StringRef Library) {
|
|
return Path.starts_with(Library);
|
|
});
|
|
}
|
|
|
|
} // namespace clang::ast_matchers
|
|
|
|
#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_ABSEIL_ABSEILMATCHER_H
|