Cra*_*aig 5 f# unit-testing readability xunit compiler-warnings
我有一些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>
Run Code Online (Sandbox Code Playgroud)
我在let语句上收到编译器警告:"可能的错误缩进:此标记在位置%s处开始上下文.尝试进一步缩进此标记或使用标准格式约定."
我试过,#nowarn "lexfltTokenIsOffsideOfContextStartedEarlier"但只是生成了另一个编译器警告"无效的警告号".
在https://github.com/fsharp/fsharp/blob/057dbf77df7355321c3c18137c2d552bdfa1272b/src/fsharp/FSComp.txt中没有为此错误列出警告编号
有没有办法压制这个警告?
我为一种风格回答道歉,"你不需要它",但似乎是这种情况.此外,这个问题显然成为那些在F#编写单元测试的人的FAQ.还有一个案例是[<Literal>].
无论如何,在项目甚至文件级别禁用警告似乎是一个坏主意,除非你有充分的理由这样做.
据我所知,你希望这些陈述是单行的(例如,[<Fact>]没有占据整行).在VS2013中有两种方法可以实现:
将属性放在let:
let [<Fact>] ``Has Hash Code 2``() = target.GetHashCode().ShouldBe 2
Run Code Online (Sandbox Code Playgroud)声明后写一个双分号:
[<Fact>] let ``Has Hash Code 2``() = target.GetHashCode().ShouldBe 2;;
Run Code Online (Sandbox Code Playgroud)试试这个:
#nowarn "0058"
Run Code Online (Sandbox Code Playgroud)
要找出正确的警告号是什么,只需在命令行中构建东西(或在VS中然后转到View - > Output - > Build),它会告诉你.这是我看到的:
Program.fs(7,3): warning FS0058: Possible incorrect indentation: this token is offside of context started at position (5:25). Try indenting this token further or using standard formatting conventions.
Run Code Online (Sandbox Code Playgroud)