ci: Use python to extract JS snippets from style guide
The job that lints code snippets in the style guide only runs when either the documentation or the linting rules are changed. Because of that it went unnoticed that the awk tool it uses to extract the snippets is no longer available since the CI image was rebased to F42. Given that awk is awkward anyway, use the opportunity to rewrite the snippet extraction in python instead of adding awk back to the image. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3694>
This commit is contained in:
parent
567eb6e0d0
commit
a7410d82ac
@ -6,36 +6,36 @@ trap "rm -rf $OUTDIR" EXIT
|
||||
|
||||
# Turn ```javascript``` code snippets in the
|
||||
# style guide into .js files in $OUTDIR
|
||||
awk --assign dir=$OUTDIR -- '
|
||||
BEGIN {
|
||||
do_print = 0;
|
||||
cur = 0;
|
||||
}
|
||||
cat <<'EOF' | python3 - docs/js-coding-style.md $OUTDIR
|
||||
import sys
|
||||
import re
|
||||
|
||||
# end of code snippet
|
||||
/```$/ {
|
||||
do_print = 0;
|
||||
cur++;
|
||||
}
|
||||
def extract_js_snippets(input_file, output_dir):
|
||||
with open(input_file, 'r') as file:
|
||||
content = file.read()
|
||||
|
||||
do_print {
|
||||
# remove one level of indent
|
||||
sub(" ","")
|
||||
# Find all JavaScript code blocks using regex
|
||||
js_blocks = re.findall(r'```javascript\n(.*?)\n?```', content, flags=re.DOTALL)
|
||||
|
||||
# the following are class snippets, turn them
|
||||
# into functions to not confuse eslint
|
||||
sub("moveActor","function moveActor")
|
||||
sub("desaturateActor","function desaturateActor")
|
||||
for i, (match) in enumerate(js_blocks):
|
||||
js_code = match
|
||||
|
||||
# finally, append to the currently generated .js file
|
||||
print >> dir "/" cur ".js";
|
||||
}
|
||||
# Remove one level of indent
|
||||
js_code = re.sub(r'^ {4}', '', js_code, flags=re.MULTILINE)
|
||||
|
||||
# start of code snippet
|
||||
/```javascript$/ {
|
||||
do_print = 1;
|
||||
}
|
||||
' docs/js-coding-style.md
|
||||
# The following are class snippets, turn them
|
||||
# into functions to not confuse eslint
|
||||
js_code = re.sub(r'^moveActor', 'function moveActor', js_code)
|
||||
js_code = re.sub(r'^desaturateActor', 'function desaturateActor', js_code)
|
||||
|
||||
# Finally, create a .js file in the output directory
|
||||
output_filename = f'{output_dir}/{i}.js'
|
||||
with open(output_filename, 'w') as out_file:
|
||||
out_file.write(f'{js_code}\n')
|
||||
|
||||
input_file, output_dir = sys.argv[1:]
|
||||
extract_js_snippets(input_file, output_dir)
|
||||
EOF
|
||||
|
||||
eslint \
|
||||
--rule 'no-undef: off' \
|
||||
|
Loading…
x
Reference in New Issue
Block a user