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