[PATCH] D68227: [clang-format] [PR43372] - clang-format shows replacements in DOS files when no replacement is needed

Krasimir Georgiev via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Oct 1 02:05:39 PDT 2019


krasimir added inline comments.


================
Comment at: clang/lib/Format/Format.cpp:1828
 
+// Replace "\r\n" with "\n"
+std::string replaceCRLF(std::string Code) {
----------------
nit: missing trailing fullstop.


================
Comment at: clang/lib/Format/Format.cpp:1832
+  while ((Pos = Code.find("\r\n", Pos)) != std::string::npos) {
+    Code.replace(Pos, 2, "\n");
+    Pos += 1;
----------------
The worst-case complexity of this code is quadratic, since `std::string::replace` is linear in the size of the resulting string.
If we have an include block of a few hundred lines, each a hundred or so characters, I could imagine that could easily add up.
I'd suggest constructing the result by appending to a fresh string to keep the overall complexity linear.
You can then take the argument by const reference.


================
Comment at: clang/lib/Format/Format.cpp:1838
+
+// Compares two strings but ignores any \r in either strings.
+static bool compareIgnoringCarriageReturns(std::string Result,
----------------
Maybe refine this comment: ignoring any `\r`, followed by `\n` in either strings.
Alternatively, since this function is just performing a comparison, consider directly inlining it in the `if` statements below (not too strong opinion).


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

https://reviews.llvm.org/D68227





More information about the cfe-commits mailing list