Changeset - r27723:5bbd812ee59a
[Not reviewed]
master
0 0 2
glx22 - 11 months ago 2023-07-12 19:15:04
glx@openttd.org
Add: workflow and script for checking ini_key issues in WindowDesc entries
2 files changed with 74 insertions and 0 deletions:
0 comments (0 inline, 0 general)
.github/windowdesc-ini-key.py
Show inline comments
 
new file 100644
 
"""
 
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()
.github/workflows/windowdesc-ini-key.yml
Show inline comments
 
new file 100644
 
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
0 comments (0 inline, 0 general)