Idea 2025 开发 XiangShan 踩坑实录

大致情况是,用 IntelliJ IDEA 开发 XiangShan,手欠升级了 2025.1.3,然后发现代码高亮和自动补全都炸了,头铁研究了一下,可能是如下的原因:

  1. 2025会根据项目构建文件自动选择构建系统
    1. 存在 build.sbt:使用 sbt
    2. 存在 build.mill:使用 bsp 支持mill
  2. 然而 XiangShan 的 sbt 配置在 4 年前创建以后就再也没有维护过
  3. 并且使用的是旧版的 build.sc,因此无法识别上面的 1.2.
  4. mill -i mill.idea.GenIdea/idea 生成的 xml 文件似乎无法正常识别
  5. 综上,2025 会非常执着地导入一个未维护的 sbt 构建脚本,然后失败,然后代码高亮💥

Boom

workaround:手动使用 bsp

https://www.jetbrains.com/help/idea/bsp-support.html

比较坑的是,idea 打开一个全新的项目(没有 .idea 文件夹)时会自动创建一些元数据,导致它又回到了试图导入 sbt 构建脚本的状态,所以必须在 idea 没有污染掉项目文件夹的情况下导入项目:

  1. 进入XiangShan,rm -rf .idea && make bsp
  2. 若是本地项目,选择打开,选择 XiangShan 文件夹,顺利的话它会检测到已经存在的 bsp 配置和 .sbt 脚本,进而询问用户使用哪一个,选择 BSP,确认即可
    Prompt bsp or sbt
  3. 若是远程项目,它不会询问 2.1.,然后又回去试图导入 sbt,大寄特寄,有两种解决思路:
    1. 在本地导入好后,将 .bsp 和 .idea 文件夹拷到服务器上,直接打开即可
    2. 先在远程打开一个临时文件夹(不要用 XiangShan),进入编辑器后左上角新建 -> 现有源中的项目,选择 XiangShan 文件夹,选择 BSP
      Prompt selection

下一个坑是 make bsp 不会将 build/ 标记为已排除的目录,导致每次编译都会重新跑巨量的索引,占满 CPU,服务器使用 nfs 情况更严峻,搞不好直接远程连接就断了

解决:手动右键 build/,将目录标记为->已排除