Просмотр исходного кода

Shift migrate script to a workflow class, and file renames to .carbon (#535)

This might need some customization, e.g. `woff2_decompress.impl.carbon` (as a file with a `main`) might be better as `woff2_decompress.carbon`, but I thought at least putting on `.carbon` extensions would help perspectives on files.

This restructures the script to make it easier to access standard info (e.g. cpp_files) without passing everywhere.
Jon Meow 4 лет назад
Родитель
Сommit
e619d3d632
32 измененных файлов с 88 добавлено и 61 удалено
  1. 87 60
      migrate_cpp/migrate_cpp.py
  2. 1 1
      third_party/examples/woff2/carbon/compile_flags.txt
  3. 0 0
      third_party/examples/woff2/carbon/include/woff2/decode.carbon
  4. 0 0
      third_party/examples/woff2/carbon/include/woff2/encode.carbon
  5. 0 0
      third_party/examples/woff2/carbon/include/woff2/output.carbon
  6. 0 0
      third_party/examples/woff2/carbon/src/buffer.carbon
  7. 0 0
      third_party/examples/woff2/carbon/src/convert_woff2ttf_fuzzer.impl.carbon
  8. 0 0
      third_party/examples/woff2/carbon/src/convert_woff2ttf_fuzzer_new_entry.impl.carbon
  9. 0 0
      third_party/examples/woff2/carbon/src/file.carbon
  10. 0 0
      third_party/examples/woff2/carbon/src/font.carbon
  11. 0 0
      third_party/examples/woff2/carbon/src/font.impl.carbon
  12. 0 0
      third_party/examples/woff2/carbon/src/glyph.carbon
  13. 0 0
      third_party/examples/woff2/carbon/src/glyph.impl.carbon
  14. 0 0
      third_party/examples/woff2/carbon/src/normalize.carbon
  15. 0 0
      third_party/examples/woff2/carbon/src/normalize.impl.carbon
  16. 0 0
      third_party/examples/woff2/carbon/src/port.carbon
  17. 0 0
      third_party/examples/woff2/carbon/src/round.carbon
  18. 0 0
      third_party/examples/woff2/carbon/src/store_bytes.carbon
  19. 0 0
      third_party/examples/woff2/carbon/src/table_tags.carbon
  20. 0 0
      third_party/examples/woff2/carbon/src/table_tags.impl.carbon
  21. 0 0
      third_party/examples/woff2/carbon/src/transform.carbon
  22. 0 0
      third_party/examples/woff2/carbon/src/transform.impl.carbon
  23. 0 0
      third_party/examples/woff2/carbon/src/variable_length.carbon
  24. 0 0
      third_party/examples/woff2/carbon/src/variable_length.impl.carbon
  25. 0 0
      third_party/examples/woff2/carbon/src/woff2_common.carbon
  26. 0 0
      third_party/examples/woff2/carbon/src/woff2_common.impl.carbon
  27. 0 0
      third_party/examples/woff2/carbon/src/woff2_compress.impl.carbon
  28. 0 0
      third_party/examples/woff2/carbon/src/woff2_dec.impl.carbon
  29. 0 0
      third_party/examples/woff2/carbon/src/woff2_decompress.impl.carbon
  30. 0 0
      third_party/examples/woff2/carbon/src/woff2_enc.impl.carbon
  31. 0 0
      third_party/examples/woff2/carbon/src/woff2_info.impl.carbon
  32. 0 0
      third_party/examples/woff2/carbon/src/woff2_out.impl.carbon

+ 87 - 60
migrate_cpp/migrate_cpp.py

@@ -14,68 +14,95 @@ import sys
 
 _CLANG_TIDY = "../external/bootstrap_clang_toolchain/bin/clang-tidy"
 _CPP_REFACTORING = "./cpp_refactoring/cpp_refactoring"
-_CPP_EXTS = {".h", ".c", ".cc", ".cpp", ".cxx"}
-
-
-def _data_file(relative_path):
-    """Returns the path to a data file."""
-    return os.path.join(os.path.dirname(sys.argv[0]), relative_path)
-
-
-def _parse_args(args=None):
-    """Parses command-line arguments and flags."""
-    parser = argparse.ArgumentParser(description=__doc__)
-    parser.add_argument(
-        "dir",
-        type=str,
-        help="A directory containing C++ files to migrate to Carbon.",
-    )
-    parsed_args = parser.parse_args(args=args)
-    return parsed_args
-
-
-def _gather_files(parsed_args):
-    """Returns the list of C++ files to convert."""
-    all_files = glob.glob(
-        os.path.join(parsed_args.dir, "**/*.*"), recursive=True
-    )
-    cpp_files = [f for f in all_files if os.path.splitext(f)[1] in _CPP_EXTS]
-    if not cpp_files:
-        sys.exit(
-            "%r doesn't contain any C++ files to convert." % parsed_args.dir
+_H_EXTS = {".h", ".hpp"}
+_CPP_EXTS = {".c", ".cc", ".cpp", ".cxx"}
+
+
+class _Workflow(object):
+    def __init__(self):
+        """Parses command-line arguments and flags."""
+        parser = argparse.ArgumentParser(description=__doc__)
+        parser.add_argument(
+            "dir",
+            type=str,
+            help="A directory containing C++ files to migrate to Carbon.",
+        )
+        parsed_args = parser.parse_args()
+        self._parsed_args = parsed_args
+
+        self._data_dir = os.path.dirname(sys.argv[0])
+
+        # Validate arguments.
+        if not os.path.isdir(parsed_args.dir):
+            sys.exit("%r must point to a directory." % parsed_args.dir)
+
+    def run(self):
+        """Runs the migration workflow."""
+        self._gather_files()
+        self._clang_tidy()
+        self._cpp_refactoring()
+        self._rename_files()
+        self._print_header("Done!")
+
+    def _data_file(self, relative_path):
+        """Returns the path to a data file."""
+        return os.path.join(self._data_dir, relative_path)
+
+    @staticmethod
+    def _print_header(header):
+        print("*" * 79)
+        print("* %-75s *" % header)
+        print("*" * 79)
+
+    def _gather_files(self):
+        """Returns the list of C++ files to convert."""
+        self._print_header("Gathering C++ files...")
+        all_files = glob.glob(
+            os.path.join(self._parsed_args.dir, "**/*.*"), recursive=True
+        )
+        exts = _CPP_EXTS.union(_H_EXTS)
+        cpp_files = [f for f in all_files if os.path.splitext(f)[1] in exts]
+        if not cpp_files:
+            sys.exit(
+                "%r doesn't contain any C++ files to convert."
+                % self._parsed_args.dir
+            )
+        self._cpp_files = sorted(cpp_files)
+        print("%d files found." % len(self._cpp_files))
+
+    def _clang_tidy(self):
+        """Runs clang-tidy to fix C++ files in a directory."""
+        self._print_header("Running clang-tidy...")
+        clang_tidy = self._data_file(_CLANG_TIDY)
+        with open(self._data_file("clang_tidy.yaml")) as f:
+            config = f.read()
+        subprocess.run(
+            [clang_tidy, "--fix", "--config", config] + self._cpp_files
         )
-    return sorted(cpp_files)
-
-
-def _clang_tidy(parsed_args, cpp_files):
-    """Runs clang-tidy to fix C++ files in a directory."""
-    print("Running clang-tidy...")
-    clang_tidy = _data_file(_CLANG_TIDY)
-    with open(_data_file("clang_tidy.yaml")) as f:
-        config = f.read()
-    subprocess.run([clang_tidy, "--fix", "--config", config] + cpp_files)
-
-
-def _cpp_refactoring(parsed_args, cpp_files):
-    """Runs cpp_refactoring to migrate C++ files towards Carbon syntax."""
-    print("Running cpp_refactoring...")
-    cpp_refactoring = _data_file(_CPP_REFACTORING)
-    subprocess.run([cpp_refactoring] + cpp_files)
-
-
-def _main():
-    """Main program execution."""
-    parsed_args = _parse_args()
-
-    # Validate arguments.
-    if not os.path.isdir(parsed_args.dir):
-        sys.exit("%r must point to a directory." % parsed_args.dir)
 
-    cpp_files = _gather_files(parsed_args)
-    _clang_tidy(parsed_args, cpp_files)
-    _cpp_refactoring(parsed_args, cpp_files)
-    print("Done!")
+    def _cpp_refactoring(self):
+        """Runs cpp_refactoring to migrate C++ files towards Carbon syntax."""
+        self._print_header("Running cpp_refactoring...")
+        cpp_refactoring = self._data_file(_CPP_REFACTORING)
+        subprocess.run([cpp_refactoring] + self._cpp_files)
+
+    def _rename_files(self):
+        """Renames C++ files to the destination Carbon filenames."""
+        api_renames = 0
+        impl_renames = 0
+        for f in self._cpp_files:
+            parts = os.path.splitext(f)
+            if parts[1] in _H_EXTS:
+                os.rename(f, parts[0] + ".carbon")
+                api_renames += 1
+            else:
+                os.rename(f, parts[0] + ".impl.carbon")
+                impl_renames += 1
+        print(
+            "Renaming resulted in %d API files and %d impl files."
+            % (api_renames, impl_renames)
+        )
 
 
 if __name__ == "__main__":
-    _main()
+    _Workflow().run()

+ 1 - 1
third_party/examples/woff2/carbon/compile_flags.txt

@@ -53,4 +53,4 @@
 -D__TIME__="redacted"
 -Wno-unused-variable
 -Wno-unused-const-variable
--Wno-sign-compare
+-Wno-sign-compare

+ 0 - 0
third_party/examples/woff2/carbon/include/woff2/decode.h → third_party/examples/woff2/carbon/include/woff2/decode.carbon


+ 0 - 0
third_party/examples/woff2/carbon/include/woff2/encode.h → third_party/examples/woff2/carbon/include/woff2/encode.carbon


+ 0 - 0
third_party/examples/woff2/carbon/include/woff2/output.h → third_party/examples/woff2/carbon/include/woff2/output.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/buffer.h → third_party/examples/woff2/carbon/src/buffer.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/convert_woff2ttf_fuzzer.cc → third_party/examples/woff2/carbon/src/convert_woff2ttf_fuzzer.impl.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/convert_woff2ttf_fuzzer_new_entry.cc → third_party/examples/woff2/carbon/src/convert_woff2ttf_fuzzer_new_entry.impl.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/file.h → third_party/examples/woff2/carbon/src/file.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/font.h → third_party/examples/woff2/carbon/src/font.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/font.cc → third_party/examples/woff2/carbon/src/font.impl.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/glyph.h → third_party/examples/woff2/carbon/src/glyph.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/glyph.cc → third_party/examples/woff2/carbon/src/glyph.impl.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/normalize.h → third_party/examples/woff2/carbon/src/normalize.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/normalize.cc → third_party/examples/woff2/carbon/src/normalize.impl.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/port.h → third_party/examples/woff2/carbon/src/port.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/round.h → third_party/examples/woff2/carbon/src/round.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/store_bytes.h → third_party/examples/woff2/carbon/src/store_bytes.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/table_tags.h → third_party/examples/woff2/carbon/src/table_tags.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/table_tags.cc → third_party/examples/woff2/carbon/src/table_tags.impl.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/transform.h → third_party/examples/woff2/carbon/src/transform.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/transform.cc → third_party/examples/woff2/carbon/src/transform.impl.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/variable_length.h → third_party/examples/woff2/carbon/src/variable_length.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/variable_length.cc → third_party/examples/woff2/carbon/src/variable_length.impl.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/woff2_common.h → third_party/examples/woff2/carbon/src/woff2_common.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/woff2_common.cc → third_party/examples/woff2/carbon/src/woff2_common.impl.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/woff2_compress.cc → third_party/examples/woff2/carbon/src/woff2_compress.impl.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/woff2_dec.cc → third_party/examples/woff2/carbon/src/woff2_dec.impl.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/woff2_decompress.cc → third_party/examples/woff2/carbon/src/woff2_decompress.impl.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/woff2_enc.cc → third_party/examples/woff2/carbon/src/woff2_enc.impl.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/woff2_info.cc → third_party/examples/woff2/carbon/src/woff2_info.impl.carbon


+ 0 - 0
third_party/examples/woff2/carbon/src/woff2_out.cc → third_party/examples/woff2/carbon/src/woff2_out.impl.carbon