F# 如何同时报告语法和语义错误?

How can F# report syntax and semantic errors at same time?

这是一个 F# 代码,有语法和语义错误:

let a b = b b
let x = (if)

编辑:Vim 的 F# 报告无限类型错误和语法错误,但 fscfsi 仅在语法错误处停止。

F# for Vim 如何同时报告语法和语义错误,而 F# 编译器只报告语法错误?

F# 编译器(由 Vim 插件使用)有一个错误恢复机制 - 这意味着当它找到一个它无法解析的表达式时,它会尝试用一些东西填充它将使它成为有效的 F# 表达式。

当你写 let a = (if) 时,我猜编译器会在内部将其扩展为
let a = (if _ then _ else _) 其中 _ 是一个特殊的 "invalid expression" 占位符。

这使得对无效的 F# 代码进行类型检查成为可能,这在 IDE 编写代码(通常无效)时非常有用,因为类型信息用于自动完成等

当 运行 编译器直接报告自动 "fixed" 代码中的类型检查错误是可能的,但可能不是那么有用 - 填充漏洞时,编译器可能并不总是做你期望的,所以这可能会给出奇怪的错误信息。