[clang-tools-extra] 3e067d4 - [include-cleaner] Move vocabulary types into separate header for layering. NFC
Sam McCall via cfe-commits
cfe-commits at lists.llvm.org
Tue Oct 25 10:02:08 PDT 2022
Author: Sam McCall
Date: 2022-10-25T19:01:59+02:00
New Revision: 3e067d4e59b73b0eaeda7c369d93a6e18f2cdde8
URL: https://github.com/llvm/llvm-project/commit/3e067d4e59b73b0eaeda7c369d93a6e18f2cdde8
DIFF: https://github.com/llvm/llvm-project/commit/3e067d4e59b73b0eaeda7c369d93a6e18f2cdde8.diff
LOG: [include-cleaner] Move vocabulary types into separate header for layering. NFC
Added:
clang-tools-extra/include-cleaner/include/clang-include-cleaner/Types.h
Modified:
clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h
clang-tools-extra/include-cleaner/lib/Analysis.cpp
clang-tools-extra/include-cleaner/unittests/AnalysisTest.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h b/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h
index 0c28119831988..42e619ef4c9bd 100644
--- a/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h
+++ b/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Analysis.h
@@ -11,7 +11,8 @@
#ifndef CLANG_INCLUDE_CLEANER_ANALYSIS_H
#define CLANG_INCLUDE_CLEANER_ANALYSIS_H
-#include "clang/Tooling/Inclusions/StandardLibrary.h"
+#include "clang-include-cleaner/Types.h"
+#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/STLFunctionalExtras.h"
#include <variant>
@@ -21,30 +22,6 @@ class Decl;
class FileEntry;
namespace include_cleaner {
-/// An entity that can be referenced in the code.
-struct Symbol {
- Symbol(Decl &D) : Storage(&D) {}
- Symbol(tooling::stdlib::Symbol S) : Storage(S) {}
-
-private:
- // FIXME: Add support for macros.
- std::variant<const Decl *, tooling::stdlib::Symbol> Storage;
-};
-
-/// Represents a file that provides some symbol. Might not be includeable, e.g.
-/// built-in or main-file itself.
-struct Header {
- /// A physical (or logical, in case of a builtin) file.
- Header(const FileEntry *FE) : Storage(FE) {}
- /// A logical file representing a stdlib header.
- Header(tooling::stdlib::Header H) : Storage(H) {}
-
- bool operator==(const Header &RHS) const { return Storage == RHS.Storage; }
-
-private:
- // FIXME: Handle verbatim spellings.
- std::variant<const FileEntry *, tooling::stdlib::Header> Storage;
-};
/// A UsedSymbolCB is a callback invoked for each symbol reference seen.
///
/// References occur at a particular location, refer to a single symbol, and
diff --git a/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Types.h b/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Types.h
new file mode 100644
index 0000000000000..45c819a9e0736
--- /dev/null
+++ b/clang-tools-extra/include-cleaner/include/clang-include-cleaner/Types.h
@@ -0,0 +1,63 @@
+//===--- Types.h - Data structures for used-symbol analysis -------- 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
+//
+//===----------------------------------------------------------------------===//
+//
+// Find referenced files is mostly a matter of translating:
+// AST Node => declaration => source location => file
+//
+// clang has types for these (DynTypedNode, Decl, SourceLocation, FileID), but
+// there are special cases: macros are not declarations, the concrete file where
+// a standard library symbol was defined doesn't matter, etc.
+//
+// We define some slightly more abstract sum types to handle these cases while
+// keeping the API clean. For example, Symbol may be a Decl AST node, a macro,
+// or a recognized standard library symbol.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef CLANG_INCLUDE_CLEANER_RECORD_H
+#define CLANG_INCLUDE_CLEANER_RECORD_H
+
+#include "clang/Tooling/Inclusions/StandardLibrary.h"
+#include <memory>
+#include <vector>
+
+namespace clang {
+class Decl;
+class FileEntry;
+namespace include_cleaner {
+
+/// An entity that can be referenced in the code.
+struct Symbol {
+ Symbol(Decl &D) : Storage(&D) {}
+ Symbol(tooling::stdlib::Symbol S) : Storage(S) {}
+
+private:
+ // FIXME: Add support for macros.
+ std::variant<const Decl *, tooling::stdlib::Symbol> Storage;
+};
+
+/// Represents a file that provides some symbol. Might not be includeable, e.g.
+/// built-in or main-file itself.
+struct Header {
+ /// A physical (or logical, in case of a builtin) file.
+ Header(const FileEntry *FE) : Storage(FE) {}
+ /// A logical file representing a stdlib header.
+ Header(tooling::stdlib::Header H) : Storage(H) {}
+
+ bool operator==(const Header &RHS) const { return Storage == RHS.Storage; }
+
+private:
+ // FIXME: Handle verbatim spellings.
+ std::variant<const FileEntry *, tooling::stdlib::Header> Storage;
+};
+
+} // namespace include_cleaner
+} // namespace clang
+
+#endif
+
diff --git a/clang-tools-extra/include-cleaner/lib/Analysis.cpp b/clang-tools-extra/include-cleaner/lib/Analysis.cpp
index 72fac3c9c0084..6b34f81384f15 100644
--- a/clang-tools-extra/include-cleaner/lib/Analysis.cpp
+++ b/clang-tools-extra/include-cleaner/lib/Analysis.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "clang-include-cleaner/Analysis.h"
+#include "clang-include-cleaner/Types.h"
#include "AnalysisInternal.h"
#include "clang/AST/ASTContext.h"
#include "clang/Basic/SourceManager.h"
diff --git a/clang-tools-extra/include-cleaner/unittests/AnalysisTest.cpp b/clang-tools-extra/include-cleaner/unittests/AnalysisTest.cpp
index ab3e38630faac..dd7cd9d53d7de 100644
--- a/clang-tools-extra/include-cleaner/unittests/AnalysisTest.cpp
+++ b/clang-tools-extra/include-cleaner/unittests/AnalysisTest.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "clang-include-cleaner/Analysis.h"
+#include "clang-include-cleaner/Types.h"
#include "clang/AST/ASTContext.h"
#include "clang/Basic/FileManager.h"
#include "clang/Basic/SourceLocation.h"
More information about the cfe-commits
mailing list