Add: workflow and script for checking ini_key issues in WindowDesc entries

This commit is contained in:
glx22 2023-07-12 21:15:04 +02:00 committed by Loïc Guilloux
parent 7de37e07b6
commit 9cdf86a411
2 changed files with 74 additions and 0 deletions

50
.github/windowdesc-ini-key.py vendored Normal file
View File

@ -0,0 +1,50 @@
"""
Script to scan the OpenTTD source-tree for ini_key issues in WindowDesc entries.
"""
import glob
import os
import re
import sys
def scan_source_files(path, ini_keys=None):
if ini_keys is None:
ini_keys = set()
errors = []
for new_path in glob.glob(f"{path}/*.cpp"):
if os.path.isdir(new_path):
errors.append(scan_source_files(new_path, ini_keys))
continue
with open(new_path) as fp:
output = fp.read()
for (name, ini_key, widgets) in re.findall(r"^static WindowDesc ([a-zA-Z0-9_]*).*?, (?:\"(.*?)\")?.*?,(?:\s+(.*?),){6}", output, re.S|re.M):
if ini_key:
if ini_key in ini_keys:
errors.append(f"{new_path}: {name} ini_key is a duplicate")
ini_keys.add(ini_key)
widget = re.findall("static const (?:struct )?NWidgetPart " + widgets + ".*?(?:WWT_(DEFSIZE|STICKY)BOX.*?)?;", output, re.S)[0]
if widget and not ini_key:
errors.append(f"{new_path}: {name} has WWT_DEFSIZEBOX/WWT_STICKYBOX without ini_key")
if ini_key and not widget:
errors.append(f"{new_path}: {name} has ini_key without WWT_DEFSIZEBOX/WWT_STICKYBOX")
return errors
def main():
errors = scan_source_files("src")
if errors:
print("\n".join(errors))
sys.exit(1)
print("OK")
if __name__ == "__main__":
main()

View File

@ -0,0 +1,24 @@
name: WindowDesc ini_key
on:
pull_request:
branches:
- master
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/master' }}
jobs:
windowdesc-ini-key:
name: WindowDesc ini_key issues
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Check for ini_key issues in WindowDesc entries
shell: bash
run: |
python3 .github/windowdesc-ini-key.py