aaron.ballman added inline comments.

================
Comment at: 
clang-tools-extra/clang-tidy/google/ExplicitConstructorCheck.cpp:28-30
+  std::string FullOperatorName =
+      Node.getParent()->getNameAsString().append("::").append(
+          Node.getNameAsString());
----------------
Rather than trying to do this by hand, does `Decl::print()` give you the 
functionality you need? For example, this will likely not work well for classes 
defined within a namespace (it may ignore the wrong class due to not checking 
the namespace). Another thing to consider are templates and how to handle 
those. e.g.,
```
struct Foo {
  template <typename Ty>
  operator Ty() const; // How to silence the diagnostic here?
};
```
Thankfully, specializations can't differ in their explicitness, so you don't 
have to also worry about:
```
struct Foo {
  template <typename Ty>
  explicit operator Ty() const; // This one's explicit
};

template <>
Foo::operator int() const; // Thankfully, this inherits the explicit from the 
primary template.
```


================
Comment at: clang-tools-extra/clang-tidy/google/ExplicitConstructorCheck.cpp:33
+  return llvm::any_of(IgnoredConversionOps,
+                      [FullOperatorName](std::string NameInOptions) {
+                        return NameInOptions == FullOperatorName;
----------------



================
Comment at: clang-tools-extra/clang-tidy/google/ExplicitConstructorCheck.cpp:102
   if (const auto *Conversion =
-      Result.Nodes.getNodeAs<CXXConversionDecl>("conversion")) {
+          Result.Nodes.getNodeAs<CXXConversionDecl>("conversion")) {
     if (Conversion->isOutOfLine())
----------------
mgartmann wrote:
> aaron.ballman wrote:
> > Unintended formatting change?
> This formatting change was done by `clang-format` when `git clang-format 
> HEAD~1` was run. Therefore, I assumed that it is now correctly formatted. 
> 
> Am I wrong?
I've never used the integrated git clang-format before, but I sort of wonder if 
it is getting extra context lines and that's why this one changed? I usually do 
`git diff -U0 --no-color HEAD^ | clang-format-diff.py -i -p1` and then I know 
exactly what range of lines are being touched.


================
Comment at: 
clang-tools-extra/docs/clang-tidy/checks/google-explicit-constructor.rst:74-75
+    ignored and will not trigger a warning. The list to ignore conversion
+    operator `operator B()` in class ``A`` would look as follows:
+    ``"A::operator B"``. The default list is empty.
----------------
We should probably document other identifiers that contribute to the name of 
the operator, like namespaces, template ids, etc. Using code examples for 
anything you think is tricky would be helpful.


================
Comment at: 
clang-tools-extra/test/clang-tidy/checkers/google-explicit-constructor-ignoredconversionoperators-option.cpp:84
+
+  operator A() const;
+  // CHECK-MESSAGES-DEFAULT: :[[@LINE-1]]:3: warning: 'operator A' must be 
marked explicit to avoid unintentional implicit conversions 
[google-explicit-constructor]
----------------
Can you also add an example that an explicit conversion operator does not 
diagnose?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D102779

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

Reply via email to