Clojure 1.10 的错误报告新阶段中,我们确定了两个不同的阶段 - :compile-syntax-check(由编译器发现的语法错误)和 :compilation(编译过程中发生的错误但不是语法错误)。
后者示例
user=> a/b
语法错误在 (REPL:0:0) 编译时。
没有名为 a 的命名空间
user=> (ex-data *e)
#:clojure.error{:phase :compile-syntax-check, :line 0, :column 0, :source "NO_SOURCE_PATH"}
这里语法没有问题,只是 a 不是一个已知的命名空间。
编译器在区分这两个方面时没有遵循任何模式。我们应该逐一使其一致,要么通过异常类型,要么明确地在 CompilerException 中指定阶段。