Meta: Rewrite pre-commit script check-emoji in python

This reduces the scripts execution time from 0.57 seconds to 0.01
seconds, while also making the check a bit tighter, leaving fewer
possible problems.
This commit is contained in:
Ben Wiederhake 2022-09-18 19:20:25 +02:00 committed by Brian Gianforcaro
parent c4895b7d95
commit 88c8ad840d
Notes: sideshowbarker 2024-07-17 06:51:15 +09:00
3 changed files with 62 additions and 35 deletions

61
Meta/check-emoji.py Executable file
View file

@ -0,0 +1,61 @@
#!/usr/bin/env python3
import os
import re
import sys
RE_INVALID_CHAR = re.compile('[^A-FU0-9+_]')
RE_MISSING_UNDERSCORE = re.compile('[^_]U')
RE_MISSING_LETTER_U = re.compile('_(?!U)')
RE_MISSING_SIGN_PLUS = re.compile('U(?!\\+)')
def any_problems_here():
found_invalid_filenames = False
for filename in os.listdir():
if not filename.endswith('.png'):
print(f'Non-png file {filename} does not belong in the emoji directory')
found_invalid_filenames = True
break
filename = filename[:-len('.png')]
if RE_INVALID_CHAR.search(filename):
print(f'Filename {filename}.png contains invalid characters in its filename. Only uppercase letters'
' A-F and U, numbers, +, and _ should be used.')
found_invalid_filenames = True
break
if 'U+0' in filename:
print(f'Filename {filename}.png contains codepoint(s) with leading zeros. Leading zeros should be'
' removed from codepoint(s).')
found_invalid_filenames = True
break
if '+U' in filename:
print(f'Filename {filename}.png is incorrectly named. "_" should be used as a separator between'
' codepoints, not "+".')
found_invalid_filenames = True
break
if RE_MISSING_UNDERSCORE.search(filename):
print(f'Filename {filename}.png is missing an underscore "_" between codepoints.')
found_invalid_filenames = True
break
if RE_MISSING_LETTER_U.search(filename):
print(f'Filename {filename}.png is either missing a "U" to indicate the start of a codepoint,'
' or has a spurious underscore ("_").')
found_invalid_filenames = True
break
if RE_MISSING_SIGN_PLUS.search(filename):
print(f'Filename {filename}.png is either missing a "+" after a "U", or has a spurious "U".')
found_invalid_filenames = True
break
if 'U+FE0F' in filename:
print(f'Filename {filename}.png should not include any emoji presentation selectors. U+FE0F codepoints'
' should be removed from the filename.')
found_invalid_filenames = True
break
return found_invalid_filenames
if __name__ == '__main__':
os.chdir(os.path.dirname(__file__) + "/../Base/res/emoji/")
if any_problems_here():
sys.exit(1)

View file

@ -1,34 +0,0 @@
#!/usr/bin/env bash
set -eo pipefail
script_path=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
cd "${script_path}/.."
files=()
for file in Base/res/emoji/*.png; do
files+=("${file}")
done
found_invalid_filenames=0
for fn in "${files[@]}"; do
basename=$(basename "$fn" .png)
if [[ $basename =~ [^A-Z0-9+_] ]] ; then
echo "$fn contains invalid characters in its filename. Only uppercase letters, numbers, +, and _ should be used."
found_invalid_filenames=1
fi
if [[ $basename == *U+0* ]] ; then
echo "$fn contains codepoint(s) with leading zeros. Leading zeros should be removed from codepoint(s)."
found_invalid_filenames=1
fi
if [[ $basename == *+U* ]] ; then
echo "$fn is incorrectly named. _ should be used as a separator between codepoints, not +."
found_invalid_filenames=1
fi
if [[ $basename == *_U+FE0F* ]] ; then
echo "$fn should not include any emoji presentation selectors. U+FE0F codepoints should be removed from the filename."
found_invalid_filenames=1
fi
done
exit $found_invalid_filenames

View file

@ -22,7 +22,7 @@ set +e
for cmd in \
Meta/check-ak-test-files.sh \
Meta/check-debug-flags.sh \
Meta/check-emoji.sh \
Meta/check-emoji.py \
Meta/check-markdown.sh \
Meta/check-newlines-at-eof.py \
Meta/check-png-sizes.sh \