[libcamera-devel] [PATCH 1/2] utils: checkstyle: Add formatter to sort #include statements

Laurent Pinchart laurent.pinchart at ideasonboard.com
Sun Mar 22 13:02:24 CET 2020


Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
 utils/checkstyle.py | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/utils/checkstyle.py b/utils/checkstyle.py
index 0827a1e6ba0f..5fd63f047781 100755
--- a/utils/checkstyle.py
+++ b/utils/checkstyle.py
@@ -481,6 +481,39 @@ class DoxygenFormatter(Formatter):
         return '\n'.join(lines)
 
 
+class IncludeOrderFormatter(Formatter):
+    patterns = ('*.cpp', '*.h')
+
+    include_regex = re.compile('^#include ["<]([^">]*)[">]')
+
+    @classmethod
+    def format(cls, filename, data):
+        lines = []
+        includes = []
+
+        for line in data.split('\n'):
+            match = IncludeOrderFormatter.include_regex.match(line)
+            if match:
+                includes.append((line, match.group(1)))
+                continue
+
+            if len(includes):
+                includes.sort(key=lambda i: i[1])
+                for include in includes:
+                    lines.append(include[0])
+                includes = []
+
+            lines.append(line)
+
+        if len(includes):
+            includes.sort(key=lambda i: i[1])
+            for include in includes:
+                lines.append(include[0])
+            includes = []
+
+        return '\n'.join(lines)
+
+
 class StripTrailingSpaceFormatter(Formatter):
     patterns = ('*.c', '*.cpp', '*.h', '*.py', 'meson.build')
 
-- 
Regards,

Laurent Pinchart



More information about the libcamera-devel mailing list