[tint] Move TextGenerator to own folder.

The text_generator requires things like diagnostics which aren't really
common.

Change-Id: I2b97b07d6dc6141838adeb8a84fa5e19447a7039
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/230794
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/lang/glsl/writer/printer/BUILD.bazel b/src/tint/lang/glsl/writer/printer/BUILD.bazel
index a97e90d..0b908b7 100644
--- a/src/tint/lang/glsl/writer/printer/BUILD.bazel
+++ b/src/tint/lang/glsl/writer/printer/BUILD.bazel
@@ -70,6 +70,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
+    "//src/tint/utils/text_generator",
     "//src/utils",
   ] + select({
     ":tint_build_glsl_writer": [
diff --git a/src/tint/lang/glsl/writer/printer/BUILD.cmake b/src/tint/lang/glsl/writer/printer/BUILD.cmake
index 3c8c058..01e19f5 100644
--- a/src/tint/lang/glsl/writer/printer/BUILD.cmake
+++ b/src/tint/lang/glsl/writer/printer/BUILD.cmake
@@ -71,6 +71,7 @@
   tint_utils_rtti
   tint_utils_symbol
   tint_utils_text
+  tint_utils_text_generator
 )
 
 tint_target_add_external_dependencies(tint_lang_glsl_writer_printer lib
diff --git a/src/tint/lang/glsl/writer/printer/BUILD.gn b/src/tint/lang/glsl/writer/printer/BUILD.gn
index 4e006f4..896e7e5 100644
--- a/src/tint/lang/glsl/writer/printer/BUILD.gn
+++ b/src/tint/lang/glsl/writer/printer/BUILD.gn
@@ -71,6 +71,7 @@
       "${tint_src_dir}/utils/rtti",
       "${tint_src_dir}/utils/symbol",
       "${tint_src_dir}/utils/text",
+      "${tint_src_dir}/utils/text_generator",
     ]
 
     if (tint_build_glsl_writer) {
diff --git a/src/tint/lang/glsl/writer/printer/printer.cc b/src/tint/lang/glsl/writer/printer/printer.cc
index f9020a7..16ca04f 100644
--- a/src/tint/lang/glsl/writer/printer/printer.cc
+++ b/src/tint/lang/glsl/writer/printer/printer.cc
@@ -90,7 +90,7 @@
 #include "src/tint/utils/macros/scoped_assignment.h"
 #include "src/tint/utils/rtti/switch.h"
 #include "src/tint/utils/text/string.h"
-#include "src/tint/utils/text_generator.h"
+#include "src/tint/utils/text_generator/text_generator.h"
 
 using namespace tint::core::fluent_types;  // NOLINT
 
diff --git a/src/tint/lang/hlsl/writer/BUILD.bazel b/src/tint/lang/hlsl/writer/BUILD.bazel
index 2a44e3b..a74b7ee 100644
--- a/src/tint/lang/hlsl/writer/BUILD.bazel
+++ b/src/tint/lang/hlsl/writer/BUILD.bazel
@@ -70,6 +70,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
+    "//src/tint/utils/text_generator",
     "//src/utils",
   ] + select({
     ":tint_build_hlsl_writer": [
diff --git a/src/tint/lang/hlsl/writer/BUILD.cmake b/src/tint/lang/hlsl/writer/BUILD.cmake
index 6d43dae..60e7b3b 100644
--- a/src/tint/lang/hlsl/writer/BUILD.cmake
+++ b/src/tint/lang/hlsl/writer/BUILD.cmake
@@ -78,6 +78,7 @@
   tint_utils_rtti
   tint_utils_symbol
   tint_utils_text
+  tint_utils_text_generator
 )
 
 tint_target_add_external_dependencies(tint_lang_hlsl_writer lib
diff --git a/src/tint/lang/hlsl/writer/BUILD.gn b/src/tint/lang/hlsl/writer/BUILD.gn
index 39ea0c8..6001d5e 100644
--- a/src/tint/lang/hlsl/writer/BUILD.gn
+++ b/src/tint/lang/hlsl/writer/BUILD.gn
@@ -75,6 +75,7 @@
       "${tint_src_dir}/utils/rtti",
       "${tint_src_dir}/utils/symbol",
       "${tint_src_dir}/utils/text",
+      "${tint_src_dir}/utils/text_generator",
     ]
 
     if (tint_build_hlsl_writer) {
diff --git a/src/tint/lang/hlsl/writer/ast_printer/BUILD.bazel b/src/tint/lang/hlsl/writer/ast_printer/BUILD.bazel
index 0542f73..d34c8fc 100644
--- a/src/tint/lang/hlsl/writer/ast_printer/BUILD.bazel
+++ b/src/tint/lang/hlsl/writer/ast_printer/BUILD.bazel
@@ -70,6 +70,7 @@
     "//src/tint/utils/strconv",
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
+    "//src/tint/utils/text_generator",
     "//src/utils",
   ] + select({
     ":tint_build_hlsl_writer": [
@@ -142,6 +143,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
+    "//src/tint/utils/text_generator",
     "@gtest",
     "//src/utils",
   ] + select({
diff --git a/src/tint/lang/hlsl/writer/ast_printer/BUILD.cmake b/src/tint/lang/hlsl/writer/ast_printer/BUILD.cmake
index ed89e97..b05ca15 100644
--- a/src/tint/lang/hlsl/writer/ast_printer/BUILD.cmake
+++ b/src/tint/lang/hlsl/writer/ast_printer/BUILD.cmake
@@ -71,6 +71,7 @@
   tint_utils_strconv
   tint_utils_symbol
   tint_utils_text
+  tint_utils_text_generator
 )
 
 tint_target_add_external_dependencies(tint_lang_hlsl_writer_ast_printer lib
@@ -150,6 +151,7 @@
   tint_utils_rtti
   tint_utils_symbol
   tint_utils_text
+  tint_utils_text_generator
 )
 
 tint_target_add_external_dependencies(tint_lang_hlsl_writer_ast_printer_test test
diff --git a/src/tint/lang/hlsl/writer/ast_printer/BUILD.gn b/src/tint/lang/hlsl/writer/ast_printer/BUILD.gn
index 69e590c..6ed90a1 100644
--- a/src/tint/lang/hlsl/writer/ast_printer/BUILD.gn
+++ b/src/tint/lang/hlsl/writer/ast_printer/BUILD.gn
@@ -75,6 +75,7 @@
       "${tint_src_dir}/utils/strconv",
       "${tint_src_dir}/utils/symbol",
       "${tint_src_dir}/utils/text",
+      "${tint_src_dir}/utils/text_generator",
     ]
 
     if (tint_build_hlsl_writer) {
@@ -146,6 +147,7 @@
         "${tint_src_dir}/utils/rtti",
         "${tint_src_dir}/utils/symbol",
         "${tint_src_dir}/utils/text",
+        "${tint_src_dir}/utils/text_generator",
       ]
 
       if (tint_build_hlsl_writer) {
diff --git a/src/tint/lang/hlsl/writer/ast_printer/ast_printer.h b/src/tint/lang/hlsl/writer/ast_printer/ast_printer.h
index fa92a5d..77aa614 100644
--- a/src/tint/lang/hlsl/writer/ast_printer/ast_printer.h
+++ b/src/tint/lang/hlsl/writer/ast_printer/ast_printer.h
@@ -41,7 +41,7 @@
 #include "src/tint/lang/wgsl/program/program_builder.h"
 #include "src/tint/utils/containers/scope_stack.h"
 #include "src/tint/utils/math/hash.h"
-#include "src/tint/utils/text_generator.h"
+#include "src/tint/utils/text_generator/text_generator.h"
 
 // Forward declarations
 namespace tint::sem {
diff --git a/src/tint/lang/hlsl/writer/printer/BUILD.bazel b/src/tint/lang/hlsl/writer/printer/BUILD.bazel
index 679f439..409afae 100644
--- a/src/tint/lang/hlsl/writer/printer/BUILD.bazel
+++ b/src/tint/lang/hlsl/writer/printer/BUILD.bazel
@@ -69,6 +69,7 @@
     "//src/tint/utils/strconv",
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
+    "//src/tint/utils/text_generator",
     "//src/utils",
   ],
   copts = COPTS,
diff --git a/src/tint/lang/hlsl/writer/printer/BUILD.cmake b/src/tint/lang/hlsl/writer/printer/BUILD.cmake
index 2030095..1a52729 100644
--- a/src/tint/lang/hlsl/writer/printer/BUILD.cmake
+++ b/src/tint/lang/hlsl/writer/printer/BUILD.cmake
@@ -68,6 +68,7 @@
   tint_utils_strconv
   tint_utils_symbol
   tint_utils_text
+  tint_utils_text_generator
 )
 
 tint_target_add_external_dependencies(tint_lang_hlsl_writer_printer lib
diff --git a/src/tint/lang/hlsl/writer/printer/BUILD.gn b/src/tint/lang/hlsl/writer/printer/BUILD.gn
index 4f5ccdb..021dc2b 100644
--- a/src/tint/lang/hlsl/writer/printer/BUILD.gn
+++ b/src/tint/lang/hlsl/writer/printer/BUILD.gn
@@ -70,5 +70,6 @@
     "${tint_src_dir}/utils/strconv",
     "${tint_src_dir}/utils/symbol",
     "${tint_src_dir}/utils/text",
+    "${tint_src_dir}/utils/text_generator",
   ]
 }
diff --git a/src/tint/lang/hlsl/writer/printer/printer.cc b/src/tint/lang/hlsl/writer/printer/printer.cc
index 91855eb..01c6fa0 100644
--- a/src/tint/lang/hlsl/writer/printer/printer.cc
+++ b/src/tint/lang/hlsl/writer/printer/printer.cc
@@ -117,7 +117,7 @@
 #include "src/tint/utils/strconv/float_to_string.h"
 #include "src/tint/utils/text/string.h"
 #include "src/tint/utils/text/string_stream.h"
-#include "src/tint/utils/text_generator.h"
+#include "src/tint/utils/text_generator/text_generator.h"
 
 using namespace tint::core::fluent_types;  // NOLINT
 
diff --git a/src/tint/lang/msl/writer/printer/BUILD.bazel b/src/tint/lang/msl/writer/printer/BUILD.bazel
index 0013a3f..82d23b5 100644
--- a/src/tint/lang/msl/writer/printer/BUILD.bazel
+++ b/src/tint/lang/msl/writer/printer/BUILD.bazel
@@ -66,6 +66,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
+    "//src/tint/utils/text_generator",
     "//src/utils",
   ] + select({
     ":tint_build_msl_writer": [
diff --git a/src/tint/lang/msl/writer/printer/BUILD.cmake b/src/tint/lang/msl/writer/printer/BUILD.cmake
index abbc249..b38a8a8 100644
--- a/src/tint/lang/msl/writer/printer/BUILD.cmake
+++ b/src/tint/lang/msl/writer/printer/BUILD.cmake
@@ -67,6 +67,7 @@
   tint_utils_rtti
   tint_utils_symbol
   tint_utils_text
+  tint_utils_text_generator
 )
 
 tint_target_add_external_dependencies(tint_lang_msl_writer_printer lib
diff --git a/src/tint/lang/msl/writer/printer/BUILD.gn b/src/tint/lang/msl/writer/printer/BUILD.gn
index 7ce6ec9..6b68a7d 100644
--- a/src/tint/lang/msl/writer/printer/BUILD.gn
+++ b/src/tint/lang/msl/writer/printer/BUILD.gn
@@ -67,6 +67,7 @@
       "${tint_src_dir}/utils/rtti",
       "${tint_src_dir}/utils/symbol",
       "${tint_src_dir}/utils/text",
+      "${tint_src_dir}/utils/text_generator",
     ]
 
     if (tint_build_msl_writer) {
diff --git a/src/tint/lang/msl/writer/printer/printer.cc b/src/tint/lang/msl/writer/printer/printer.cc
index 5114b99..6285604 100644
--- a/src/tint/lang/msl/writer/printer/printer.cc
+++ b/src/tint/lang/msl/writer/printer/printer.cc
@@ -104,7 +104,7 @@
 #include "src/tint/utils/macros/scoped_assignment.h"
 #include "src/tint/utils/rtti/switch.h"
 #include "src/tint/utils/text/string.h"
-#include "src/tint/utils/text_generator.h"
+#include "src/tint/utils/text_generator/text_generator.h"
 
 using namespace tint::core::fluent_types;  // NOLINT
 
diff --git a/src/tint/lang/spirv/reader/ast_parser/BUILD.bazel b/src/tint/lang/spirv/reader/ast_parser/BUILD.bazel
index e0d8ac4..c859bf2 100644
--- a/src/tint/lang/spirv/reader/ast_parser/BUILD.bazel
+++ b/src/tint/lang/spirv/reader/ast_parser/BUILD.bazel
@@ -166,6 +166,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
+    "//src/tint/utils/text_generator",
     "@gtest",
     "//src/utils",
   ] + select({
diff --git a/src/tint/lang/spirv/reader/ast_parser/BUILD.cmake b/src/tint/lang/spirv/reader/ast_parser/BUILD.cmake
index b3e76be..5c8f70f 100644
--- a/src/tint/lang/spirv/reader/ast_parser/BUILD.cmake
+++ b/src/tint/lang/spirv/reader/ast_parser/BUILD.cmake
@@ -175,6 +175,7 @@
   tint_utils_rtti
   tint_utils_symbol
   tint_utils_text
+  tint_utils_text_generator
 )
 
 tint_target_add_external_dependencies(tint_lang_spirv_reader_ast_parser_test test
diff --git a/src/tint/lang/spirv/reader/ast_parser/BUILD.gn b/src/tint/lang/spirv/reader/ast_parser/BUILD.gn
index d3f0c9e..35ec00f 100644
--- a/src/tint/lang/spirv/reader/ast_parser/BUILD.gn
+++ b/src/tint/lang/spirv/reader/ast_parser/BUILD.gn
@@ -176,6 +176,7 @@
         "${tint_src_dir}/utils/rtti",
         "${tint_src_dir}/utils/symbol",
         "${tint_src_dir}/utils/text",
+        "${tint_src_dir}/utils/text_generator",
       ]
 
       if (tint_build_spv_reader) {
diff --git a/src/tint/lang/wgsl/writer/BUILD.bazel b/src/tint/lang/wgsl/writer/BUILD.bazel
index 3dc8b1f..dcaf404 100644
--- a/src/tint/lang/wgsl/writer/BUILD.bazel
+++ b/src/tint/lang/wgsl/writer/BUILD.bazel
@@ -74,6 +74,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
+    "//src/tint/utils/text_generator",
     "//src/utils",
   ] + select({
     ":tint_build_wgsl_writer": [
diff --git a/src/tint/lang/wgsl/writer/BUILD.cmake b/src/tint/lang/wgsl/writer/BUILD.cmake
index 04ca7d0..511754d 100644
--- a/src/tint/lang/wgsl/writer/BUILD.cmake
+++ b/src/tint/lang/wgsl/writer/BUILD.cmake
@@ -80,6 +80,7 @@
   tint_utils_rtti
   tint_utils_symbol
   tint_utils_text
+  tint_utils_text_generator
 )
 
 tint_target_add_external_dependencies(tint_lang_wgsl_writer lib
diff --git a/src/tint/lang/wgsl/writer/BUILD.gn b/src/tint/lang/wgsl/writer/BUILD.gn
index c94298d..3e85769 100644
--- a/src/tint/lang/wgsl/writer/BUILD.gn
+++ b/src/tint/lang/wgsl/writer/BUILD.gn
@@ -79,6 +79,7 @@
       "${tint_src_dir}/utils/rtti",
       "${tint_src_dir}/utils/symbol",
       "${tint_src_dir}/utils/text",
+      "${tint_src_dir}/utils/text_generator",
     ]
 
     if (tint_build_wgsl_writer) {
diff --git a/src/tint/lang/wgsl/writer/ast_printer/BUILD.bazel b/src/tint/lang/wgsl/writer/ast_printer/BUILD.bazel
index 9124f90..3c476bd 100644
--- a/src/tint/lang/wgsl/writer/ast_printer/BUILD.bazel
+++ b/src/tint/lang/wgsl/writer/ast_printer/BUILD.bazel
@@ -65,6 +65,7 @@
     "//src/tint/utils/strconv",
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
+    "//src/tint/utils/text_generator",
     "//src/utils",
   ],
   copts = COPTS,
@@ -130,6 +131,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
+    "//src/tint/utils/text_generator",
     "@gtest",
     "//src/utils",
   ] + select({
diff --git a/src/tint/lang/wgsl/writer/ast_printer/BUILD.cmake b/src/tint/lang/wgsl/writer/ast_printer/BUILD.cmake
index 4604ef8..b22514d 100644
--- a/src/tint/lang/wgsl/writer/ast_printer/BUILD.cmake
+++ b/src/tint/lang/wgsl/writer/ast_printer/BUILD.cmake
@@ -66,6 +66,7 @@
   tint_utils_strconv
   tint_utils_symbol
   tint_utils_text
+  tint_utils_text_generator
 )
 
 tint_target_add_external_dependencies(tint_lang_wgsl_writer_ast_printer lib
@@ -137,6 +138,7 @@
   tint_utils_rtti
   tint_utils_symbol
   tint_utils_text
+  tint_utils_text_generator
 )
 
 tint_target_add_external_dependencies(tint_lang_wgsl_writer_ast_printer_test test
diff --git a/src/tint/lang/wgsl/writer/ast_printer/BUILD.gn b/src/tint/lang/wgsl/writer/ast_printer/BUILD.gn
index 24e25c6..94c92fc 100644
--- a/src/tint/lang/wgsl/writer/ast_printer/BUILD.gn
+++ b/src/tint/lang/wgsl/writer/ast_printer/BUILD.gn
@@ -70,6 +70,7 @@
       "${tint_src_dir}/utils/strconv",
       "${tint_src_dir}/utils/symbol",
       "${tint_src_dir}/utils/text",
+      "${tint_src_dir}/utils/text_generator",
     ]
   }
 }
@@ -135,6 +136,7 @@
         "${tint_src_dir}/utils/rtti",
         "${tint_src_dir}/utils/symbol",
         "${tint_src_dir}/utils/text",
+        "${tint_src_dir}/utils/text_generator",
       ]
 
       if (tint_build_wgsl_writer) {
diff --git a/src/tint/lang/wgsl/writer/ast_printer/ast_printer.h b/src/tint/lang/wgsl/writer/ast_printer/ast_printer.h
index 2ce3618..4001121 100644
--- a/src/tint/lang/wgsl/writer/ast_printer/ast_printer.h
+++ b/src/tint/lang/wgsl/writer/ast_printer/ast_printer.h
@@ -30,7 +30,7 @@
 
 #include "src/tint/lang/core/binary_op.h"
 #include "src/tint/utils/text/string_stream.h"
-#include "src/tint/utils/text_generator.h"
+#include "src/tint/utils/text_generator/text_generator.h"
 
 // Forward declarations
 namespace tint {
diff --git a/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.bazel b/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.bazel
index 1f95711..aaf4d9a 100644
--- a/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.bazel
+++ b/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.bazel
@@ -65,6 +65,7 @@
     "//src/tint/utils/strconv",
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
+    "//src/tint/utils/text_generator",
     "//src/utils",
   ],
   copts = COPTS,
diff --git a/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.cmake b/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.cmake
index 40a67f6..412b7f2 100644
--- a/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.cmake
+++ b/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.cmake
@@ -64,6 +64,7 @@
   tint_utils_strconv
   tint_utils_symbol
   tint_utils_text
+  tint_utils_text_generator
 )
 
 tint_target_add_external_dependencies(tint_lang_wgsl_writer_syntax_tree_printer lib
diff --git a/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.gn b/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.gn
index 8d72db5..733a3a2 100644
--- a/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.gn
+++ b/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.gn
@@ -66,5 +66,6 @@
     "${tint_src_dir}/utils/strconv",
     "${tint_src_dir}/utils/symbol",
     "${tint_src_dir}/utils/text",
+    "${tint_src_dir}/utils/text_generator",
   ]
 }
diff --git a/src/tint/lang/wgsl/writer/syntax_tree_printer/syntax_tree_printer.h b/src/tint/lang/wgsl/writer/syntax_tree_printer/syntax_tree_printer.h
index f163770..be0c98d 100644
--- a/src/tint/lang/wgsl/writer/syntax_tree_printer/syntax_tree_printer.h
+++ b/src/tint/lang/wgsl/writer/syntax_tree_printer/syntax_tree_printer.h
@@ -29,7 +29,7 @@
 #define SRC_TINT_LANG_WGSL_WRITER_SYNTAX_TREE_PRINTER_SYNTAX_TREE_PRINTER_H_
 
 #include "src/tint/lang/wgsl/program/program.h"
-#include "src/tint/utils/text_generator.h"
+#include "src/tint/utils/text_generator/text_generator.h"
 
 // Forward declarations
 namespace tint::core {
diff --git a/src/tint/utils/BUILD.bazel b/src/tint/utils/BUILD.bazel
index 532bf30..03c0b51 100644
--- a/src/tint/utils/BUILD.bazel
+++ b/src/tint/utils/BUILD.bazel
@@ -41,17 +41,14 @@
   srcs = [
     "generation_id.cc",
     "reflection.cc",
-    "text_generator.cc",
   ],
   hdrs = [
     "generation_id.h",
     "internal_limits.h",
     "reflection.h",
-    "text_generator.h",
   ],
   deps = [
     "//src/tint/utils/containers",
-    "//src/tint/utils/diagnostic",
     "//src/tint/utils/ice",
     "//src/tint/utils/macros",
     "//src/tint/utils/math",
diff --git a/src/tint/utils/BUILD.cmake b/src/tint/utils/BUILD.cmake
index 1dad574..e0a2799 100644
--- a/src/tint/utils/BUILD.cmake
+++ b/src/tint/utils/BUILD.cmake
@@ -50,6 +50,7 @@
 include(utils/symbol/BUILD.cmake)
 include(utils/system/BUILD.cmake)
 include(utils/text/BUILD.cmake)
+include(utils/text_generator/BUILD.cmake)
 
 ################################################################################
 # Target:    tint_utils
@@ -61,13 +62,10 @@
   utils/internal_limits.h
   utils/reflection.cc
   utils/reflection.h
-  utils/text_generator.cc
-  utils/text_generator.h
 )
 
 tint_target_add_dependencies(tint_utils lib
   tint_utils_containers
-  tint_utils_diagnostic
   tint_utils_ice
   tint_utils_macros
   tint_utils_math
diff --git a/src/tint/utils/BUILD.gn b/src/tint/utils/BUILD.gn
index cf53ab3..1c076a2 100644
--- a/src/tint/utils/BUILD.gn
+++ b/src/tint/utils/BUILD.gn
@@ -50,13 +50,10 @@
     "internal_limits.h",
     "reflection.cc",
     "reflection.h",
-    "text_generator.cc",
-    "text_generator.h",
   ]
   deps = [
     "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/utils/containers",
-    "${tint_src_dir}/utils/diagnostic",
     "${tint_src_dir}/utils/ice",
     "${tint_src_dir}/utils/macros",
     "${tint_src_dir}/utils/math",
diff --git a/src/tint/utils/text_generator/BUILD.bazel b/src/tint/utils/text_generator/BUILD.bazel
new file mode 100644
index 0000000..452843c
--- /dev/null
+++ b/src/tint/utils/text_generator/BUILD.bazel
@@ -0,0 +1,62 @@
+# Copyright 2025 The Dawn & Tint Authors
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+#    list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+#    contributors may be used to endorse or promote products derived from
+#    this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+################################################################################
+# File generated by 'tools/src/cmd/gen' using the template:
+#   tools/src/cmd/gen/build/BUILD.bazel.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+#                       Do not modify this file directly
+################################################################################
+
+load("//src/tint:flags.bzl", "COPTS")
+load("@bazel_skylib//lib:selects.bzl", "selects")
+cc_library(
+  name = "text_generator",
+  srcs = [
+    "text_generator.cc",
+  ],
+  hdrs = [
+    "text_generator.h",
+  ],
+  deps = [
+    "//src/tint/utils/containers",
+    "//src/tint/utils/diagnostic",
+    "//src/tint/utils/ice",
+    "//src/tint/utils/macros",
+    "//src/tint/utils/math",
+    "//src/tint/utils/memory",
+    "//src/tint/utils/result",
+    "//src/tint/utils/rtti",
+    "//src/tint/utils/text",
+    "//src/utils",
+  ],
+  copts = COPTS,
+  visibility = ["//visibility:public"],
+)
+
diff --git a/src/tint/utils/text_generator/BUILD.cmake b/src/tint/utils/text_generator/BUILD.cmake
new file mode 100644
index 0000000..80d22fe
--- /dev/null
+++ b/src/tint/utils/text_generator/BUILD.cmake
@@ -0,0 +1,60 @@
+# Copyright 2025 The Dawn & Tint Authors
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+#    list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+#    contributors may be used to endorse or promote products derived from
+#    this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+################################################################################
+# File generated by 'tools/src/cmd/gen' using the template:
+#   tools/src/cmd/gen/build/BUILD.cmake.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+#                       Do not modify this file directly
+################################################################################
+
+################################################################################
+# Target:    tint_utils_text_generator
+# Kind:      lib
+################################################################################
+tint_add_target(tint_utils_text_generator lib
+  utils/text_generator/text_generator.cc
+  utils/text_generator/text_generator.h
+)
+
+tint_target_add_dependencies(tint_utils_text_generator lib
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_text
+)
+
+tint_target_add_external_dependencies(tint_utils_text_generator lib
+  "src_utils"
+)
diff --git a/src/tint/utils/text_generator/BUILD.gn b/src/tint/utils/text_generator/BUILD.gn
new file mode 100644
index 0000000..1cccb4e
--- /dev/null
+++ b/src/tint/utils/text_generator/BUILD.gn
@@ -0,0 +1,59 @@
+# Copyright 2025 The Dawn & Tint Authors
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+#    list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+#    contributors may be used to endorse or promote products derived from
+#    this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+################################################################################
+# File generated by 'tools/src/cmd/gen' using the template:
+#   tools/src/cmd/gen/build/BUILD.gn.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+#                       Do not modify this file directly
+################################################################################
+
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
+import("../../../../scripts/tint_overrides_with_defaults.gni")
+
+import("${tint_src_dir}/tint.gni")
+
+libtint_source_set("text_generator") {
+  sources = [
+    "text_generator.cc",
+    "text_generator.h",
+  ]
+  deps = [
+    "${dawn_root}/src/utils:utils",
+    "${tint_src_dir}/utils/containers",
+    "${tint_src_dir}/utils/diagnostic",
+    "${tint_src_dir}/utils/ice",
+    "${tint_src_dir}/utils/macros",
+    "${tint_src_dir}/utils/math",
+    "${tint_src_dir}/utils/memory",
+    "${tint_src_dir}/utils/result",
+    "${tint_src_dir}/utils/rtti",
+    "${tint_src_dir}/utils/text",
+  ]
+}
diff --git a/src/tint/utils/text_generator.cc b/src/tint/utils/text_generator/text_generator.cc
similarity index 98%
rename from src/tint/utils/text_generator.cc
rename to src/tint/utils/text_generator/text_generator.cc
index b011ab3..151d88b 100644
--- a/src/tint/utils/text_generator.cc
+++ b/src/tint/utils/text_generator/text_generator.cc
@@ -25,7 +25,7 @@
 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-#include "src/tint/utils/text_generator.h"
+#include "src/tint/utils/text_generator/text_generator.h"
 
 #include <algorithm>
 
diff --git a/src/tint/utils/text_generator.h b/src/tint/utils/text_generator/text_generator.h
similarity index 97%
rename from src/tint/utils/text_generator.h
rename to src/tint/utils/text_generator/text_generator.h
index ce8f8b7..13979d0 100644
--- a/src/tint/utils/text_generator.h
+++ b/src/tint/utils/text_generator/text_generator.h
@@ -25,8 +25,8 @@
 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-#ifndef SRC_TINT_UTILS_TEXT_GENERATOR_H_
-#define SRC_TINT_UTILS_TEXT_GENERATOR_H_
+#ifndef SRC_TINT_UTILS_TEXT_GENERATOR_TEXT_GENERATOR_H_
+#define SRC_TINT_UTILS_TEXT_GENERATOR_TEXT_GENERATOR_H_
 
 #include <string>
 #include <utility>
@@ -199,4 +199,4 @@
 
 }  // namespace tint
 
-#endif  // SRC_TINT_UTILS_TEXT_GENERATOR_H_
+#endif  // SRC_TINT_UTILS_TEXT_GENERATOR_TEXT_GENERATOR_H_