F#: обернуть кортежи в несколько строк

Допустим, у меня есть простой Tree:

type Tree =
    | BinaryNode of Tree * int * Tree
    | Tip 

    member this.Sum =
        match this with
        | Tip -> 0
        | BinaryNode(left, value, right) -> left.Sum + value + right.Sum

и я определяю дерево по:

let tree = BinaryNode( BinaryNode( Tip, 2, Tip ), 1, BinaryNode( Tip, 3, Tip ))

Но я думаю, что это действительно трудно читать, если у нас есть дерево с несколькими узлами. Поэтому я заключаю его в несколько строк, как показано ниже:

[<EntryPoint>]
let main argv =

    let tree = 
        BinaryNode( 
            BinaryNode( Tip, 2, Tip ), 
            1, 
            BinaryNode( Tip, 3, Tip )
        )

    printf "%A" (tree.Sum)

    0

Приведенный выше код работает как положено в Visual Studio, Но когда я использую Visual Studio Code с Ionide, это напоминает мне, что:

Lint: запятая в экземпляре кортежа должна сопровождаться одним пробелом.

Мой вопрос:

  1. Я не совсем понимаю. Это плохо, чтобы обернуть кортежи в несколько строк?
  2. Если нет, как заставить молчать?
  3. Если ответ Да, как улучшить читаемость, когда у нас есть десять узлов?

1 ответ

Решение

Не думаю, что это обязательно плохо. Ну, я надеюсь, что нет, так как я делаю это все время. Особенно в таких случаях, когда эта строка была бы слишком широкой, чтобы ее можно было читать.

Насколько я могу судить, Ionide использует FSharpLint. Согласно документам, отдельные предупреждения можно отключить на уровне проекта, поместив файл XML с именем Settings.FSharpLint в папке проекта, с желаемой конфигурацией.

Я думаю, в вашем случае файл должен иметь следующий контент:

<?xml version="1.0" encoding="utf-8"?>
<FSharpLintSettings>
  <Analysers>
    <TupleCommaSpacing>
      <Enabled>false</Enabled>
    </TupleCommaSpacing>
  </Analysers>
</FSharpLintSettings>
Другие вопросы по тегам