diff --git a/src/dawn/native/Limits.cpp b/src/dawn/native/Limits.cpp
index 3b20a1b..3b006bd 100644
--- a/src/dawn/native/Limits.cpp
+++ b/src/dawn/native/Limits.cpp
@@ -151,14 +151,14 @@
 
     Limits ReifyDefaultLimits(const Limits& limits) {
         Limits out;
-#define X(Class, limitName, base, ...)                                           \
-    if (IsLimitUndefined(limits.limitName) ||                                     \
-        CheckLimit<LimitClass::Class>::IsBetter(                       \
-            static_cast<decltype(limits.limitName)>(base), limits.limitName)) {   \
-        /* If the limit is undefined or the default is better, use the default */ \
-        out.limitName = base;                                                     \
-    } else {                                                                      \
-        out.limitName = limits.limitName;                                         \
+#define X(Class, limitName, base, ...)                                                         \
+    if (IsLimitUndefined(limits.limitName) ||                                                  \
+        CheckLimit<LimitClass::Class>::IsBetter(static_cast<decltype(limits.limitName)>(base), \
+                                                limits.limitName)) {                           \
+        /* If the limit is undefined or the default is better, use the default */              \
+        out.limitName = base;                                                                  \
+    } else {                                                                                   \
+        out.limitName = limits.limitName;                                                      \
     }
         LIMITS(X)
 #undef X
@@ -166,11 +166,11 @@
     }
 
     MaybeError ValidateLimits(const Limits& supportedLimits, const Limits& requiredLimits) {
-#define X(Class, limitName, ...)                                                  \
-    if (!IsLimitUndefined(requiredLimits.limitName)) {                             \
-        DAWN_TRY_CONTEXT(CheckLimit<LimitClass::Class>::Validate(       \
-                             supportedLimits.limitName, requiredLimits.limitName), \
-                         "validating " #limitName);                                \
+#define X(Class, limitName, ...)                                                            \
+    if (!IsLimitUndefined(requiredLimits.limitName)) {                                      \
+        DAWN_TRY_CONTEXT(CheckLimit<LimitClass::Class>::Validate(supportedLimits.limitName, \
+                                                                 requiredLimits.limitName), \
+                         "validating " #limitName);                                         \
     }
         LIMITS(X)
 #undef X
@@ -192,17 +192,17 @@
         }                                                            \
     }
 
-#define X_CHECK_BETTER_AND_CLAMP(Class, limitName, ...)                                       \
-    {                                                                                          \
-        constexpr std::array<decltype(Limits::limitName), kTierCount> tiers{__VA_ARGS__};      \
-        decltype(Limits::limitName) tierValue = tiers[i - 1];                                  \
-        if (CheckLimit<LimitClass::Class>::IsBetter(tierValue, limits.limitName)) { \
-            /* The tier is better. Go to the next tier. */                                     \
-            continue;                                                                          \
-        } else if (tierValue != limits.limitName) {                                            \
-            /* Better than the tier. Degrade |limits| to the tier. */                          \
-            limits.limitName = tiers[i - 1];                                                   \
-        }                                                                                      \
+#define X_CHECK_BETTER_AND_CLAMP(Class, limitName, ...)                                   \
+    {                                                                                     \
+        constexpr std::array<decltype(Limits::limitName), kTierCount> tiers{__VA_ARGS__}; \
+        decltype(Limits::limitName) tierValue = tiers[i - 1];                             \
+        if (CheckLimit<LimitClass::Class>::IsBetter(tierValue, limits.limitName)) {       \
+            /* The tier is better. Go to the next tier. */                                \
+            continue;                                                                     \
+        } else if (tierValue != limits.limitName) {                                       \
+            /* Better than the tier. Degrade |limits| to the tier. */                     \
+            limits.limitName = tiers[i - 1];                                              \
+        }                                                                                 \
     }
 
         LIMITS_EACH_GROUP(X_EACH_GROUP)
diff --git a/src/dawn/node/interop/Core.h b/src/dawn/node/interop/Core.h
index 8408d15..034dfa5 100644
--- a/src/dawn/node/interop/Core.h
+++ b/src/dawn/node/interop/Core.h
@@ -119,7 +119,7 @@
         // stringified values append to the error message.
         // If Result is a success, then a success Result is returned.
         template <typename... VALUES>
-        Result Append(VALUES&&... values) {
+        Result Append(VALUES && ... values) {
             if (*this) {
                 return *this;
             }
diff --git a/src/dawn/tests/unittests/wire/WireErrorCallbackTests.cpp b/src/dawn/tests/unittests/wire/WireErrorCallbackTests.cpp
index a9c5522..0dfb60c 100644
--- a/src/dawn/tests/unittests/wire/WireErrorCallbackTests.cpp
+++ b/src/dawn/tests/unittests/wire/WireErrorCallbackTests.cpp
@@ -271,18 +271,18 @@
 
 // Empty stack (We are emulating the errors that would be callback-ed from native).
 TEST_F(WireErrorCallbackTests, PopErrorScopeEmptyStack) {
-        WGPUErrorCallback callback;
-        void* userdata;
-        EXPECT_CALL(api, OnDevicePopErrorScope(apiDevice, _, _))
-            .WillOnce(DoAll(SaveArg<1>(&callback), SaveArg<2>(&userdata), Return(true)));
-        wgpuDevicePopErrorScope(device, ToMockDevicePopErrorScopeCallback, this);
-        FlushClient();
+    WGPUErrorCallback callback;
+    void* userdata;
+    EXPECT_CALL(api, OnDevicePopErrorScope(apiDevice, _, _))
+        .WillOnce(DoAll(SaveArg<1>(&callback), SaveArg<2>(&userdata), Return(true)));
+    wgpuDevicePopErrorScope(device, ToMockDevicePopErrorScopeCallback, this);
+    FlushClient();
 
-        EXPECT_CALL(*mockDevicePopErrorScopeCallback,
-                    Call(WGPUErrorType_Validation, StrEq("No error scopes to pop"), this))
-            .Times(1);
-        callback(WGPUErrorType_Validation, "No error scopes to pop", userdata);
-        FlushServer();
+    EXPECT_CALL(*mockDevicePopErrorScopeCallback,
+                Call(WGPUErrorType_Validation, StrEq("No error scopes to pop"), this))
+        .Times(1);
+    callback(WGPUErrorType_Validation, "No error scopes to pop", userdata);
+    FlushServer();
 }
 
 // Test the return wire for device lost callback
diff --git a/src/tint/reader/spirv/parser_impl_module_var_test.cc b/src/tint/reader/spirv/parser_impl_module_var_test.cc
index d50959d..c8f6935 100644
--- a/src/tint/reader/spirv/parser_impl_module_var_test.cc
+++ b/src/tint/reader/spirv/parser_impl_module_var_test.cc
@@ -1272,7 +1272,6 @@
       << module_str;
 }
 
-
 TEST_F(SpvModuleScopeVarParserTest, BindingDecoration_Valid) {
   auto p = parser(test::Assemble(Preamble() + FragMain() + R"(
      OpDecorate %1 DescriptorSet 0 ; WGSL validation requires this already
diff --git a/tools/format b/tools/format
index d0c9c64..d6de133 100755
--- a/tools/format
+++ b/tools/format
@@ -13,7 +13,9 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-find src -name "*.h"  -exec clang-format -i {} \;
-find src -name "*.cc"  -exec clang-format -i {} \;
-find src/tint/cmd -name "*.h"  -exec clang-format -i {} \;
-find src/tint/cmd -name "*.cc"  -exec clang-format -i {} \;
+find src -name "*.h"  -exec clang_format.py -i {} \;
+find src -name "*.cc"  -exec clang_format.py -i {} \;
+find src -name "*.cpp"  -exec clang_format.py -i {} \;
+find src -name "*.m"  -exec clang_format.py -i {} \;
+find src -name "*.mm"  -exec clang_format.py -i {} \;
+find include -name "*.h"  -exec clang_format.py -i {} \;
