fsprojects / fantomas

FSharp source code formatter
https://fsprojects.github.io/fantomas
Other
758 stars 189 forks source link

HashDirective before closing `]` #3070

Closed nojaf closed 3 months ago

nojaf commented 3 months ago

Issue created from fantomas-online

Code

let private knownProviders = [
#if !FABLE_COMPILER
    (SerilogProvider.isAvailable, SerilogProvider.create)
    (MicrosoftExtensionsLoggingProvider.isAvailable, MicrosoftExtensionsLoggingProvider.create)
#endif
                                                                            ]

Error

Fantomas.Core.ParseException: ParseException
  [{ Severity = Error
     SubCategory = "parse"
     Range = Some (6,0--6,1)
     ErrorNumber = Some 58
     Message =
      "Unexpected syntax or possible incorrect indentation: this token is offside of context started at position (1:1). Try indenting this further.
To continue using non-conforming indentation, pass the '--strict-indentation-' flag to the compiler, or set the language version to F# 7." }]
   at Fantomas.Core.CodeFormatterImpl.parse@39-6.Invoke(Unit unitVar) in /_//src/Fantomas.Core/CodeFormatterImpl.fs:line 47
   at Microsoft.FSharp.Control.AsyncPrimitives.CallThenInvoke[T,TResult](AsyncActivation`1 ctxt, TResult result1, FSharpFunc`2 part2) in D:\a\_work\1\s\src\FSharp.Core\async.fs:line 508
   at Microsoft.FSharp.Control.Trampoline.Execute(FSharpFunc`2 firstAction) in D:\a\_work\1\s\src\FSharp.Core\async.fs:line 112

Problem description

Adding one extra space leads to valid code again:

let private knownProviders = [
#if !FABLE_COMPILER
    (SerilogProvider.isAvailable, SerilogProvider.create)
    (MicrosoftExtensionsLoggingProvider.isAvailable, MicrosoftExtensionsLoggingProvider.create)
#endif
 ]

I don't think this is worth the exception and we should not allow stroustrup in this case. Thoughts @josh-degraw?

Extra information

Options

Fantomas main branch at 2024-03-18T09:36:28Z - 74fb395e7aa953eda92ed1e06d940ffcefa1b5f0

    { config with
                MultilineBracketStyle = stroustrup }

Did you know that you can ignore files when formatting by using a .fantomasignore file? PS: It's unlikely that someone else will solve your specific issue, as it's something that you have a personal stake in.