================
@@ -0,0 +1,78 @@
+//===--- UseInternalLinkageCheck.cpp - 
clang-tidy--------------------------===//
+//
+// 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 "UseInternalLinkageCheck.h"
+#include "../utils/FileExtensionsUtils.h"
+#include "clang/AST/Decl.h"
+#include "clang/ASTMatchers/ASTMatchFinder.h"
+#include "clang/ASTMatchers/ASTMatchers.h"
+#include "clang/ASTMatchers/ASTMatchersMacros.h"
+#include "clang/Basic/SourceLocation.h"
+#include "clang/Basic/Specifiers.h"
+#include "llvm/ADT/STLExtras.h"
+
+using namespace clang::ast_matchers;
+
+namespace clang::tidy::misc {
+
+namespace {
+
+AST_MATCHER(Decl, isFirstDecl) { return Node.isFirstDecl(); }
+
+AST_MATCHER_P(Decl, isInMainFile, FileExtensionsSet, HeaderFileExtensions) {
+  return llvm::all_of(Node.redecls(), [&](const Decl *D) {
+    SourceManager &SM = Finder->getASTContext().getSourceManager();
+    const SourceLocation L = D->getLocation();
+    return SM.isInMainFile(L) &&
+           !utils::isSpellingLocInHeaderFile(L, SM, HeaderFileExtensions);
+  });
----------------
PiotrZSL wrote:

"because decl-1 is not in main file" but thats still source file and thats a 
point.

Take into account 2 use cases:
1. user want to run check on a header files, in such case header file will be a 
main file, and check wont work.
2. user want to run check on unity cpp, where there is single .cpp file 
generated by cmake that include other cpp files and those files include header 
files.
In both cases user should be able to do that. 

You already got "allOf(isFirstDecl(), isInMainFile(HeaderFileExtensions)," and 
thats fine. so check should work only if first declaration is in source file 
(no additional header) or when declaration and definition is in header file, in 
such case adding static/anonymous namespace is also expected (but only if user 
explicitly want to run check on headers - by messing up with compile commands 
json for example).

https://github.com/llvm/llvm-project/pull/90830
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to