unit-testing - 禁止 F# 编译器警告 : Possible incorrect indentation: this token is offside of context

标签 unit-testing f# compiler-warnings readability xunit

我有一些 xunit 测试,为了便于阅读,我想按如下方式布局:

[<Fact>] let ``Has Hash Code 2``()          = target.GetHashCode().ShouldBe 2
[<Fact>] let ``ToString yields two``()      = target.ToString().ShouldBe "two"
[<Fact>] let ``Has underlysing type int``() = target.GetUnderlyingType().ShouldBe typeof<int>

我在 let 语句中收到编译器警告:“缩进可能不正确:此标记越位于位置 %s 处开始的上下文。尝试进一步缩进此标记或使用标准格式约定。”

我试过 #nowarn "lexfltTokenIsOffsideOfContextStartedEarlier"但这只是生成了另一个编译器警告“无效警告号”。

https://github.com/fsharp/fsharp/blob/057dbf77df7355321c3c18137c2d552bdfa1272b/src/fsharp/FSComp.txt 中没有针对此错误列出警告编号

有没有办法抑制这个警告?

最佳答案

我很抱歉以一种“你不需要它”的方式回答,但这似乎是事实。此外,这个问题显然成为那些用 F# 编写单元测试的人的常见问题解答。还有一个案例是 [<Literal>]的。

无论如何,在项目级别甚至文件级别禁用警告似乎是一个坏主意,除非您有充分的理由这样做。

据我了解,您希望语句是单行的(例如,[<Fact>] 没有占据整行)。在 VS2013 中有两种方法可以实现:

  • 将属性放在 let 内:
    let [<Fact>] ``Has Hash Code 2``()          = target.GetHashCode().ShouldBe 2
    
  • 在声明后写一个双分号:
    [<Fact>] let ``Has Hash Code 2``()          = target.GetHashCode().ShouldBe 2;;
    
  • 关于unit-testing - 禁止 F# 编译器警告 : Possible incorrect indentation: this token is offside of context,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30270237/

    相关文章:

    f# - 为委托(delegate)类型提供参数名称

    获取无符号字符指针长度的正确方法

    c - 警告 : assignment makes pointer from integer without a cast [enabled by default] at malloc

    c# - 使用构造函数参数 Ninject Get<T>

    c - 嵌套预处理器指令或其他技巧以有条件地重新定义 static 关键字

    python - 如何在 python 单元测试中模拟特定文件的存在?

    java - 一组测试用例中的一个 testNG 测试用例失败,无法确定问题是什么?

    arrays - Xamarin Studio 6.0 F#Array.tai​​l产生编译错误

    f# - 嵌套工作流中的产量问题

    c# - 为什么警告禁用 429 无法抑制无法访问的代码?