| 123456789101112131415161718192021222324252627282930313233 |
- #!/usr/bin/env python3
- import re
- from pathlib import Path
- root = Path('/Users/yanxuyao/Vap/QGVAPlayer/QGVAPlayer')
- parity = root / 'LNSwift/Bridges/LN_API_PARITY_TABLE.md'
- facade = root / 'LNSwift/Core/LNVAPFacade.swift'
- parity_text = parity.read_text(encoding='utf-8')
- facade_text = facade.read_text(encoding='utf-8')
- expected = set()
- for token in re.findall(r'`LNVAPFacade\.([^`]+)`', parity_text):
- # token may include " / `lnXxx:`" in same line; split conservatively.
- for part in token.split(' / '):
- part = part.strip()
- if not part:
- continue
- # keep selector-like text only
- if re.match(r'^[A-Za-z_][A-Za-z0-9_:]*$', part):
- expected.add(part)
- exposed = set(re.findall(r'@objc\(([^\)]+)\)', facade_text))
- missing = sorted(s for s in expected if s not in exposed)
- print(f'expected_from_table={len(expected)}')
- print(f'exposed_in_facade={len(exposed)}')
- if missing:
- print('MISSING_SELECTORS:')
- for s in missing:
- print(s)
- raise SystemExit(1)
- print('OK: parity table selectors all exposed in LNVAPFacade')
|