gribozavr2 added a comment.

Thank you for the contribution! I didn't review the code thoroughly yet, only 
the tests.



================
Comment at: 
clang-tools-extra/clang-tidy/misc/MissingHeaderFileDeclarationCheck.cpp:29
+
+  bool isHeader() const {
+    return llvm::StringSwitch<bool>(Extension)
----------------
I think we should consider any file other than the main file to be a header 
(anything brought in by `#include`). Projects have lots of different convention 
-- for example, LLVM uses a `.inc` extension for some generated files and 
x-macro files. The standard library does not have any extensions at all (and 
I'm sure some projects imitate that) etc.


================
Comment at: 
clang-tools-extra/clang-tidy/misc/MissingHeaderFileDeclarationCheck.cpp:75
+      continue;
+    if (AnyHeader || File->NamePart.equals_lower(ThisFile->NamePart))
+      return; // Found a good candidate for matching decl
----------------
This heuristic should be a lot more complex. In practice people have more 
complex naming conventions (for example, in Clang, Sema.h corresponds to many 
files named SemaSomethingSomething.cpp).

I think there is a high chance that checking only a header with a matching name 
will satisfy too few projects to be worth implementing.

On the other hand, if you could use C++ or Clang modules to narrow down the 
list of headers where the declaration should appear, that would be a much 
stronger signal.


================
Comment at: 
clang-tools-extra/docs/clang-tidy/checks/misc-missing-header-file-declaration.rst:14
+   
+   If set to `1` the check will look in any header file for a matching
+   declaration.
----------------
Unclear what happens when CheckAnyHeader=0.


================
Comment at: 
clang-tools-extra/test/clang-tidy/checkers/Inputs/misc-missing-header-file-declaration/misc-missing-header-file-declaration.cpp.tmp.h:22
+extern void nS();
+} // namespace ns2
+
----------------
Need a test for a template defined in a header (shouldn't produce a warning).

Need a test for an inline function defined in a header (also no warning).

Need a test for a static function defined in a header (should produce no 
warning, but it is bad for other reasons, however I think they are out of scope 
for this checker).

Need a test for an anonymous namespace in a header (no warning).


================
Comment at: 
clang-tools-extra/test/clang-tidy/checkers/misc-missing-header-file-declaration.cpp:1
+// RUN: %check_clang_tidy %s misc-missing-header-file-declaration %t -- \
+// RUN: -- -I%S/Inputs/misc-missing-header-file-declaration
----------------
Need lots of tests for classes, out-of-line member declarations, member 
templates, out-of-line member templates, class templates, variable templates 
etc.


================
Comment at: 
clang-tools-extra/test/clang-tidy/checkers/misc-missing-header-file-declaration.cpp:80
+void templateFuncNoHeader() {}
+// CHECK-MESSAGES: :[[@LINE-1]]:6: warning: Function 'templateFuncNoHeader' is 
defined with external linkage
+
----------------
Need a test for a template in an anonymous namespace.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D73413/new/

https://reviews.llvm.org/D73413



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to