migrate_camel_params.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. # -*- coding: utf-8 -*-
  2. """驼峰迁移补充:Params/本地工具方法的 key 字符串参数转驼峰。
  3. 覆盖形如 Params.intOrNull(data, "category_id")、firstInt(params, "user_id", "userId") 的调用。
  4. 第一参数限定 params/form/data/body/all/values/query/request 等变量名,避免误伤。
  5. """
  6. import re
  7. from pathlib import Path
  8. from _root import ROOT
  9. SRC = ROOT / "yoshop-java" / "src" / "main" / "java"
  10. SNAKE = re.compile(r'^[a-z]+(_[a-z0-9]+)+$')
  11. CALL = re.compile(
  12. r'((?:\w+\.)?\w+\((?:params|form|data|body|all|values|query|request|order|\w*Map),\s*")([a-z0-9_]+)(")')
  13. def to_camel(s):
  14. return re.sub(r'_([a-z0-9])', lambda m: m.group(1).upper(), s)
  15. changed = []
  16. n = 0
  17. for f in sorted(SRC.rglob("*.java")):
  18. text = f.read_text(encoding="utf-8")
  19. orig = text
  20. def repl(m):
  21. global n
  22. key = m.group(2)
  23. if not SNAKE.match(key):
  24. return m.group(0)
  25. n += 1
  26. return m.group(1) + to_camel(key) + m.group(3)
  27. text = CALL.sub(repl, text)
  28. if text != orig:
  29. f.write_text(text, encoding="utf-8")
  30. changed.append(str(f.relative_to(SRC)))
  31. print("改动 %d 个文件、%d 处" % (len(changed), n))
  32. for c in changed:
  33. print(" ", c)