utils: checkstyle: Add formatter to sort #include statements
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
parent
3f97be923c
commit
5849dd0b17
1 changed files with 41 additions and 0 deletions
|
@ -481,6 +481,47 @@ class DoxygenFormatter(Formatter):
|
||||||
return '\n'.join(lines)
|
return '\n'.join(lines)
|
||||||
|
|
||||||
|
|
||||||
|
class IncludeOrderFormatter(Formatter):
|
||||||
|
patterns = ('*.cpp', '*.h')
|
||||||
|
|
||||||
|
include_regex = re.compile('^#include ["<]([^">]*)[">]')
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def format(cls, filename, data):
|
||||||
|
lines = []
|
||||||
|
includes = []
|
||||||
|
|
||||||
|
# Parse blocks of #include statements, and output them as a sorted list
|
||||||
|
# when we reach a non #include statement.
|
||||||
|
for line in data.split('\n'):
|
||||||
|
match = IncludeOrderFormatter.include_regex.match(line)
|
||||||
|
if match:
|
||||||
|
# If the current line is an #include statement, add it to the
|
||||||
|
# includes group and continue to the next line.
|
||||||
|
includes.append((line, match.group(1)))
|
||||||
|
continue
|
||||||
|
|
||||||
|
# The current line is not an #include statement, output the sorted
|
||||||
|
# stashed includes first, and then the current line.
|
||||||
|
if len(includes):
|
||||||
|
includes.sort(key=lambda i: i[1])
|
||||||
|
for include in includes:
|
||||||
|
lines.append(include[0])
|
||||||
|
includes = []
|
||||||
|
|
||||||
|
lines.append(line)
|
||||||
|
|
||||||
|
# In the unlikely case the file ends with an #include statement, make
|
||||||
|
# sure we output the stashed includes.
|
||||||
|
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):
|
class StripTrailingSpaceFormatter(Formatter):
|
||||||
patterns = ('*.c', '*.cpp', '*.h', '*.py', 'meson.build')
|
patterns = ('*.c', '*.cpp', '*.h', '*.py', 'meson.build')
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue