From fc85c7088cbf74544d15fb970672c987b103048d Mon Sep 17 00:00:00 2001
From: Campbell Barton <ideasman42@gmail.com>
Date: Mon, 6 Feb 2023 12:45:17 +1100
Subject: [PATCH] code_clean: add 'use_nullptr' edit operation

Also correct doc-string for use_brief_types.
---
 utils_maintenance/code_clean.py | 38 ++++++++++++++++++++++++++++++++-
 1 file changed, 37 insertions(+), 1 deletion(-)

diff --git a/utils_maintenance/code_clean.py b/utils_maintenance/code_clean.py
index 8d08e74..2169c27 100755
--- a/utils_maintenance/code_clean.py
+++ b/utils_maintenance/code_clean.py
@@ -496,7 +496,7 @@ class edit_generators:
 
     class use_brief_types(EditGenerator):
         """
-        Use zero before the float suffix.
+        Use less verbose unsigned types.
 
         Replace:
           unsigned int
@@ -526,6 +526,42 @@ class edit_generators:
 
             return edits
 
+    class use_nullptr(EditGenerator):
+        """
+        Use ``nullptr`` instead of ``NULL`` for C++ code.
+
+        Replace:
+          NULL
+        With:
+          nullptr
+        """
+        @staticmethod
+        def edit_list_from_file(source: str, data: str, _shared_edit_data: Any) -> List[Edit]:
+            edits = []
+
+            # The user might exclude C++, if they forget, it is better not to operate on C.
+            if not source.lower().endswith((".h", ".c")):
+                return edits
+
+            # `NULL` -> `nullptr`.
+            for match in re.finditer(r"\bNULL\b", data):
+                edits.append(Edit(
+                    span=match.span(),
+                    content='nullptr',
+                    content_fail='__ALWAYS_FAIL__',
+                ))
+
+            # There may be some remaining uses of `unsigned` without any integer type afterwards.
+            # `unsigned` -> `uint`.
+            for match in re.finditer(r"\bunsigned\b", data):
+                edits.append(Edit(
+                    span=match.span(),
+                    content='uint',
+                    content_fail='__ALWAYS_FAIL__',
+                ))
+
+            return edits
+
     class unused_arg_as_comment(EditGenerator):
         """
         Replace `UNUSED(argument)` in C++ code.
-- 
GitLab