Forked from
card10 / firmware
1700 commits behind the upstream repository.
-
rahix authored
Signed-off-by:
Rahix <rahix@rahix.de>
rahix authoredSigned-off-by:
Rahix <rahix@rahix.de>
fix-multi-decl.py 1.33 KiB
#!/usr/bin/env python3
#
# I prefer to have the closing brace of a multi-line declaration or function call on its
# own line. This is unfortunately not yet supported by clang-format. This script is
# a hack to manually introduce my style.
#
# Tracking for this style in clang-format: https://reviews.llvm.org/D33029
#
# Example
# =======
# This is the style I want:
#
# printf(
# "Hello %s %d\n",
# "World",
# 123
# );
import re
import sys
EXPR = r""" # Indentation is saved to <ws>
^(?P<ws>[ \t]*)(?P<decl>.*\(\n # Opening line, ending with (\n
(?:.*,\n)* # Lines with arguments, all ending with ,\n
.*)\)(?P<final>[); \t]*)\n # Last line with closing brace & optional following characters
(?![ \t]*\).*) # Don't match an already expanded decl
"""
def main():
with open(sys.argv[1], "r") as f:
source = f.read()
fixed = re.sub(
EXPR,
r"\g<ws>\g<decl>\n\g<ws>)\g<final>\n",
source,
flags=re.MULTILINE | re.VERBOSE,
)
# Fix function definitions that can now be pulled into one line
fixed = re.sub(
r"^\)\n{$",
r") {",
fixed,
flags=re.MULTILINE,
)
with open(sys.argv[1], "w") as f:
f.write(fixed)
if __name__ == "__main__":
main()