mikecrowe marked 9 inline comments as done.
mikecrowe added a comment.

Thanks for the reviews!



================
Comment at: clang-tools-extra/clang-tidy/modernize/UseStdFormatCheck.cpp:81
+                             << ReplacementFormatFunction
+                             << OldFunction->getIdentifier()
+                             << Converter.conversionNotPossibleReason();
----------------
PiotrZSL wrote:
> using ``<< OldFunction`` should be sufficient and more safe, same in line 88
I don't think that's the same. If I use just `OldFunction` then I get the 
template arguments in strings like `StrFormat<const char *, const char *, const 
char *, const char *>` and `sprintf<char[6], int>` when I just want `StrFormat` 
and `sprintf` respectively.


================
Comment at: clang-tools-extra/clang-tidy/utils/FormatStringConverter.cpp:629-630
+  if (Config.AllowTrailingNewlineRemoval &&
+      StringRef(StandardFormatString).ends_with("\\n") &&
       !StringRef(StandardFormatString).ends_with("\\\\n")) {
     UsePrintNewlineFunction = true;
----------------
PiotrZSL wrote:
> what if it's ends with Windows new line style ? Will it work ?
Good point. Your question actually relates to the `modernize-use-std-print` 
check only since `config.AllowTrailingNewlineRemoval` is always `false` in this 
check.

`std::println` is [[ https://en.cppreference.com/w/cpp/io/println | described 
]] as just appending `\n` to the end of the formatted string when written to 
the desired output. The code here means that `printf("A\r\n")` would be 
converted to `std::println("A\r")` which would behave in the same way, though I 
would admit that it's rather confusing.

This situation isn't really Windows-specific. Most the of the time a POSIX tty 
would be in cooked mode, so the `\r` would be added automatically before the 
`\n`. However, when the tty is in raw mode using `\r\n` line endings would be 
necessary there too, just as they might be on Windows when writing to a binary 
stream.

I think that the least confusing outcome would be for this code to not consider 
format strings that end with `\r\n`  to be suitable for conversion to 
`std::println` and let them use `std::print` instead. I think that this better 
reflects the intent of the existing code.

I will prepare a separate change for this.


================
Comment at: 
clang-tools-extra/docs/clang-tidy/checks/modernize/use-std-format.rst:27
+The check uses the same format-string-conversion algorithm as
+`modernize-use-std-print <modernize/use-std-print.html>` and its
+shortcomings are described in the documentation for that check.
----------------
PiotrZSL wrote:
> is this link correct ? shouldn't this be put into `doc:`, verify if its 
> working
It was wrong, but I believe that I've fixed it.


================
Comment at: 
clang-tools-extra/docs/clang-tidy/checks/modernize/use-std-format.rst:33
+
+.. option:: StrictMode TODO
+
----------------
PiotrZSL wrote:
> If not implemented, do not add it
It is implemented, I just forgot to remove the TODO.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D154287

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

Reply via email to