CI 上 checkstyle 报 LineLength: Line is longer than 120 characters,本地编辑器里同一行看着只有八十多个字符,怎么数都超不了。乍看像缓存或者权限的锅,追下去往往不是。
# checkstyle.xml
<property name='tabWidth' value='8'/>
<module name='LineLength'/>
awk 'length($0)>120 {print FNR}' src/App.java
追下去是这么回事:文件用制表符缩进,checkstyle 按 tabWidth 等于 8 把每个制表符展开成八列再算长度,IDE 显示宽度按四列算,两边得到的列号自然对不上,报错位置也就飘了。
「checkstyle 行宽误报」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。
能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。报错里带路径的,先去看那个路径在不在、权限对不对。
同一份配置存在多处的,先确认改的是被加载的那一份。
具体做法是,把 checkstyle 的 tabWidth 改成团队约定的值;Java 文件统一转成空格缩进并落到格式化规则;对照 CI 日志里的列号而不是肉眼估算。
验收就看一点,同一行在 CI 日志里的列号和本地 awk 的结果一致,LineLength 不再误报。
