r304141 - clang-format: [JS] do not clean up duplicated commas.

Martin Probst via cfe-commits cfe-commits at lists.llvm.org
Mon May 29 01:41:12 PDT 2017


Author: mprobst
Date: Mon May 29 03:41:11 2017
New Revision: 304141

URL: http://llvm.org/viewvc/llvm-project?rev=304141&view=rev
Log:
clang-format: [JS] do not clean up duplicated commas.

Summary:
In JavaScript, duplicated commas have semantic meaning.
    x = [a,,b];

The statement above creates an array with three entries, the middle being undefined. Because clang-format should not change semantics, disable this cleanup in JS.

Reviewers: djasper

Subscribers: klimek

Differential Revision: https://reviews.llvm.org/D33641

Modified:
    cfe/trunk/lib/Format/Format.cpp
    cfe/trunk/unittests/Format/CleanupTest.cpp

Modified: cfe/trunk/lib/Format/Format.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=304141&r1=304140&r2=304141&view=diff
==============================================================================
--- cfe/trunk/lib/Format/Format.cpp (original)
+++ cfe/trunk/lib/Format/Format.cpp Mon May 29 03:41:11 2017
@@ -1910,6 +1910,9 @@ tooling::Replacements reformat(const For
 tooling::Replacements cleanup(const FormatStyle &Style, StringRef Code,
                               ArrayRef<tooling::Range> Ranges,
                               StringRef FileName) {
+  // cleanups only apply to C++ (they mostly concern ctor commas etc.)
+  if (Style.Language != FormatStyle::LK_Cpp)
+    return tooling::Replacements();
   std::unique_ptr<Environment> Env =
       Environment::CreateVirtualEnvironment(Code, FileName, Ranges);
   Cleaner Clean(*Env, Style);

Modified: cfe/trunk/unittests/Format/CleanupTest.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/CleanupTest.cpp?rev=304141&r1=304140&r2=304141&view=diff
==============================================================================
--- cfe/trunk/unittests/Format/CleanupTest.cpp (original)
+++ cfe/trunk/unittests/Format/CleanupTest.cpp Mon May 29 03:41:11 2017
@@ -36,11 +36,12 @@ protected:
 
   // Returns code after cleanup around \p Offsets.
   std::string cleanupAroundOffsets(llvm::ArrayRef<unsigned> Offsets,
-                                   llvm::StringRef Code) {
+                                   llvm::StringRef Code,
+                                   const FormatStyle &Style = getLLVMStyle()) {
     std::vector<tooling::Range> Ranges;
     for (auto Offset : Offsets)
       Ranges.push_back(tooling::Range(Offset, 0));
-    return cleanup(Code, Ranges);
+    return cleanup(Code, Ranges, Style);
   }
 };
 
@@ -171,6 +172,14 @@ TEST_F(CleanupTest, ListRedundantComma)
   EXPECT_EQ(Expected, cleanupAroundOffsets({17, 22}, Code));
 }
 
+TEST_F(CleanupTest, NoCleanupsForJavaScript) {
+  std::string Code = "function f() { var x = [a, b, , c]; }";
+  std::string Expected = "function f() { var x = [a, b, , c]; }";
+  const FormatStyle &Style = getGoogleStyle(FormatStyle::LK_JavaScript);
+
+  EXPECT_EQ(Expected, cleanupAroundOffsets({30}, Code, Style));
+}
+
 TEST_F(CleanupTest, TrailingCommaInParens) {
   std::string Code = "int main() { f(,1,,2,3,f(1,2,),4,,);}";
   std::string Expected = "int main() { f(1,2,3,f(1,2),4);}";




More information about the cfe-commits mailing list