发现了 IntelliJ 的一种新的妙用。众所周知,Rust 那种单 block 内允许覆盖的用法 Java 是不支持的,比如我 Java 写
var lit = xxx;
use(lit);
var lit = yyy;
use(lit);
Java 会认为第二个 lit 是重复定义。但是实际上,IntelliJ 会按照 Rust 的解读方式去理解它,会把第二行的 lit 解析到第一行的,第四行的 lit 解析到第三行的。这样的代码虽然会报错,但是 IntelliJ 的重构功能会建立在这个解析方式上进行。比如我们可以 inline 第一行的定义,它只会替换第二行的,不会影响后面。这也能顺便修复编译错误。