mikecrowe added inline comments.

================
Comment at: 
clang-tools-extra/clang-tidy/readability/RedundantStringCStrCheck.cpp:189
+                              getLangOpts().CPlusPlus2b
+                                  ? hasAnyName("::std::print", "::std::format")
+                                  : hasName("::std::format"))),
----------------
mikecrowe wrote:
> PiotrZSL wrote:
> > Please introduce configuration option to specify custom functions.
> > For example if some project (like mine) is wrapping fmt::format with some 
> > variadic template function, then such function could be specified.
> > Same goes to things like some loggers.
> > 
> > Check utils/OptionsUtils.h for configuration, and  utils/Matchers.h 
> > (matchesAnyListedName)
> > Please introduce configuration option to specify custom functions.
> > For example if some project (like mine) is wrapping fmt::format with some 
> > variadic template function, then such function could be specified.
> 
> That's exactly where this change originated (as part of [[ 
> https://github.com/mikecrowe/clang-tidy-fmt | my clang-tidy fmt fork ]], 
> which I hope to submit for review soon once I've made it configurable too and 
> improved the test cases.)
> 
> > Same goes to things like some loggers.
> > 
> > Check utils/OptionsUtils.h for configuration, and  utils/Matchers.h 
> > (matchesAnyListedName)
> 
> Thanks for the pointer. I shall study those files for how to support this.
> 
> Do you think that the change can land like in its current state first? Or 
> would you prefer that the configuration option is added at the same time?
> Please introduce configuration option to specify custom functions.
> For example if some project (like mine) is wrapping fmt::format with some 
> variadic template function, then such function could be specified.

I could add some sort of `readability-redundant-string-cstr.PrintFunction` 
option or `readability-redundant-string-cstr.FormatFunction` option, but 
reducing this to its fundamental behaviour would be "a function that takes 
`const char *` arguments that is also willing to take `std::string` arguments". 
I'm struggling to find a sensible name for such an option. Maybe 
`readability-redundant-string-cstr.StdStringAcceptingFunction=::fmt::format`? 
Or just `readability-redundant-string-cstr.FunctionCall=::fmt::format`?

> Same goes to things like some loggers.

Loggers may be classes, so there would need to be an option that specifies a 
class name (or even a base class name) and a method name (which may be an 
operator.) See [[ 
https://github.com/mikecrowe/clang-tidy-fmt/blob/7ace8a3ff41e9679104fe558835b0ef3cb33d969/clang-tools-extra/clang-tidy/readability/RedundantStringCStrCheck.cpp#L196
 | this hard-coded example ]] (If it's not obvious, there's a description in 
the [[ 
https://github.com/mikecrowe/clang-tidy-fmt/blob/7ace8a3ff41e9679104fe558835b0ef3cb33d969/README.md?plain=1#L103
 | README ]]. In such cases the options could be 
`readability-redundant-string-cstr.Class=::BaseTrace` and 
`readability-redundant-string-cstr.Method=Log` or 
`readability-redundant-string-cstr.Operator=()`, but then it would be hard to 
tie together the right classes and methods. That could be avoided with 
something like 
`readability-redundant-string-cstr.MemberFunctionCall=::BaseTrace::operator(),::NullTrace::operator()`
 and some parsing I suppose.

Regardless, I'll try and get the simple case working and await suggestions for 
appropriate option names.

Thanks again for the suggestions.



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

https://reviews.llvm.org/D143342

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

Reply via email to