private void Braces()

in ReSharper.FSharp/src/FSharp/FSharp.Psi/src/CodeFormatter/FSharpCodeFormatterInfoProvider.cs [169:250]


    private void Braces()
    {
      var bracesRule = Describe<BracesRule>()
        .LPar(FSharpTokenType.LBRACE)
        .RPar(FSharpTokenType.RBRACE)
        .FormatBeforeParent(true)
        .DisableParentAlignment(false)
        .ProhibitBlankLinesNearBracesInBsdStyle(false)
        .AvoidZeroExternalIndent(true)
        .RestrictedReformatOption(key => key.RestrictedFormat)
        .AlwaysAlignContent(true)
        .OnlyBreakBeforeRBraceIfBreakAfterLBrace(true)
        .OnlyWrapBeforeRBraceIfLBraceIsIncludedInTask(true)
        .MaxBlankLinesInsideSetting(it => it.KeepMaxBlankLineAroundModuleMembers) // todo: use separate settings
        .FormatBeforeLBrace(false);

      bracesRule.Clone().Name("RecordReprWithModifierBraces")
        .Where(Parent().In(ElementType.RECORD_REPRESENTATION).Satisfies((node, _) => ((IRecordRepresentation)node.Node).AccessModifier == null))
        .FormatBeforeLBrace(false)
        .BraceSetting(it => it.TypeDeclarationBraces)
        .Priority(2)
        .Build();

      var nonReprBraceRule =
        bracesRule
          .Clone()
          .FormatBeforeLBrace(false, formatBeforeLBraceUnlessSingleLine: true)
          .BraceSetting(it => it.TypeDeclarationBraces)
          .Priority(2);

      nonReprBraceRule
        .Clone()
        .Name("RecordReprWithoutModifierBraces")
        .Where(Parent().In(ElementType.RECORD_REPRESENTATION).Satisfies((node, _) =>
          ((IRecordRepresentation)node.Node).AccessModifier != null)
        )
        .Build();

      nonReprBraceRule
        .Clone()
        .Name("RecordExprBraces")
        .Where(Parent().In(ElementType.RECORD_EXPR))
        .FormatBeforeLBrace(false)
        .Build();

      nonReprBraceRule
        .Clone()
        .Name("AnonRecordBraces")
        .Where(Parent().In(ElementType.ANON_RECORD_EXPR))
        .LPar(FSharpTokenType.LBRACE_BAR)
        .RPar(FSharpTokenType.BAR_RBRACE)
        .Build();

      nonReprBraceRule
        .Clone()
        .Name("ObjExprBraces")
        .Where(Parent().In(ElementType.OBJ_EXPR))
        .NeverAlignContent(true)
        .Build();

      nonReprBraceRule
        .Clone()
        .Name("ListBraces")
        .Where(Parent().In(ElementType.LIST_EXPR, ElementType.LIST_PAT))
        .LPar(FSharpTokenType.LBRACK)
        .RPar(FSharpTokenType.RBRACK)
        .AlwaysAddSpacesInsidePico(false)
        .SpacesInsideParsSetting(key => key.SpaceAroundDelimiter)
        .FormatBeforeLBrace(false)
        .Build();
      
      nonReprBraceRule
        .Clone()
        .Name("ArrayBraces")
        .Where(Parent().In(ElementType.ARRAY_EXPR, ElementType.ARRAY_PAT))
        .LPar(FSharpTokenType.LBRACK_BAR)
        .RPar(FSharpTokenType.BAR_RBRACK)
        .AlwaysAddSpacesInsidePico(false)
        .SpacesInsideParsSetting(key => key.SpaceAroundDelimiter)
        // .FormatBeforeLBrace(false)
        .Build();
    }