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();
}