diff --git a/src/gn/args.cc b/src/gn/args.cc
index 28c9304..72e96cf 100644
--- a/src/gn/args.cc
+++ b/src/gn/args.cc
@@ -169,10 +169,10 @@
   std::lock_guard<std::mutex> lock(lock_);
 
   for (const Settings* toolchain : GetSortedToolchainsLocked()) {
-     const auto& value_map = declared_arguments_per_toolchain_[toolchain];
-     auto it = value_map.find(name);
-     if (it != value_map.end())
-       return std::make_optional(it->second);
+    const auto& value_map = declared_arguments_per_toolchain_[toolchain];
+    auto it = value_map.find(name);
+    if (it != value_map.end())
+      return std::make_optional(it->second);
   }
 
   // No match
diff --git a/src/gn/json_project_writer.cc b/src/gn/json_project_writer.cc
index c69f480..9eb6e77 100644
--- a/src/gn/json_project_writer.cc
+++ b/src/gn/json_project_writer.cc
@@ -40,7 +40,8 @@
 
 namespace {
 
-void AddTargetDependencies(const Target* target, TargetSet* deps,
+void AddTargetDependencies(const Target* target,
+                           TargetSet* deps,
                            Target::DepsIterationType iteration_type) {
   for (const auto& pair : target->GetDeps(iteration_type)) {
     if (deps->add(pair.ptr)) {
@@ -53,13 +54,12 @@
 
 // Filters targets according to filter string; Will also recursively
 // add dependent targets.
-bool JSONProjectWriter::FilterTargets(
-    const BuildSettings* build_settings,
-    std::vector<const Target*>& all_targets,
-    std::vector<const Target*>* targets,
-    const std::string& dir_filter_string,
-    bool filter_with_data_deps,
-    Err* err) {
+bool JSONProjectWriter::FilterTargets(const BuildSettings* build_settings,
+                                      std::vector<const Target*>& all_targets,
+                                      std::vector<const Target*>* targets,
+                                      const std::string& dir_filter_string,
+                                      bool filter_with_data_deps,
+                                      Err* err) {
   if (dir_filter_string.empty()) {
     *targets = all_targets;
   } else {
@@ -110,7 +110,8 @@
 
   std::vector<const Target*> all_targets = builder.GetAllResolvedTargets();
   std::vector<const Target*> targets;
-  if (!JSONProjectWriter::FilterTargets(build_settings, all_targets, &targets, dir_filter_string,
+  if (!JSONProjectWriter::FilterTargets(build_settings, all_targets, &targets,
+                                        dir_filter_string,
                                         filter_with_data_deps, err)) {
     return false;
   }
diff --git a/src/gn/json_project_writer_unittest.cc b/src/gn/json_project_writer_unittest.cc
index be0d05d..4b58e2c 100644
--- a/src/gn/json_project_writer_unittest.cc
+++ b/src/gn/json_project_writer_unittest.cc
@@ -815,8 +815,8 @@
 
   // Only DEPS_LINKED (should include :a and :b, but not :c)
   ASSERT_TRUE(JSONProjectWriter::FilterTargets(
-      setup.build_settings(), all_targets, &filtered,
-      "//foo:a", /*filter_with_data_deps=*/false, &err));
+      setup.build_settings(), all_targets, &filtered, "//foo:a",
+      /*filter_with_data_deps=*/false, &err));
   std::set<Label> labels_linked;
   for (const Target* t : filtered)
     labels_linked.insert(t->label());
@@ -826,8 +826,8 @@
 
   // DEPS_ALL (should include :a, :b, :c)
   ASSERT_TRUE(JSONProjectWriter::FilterTargets(
-      setup.build_settings(), all_targets, &filtered,
-      "//foo:a", /*filter_with_data_deps=*/true, &err));
+      setup.build_settings(), all_targets, &filtered, "//foo:a",
+      /*filter_with_data_deps=*/true, &err));
   std::set<Label> labels_all;
   for (const Target* t : filtered)
     labels_all.insert(t->label());
diff --git a/src/gn/ninja_c_binary_target_writer.h b/src/gn/ninja_c_binary_target_writer.h
index b03a85e..fd277d7 100644
--- a/src/gn/ninja_c_binary_target_writer.h
+++ b/src/gn/ninja_c_binary_target_writer.h
@@ -108,8 +108,7 @@
   //
   // The validations are the non-linkable deps passed in as an argument, plus
   // the data file dependencies in the target.
-  void WriteValidations(
-      const UniqueVector<const Target*>& non_linkable_deps);
+  void WriteValidations(const UniqueVector<const Target*>& non_linkable_deps);
 
   // Checks for duplicates in the given list of output files. If any duplicates
   // are found, throws an error and return false.
diff --git a/src/gn/setup.cc b/src/gn/setup.cc
index 4f8d231..4f0fa51 100644
--- a/src/gn/setup.cc
+++ b/src/gn/setup.cc
@@ -1193,7 +1193,8 @@
     if (!async_non_linkable_deps->VerifyTypeIs(Value::BOOLEAN, err)) {
       return false;
     }
-    build_settings_.set_async_non_linkable_deps(async_non_linkable_deps->boolean_value());
+    build_settings_.set_async_non_linkable_deps(
+        async_non_linkable_deps->boolean_value());
   }
 
   return true;
diff --git a/src/gn/target.cc b/src/gn/target.cc
index bc8bae1..53ed8ad 100644
--- a/src/gn/target.cc
+++ b/src/gn/target.cc
@@ -138,16 +138,16 @@
   // Only check private deps if requested.
   if (check_private_deps) {
     for (const auto& pair : target->private_deps()) {
-      if (EnsureFileIsGeneratedByDependency(pair.ptr, file, false,
-                                            consider_object_files,
-                                            check_data_deps, seen_targets, cursor))
+      if (EnsureFileIsGeneratedByDependency(
+              pair.ptr, file, false, consider_object_files, check_data_deps,
+              seen_targets, cursor))
         return true;  // Found a path.
     }
     if (target->output_type() == Target::CREATE_BUNDLE) {
       for (const auto* dep : target->bundle_data().bundle_deps()) {
-        if (EnsureFileIsGeneratedByDependency(dep, file, false,
-                                              consider_object_files,
-                                              check_data_deps, seen_targets, cursor))
+        if (EnsureFileIsGeneratedByDependency(
+                dep, file, false, consider_object_files, check_data_deps,
+                seen_targets, cursor))
           return true;  // Found a path.
       }
     }
@@ -156,9 +156,9 @@
   if (check_data_deps) {
     check_data_deps = false;  // Consider only direct data_deps.
     for (const auto& pair : target->data_deps()) {
-      if (EnsureFileIsGeneratedByDependency(pair.ptr, file, false,
-                                            consider_object_files,
-                                            check_data_deps, seen_targets, cursor))
+      if (EnsureFileIsGeneratedByDependency(
+              pair.ptr, file, false, consider_object_files, check_data_deps,
+              seen_targets, cursor))
         return true;  // Found a path.
     }
   }
@@ -166,9 +166,9 @@
   // Check all public dependencies (don't do data ones since those are
   // runtime-only).
   for (const auto& pair : target->public_deps()) {
-    if (EnsureFileIsGeneratedByDependency(pair.ptr, file, false,
-                                          consider_object_files,
-                                          check_data_deps, seen_targets, cursor))
+    if (EnsureFileIsGeneratedByDependency(
+            pair.ptr, file, false, consider_object_files, check_data_deps,
+            seen_targets, cursor))
       return true;  // Found a path.
   }
 
diff --git a/src/gn/xcode_writer.cc b/src/gn/xcode_writer.cc
index 4f4911a..e834b87 100644
--- a/src/gn/xcode_writer.cc
+++ b/src/gn/xcode_writer.cc
@@ -86,10 +86,8 @@
   return WRITER_TARGET_OS_MACOS;
 }
 
-std::optional<TargetXcodePlatformType> GetTargetXcodePlatform(
-    const Args& args,
-    const ParseNode* node,
-    Err* err) {
+std::optional<TargetXcodePlatformType>
+GetTargetXcodePlatform(const Args& args, const ParseNode* node, Err* err) {
   std::optional<Value> target_xcode_platform_value =
       args.GetArgFromAllArguments(variables::kTargetXcodePlatform);
 
@@ -99,7 +97,7 @@
 
   if (target_xcode_platform_value->type() != Value::STRING) {
     *err = Err(node, "target_xcode_platform value should be a string",
-        target_xcode_platform_value->ToString(false));
+               target_xcode_platform_value->ToString(false));
     return std::nullopt;
   }
 
@@ -114,8 +112,8 @@
     return WRITER_TARGET_XCODE_PLATFORM_IPHONEOS;
   }
 
-  *err = Err(node, "Unknown target_xcode_platform value",
-      target_xcode_platform);
+  *err =
+      Err(node, "Unknown target_xcode_platform value", target_xcode_platform);
   return std::nullopt;
 }
 
@@ -442,19 +440,18 @@
   PBXAttributes attributes;
   switch (target_os) {
     case WRITER_TARGET_OS_IOS: {
-        const std::optional<TargetXcodePlatformType> target_xcode_platform =
+      const std::optional<TargetXcodePlatformType> target_xcode_platform =
           GetTargetXcodePlatform(build_settings->build_args(), node, err);
-        if (!target_xcode_platform)
-          return {};
-        if (*target_xcode_platform == WRITER_TARGET_XCODE_PLATFORM_TVOS) {
-          attributes["SDKROOT"] = "appletvos";
-          attributes["TARGETED_DEVICE_FAMILY"] = "3";
-        } else {
-          attributes["SDKROOT"] = "iphoneos";
-          attributes["TARGETED_DEVICE_FAMILY"] = "1,2";
-        }
+      if (!target_xcode_platform)
+        return {};
+      if (*target_xcode_platform == WRITER_TARGET_XCODE_PLATFORM_TVOS) {
+        attributes["SDKROOT"] = "appletvos";
+        attributes["TARGETED_DEVICE_FAMILY"] = "3";
+      } else {
+        attributes["SDKROOT"] = "iphoneos";
+        attributes["TARGETED_DEVICE_FAMILY"] = "1,2";
       }
-      break;
+    } break;
     case WRITER_TARGET_OS_MACOS:
       attributes["SDKROOT"] = "macosx";
       break;
diff --git a/src/util/test/test.h b/src/util/test/test.h
index b598fd9..d3fc056 100644
--- a/src/util/test/test.h
+++ b/src/util/test/test.h
@@ -84,19 +84,15 @@
 
 void RegisterTest(testing::Test* (*)(), const char*);
 
-#define TEST_F_(x, y, name)                   \
-  struct y : public x {                       \
-    static testing::Test* Create() {          \
-      return testing::g_current_test = new y; \
-    }                                         \
-    virtual void Run();                       \
-  };                                          \
-  struct Register##y {                        \
-    Register##y() {                           \
-      RegisterTest(y::Create, name);          \
-    }                                         \
-  };                                          \
-  Register##y g_register_##y;                 \
+#define TEST_F_(x, y, name)                                                    \
+  struct y : public x {                                                        \
+    static testing::Test* Create() { return testing::g_current_test = new y; } \
+    virtual void Run();                                                        \
+  };                                                                           \
+  struct Register##y {                                                         \
+    Register##y() { RegisterTest(y::Create, name); }                           \
+  };                                                                           \
+  Register##y g_register_##y;                                                  \
   void y::Run()
 
 #define TEST_F(x, y) TEST_F_(x, x##y, #x "." #y)
