fsprojects/fantomas

Fantomas reports an error when formatting interpolated string with tripple quotes

Closed this issue · 7 comments

Issue created from fantomas-online

Code

let user = "abc"

let json = $$"""
{
  "id": "ABC",
  "name": "{{user}}",
};
"""

Result

let user = "abc"

let json =
    $$"""
{
  "id": "ABC",
  "name": "{{user}",
};
"""

Problem description

We configured out build to fail on fantomas errors. And if fails on this code. Here's the output from Fantomas:

Formatted │ 0 │ Ignored │ 60 │ Unchanged │ 252 │ Errored │ 1

Failed to format file: ./src/Bootstrapper/PhobosBootstrapper.fs : Formatting ./src/Bootstrapper/PhobosBootstrapper.fs leads to invalid F# code

Extra information

  • The formatted result breaks my code.
  • The formatted result gives compiler warnings.
  • I or my company would be willing to help fix this.
  • I would like a release if this problem is solved.

Options

Fantomas main branch at 2024-02-15T12:00:55Z - 0700fd6

Default Fantomas configuration

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.

Thanks for reporting.
But I'll close this as a duplicate of #3012
It's a bug in the lexer of the compiler...

Hi Vagif! Thanks for the report, at some point I took a look at the lexer but didn't immediately find anything. This is a more challenging problem for sure.

@nojaf yes, apparently it is. I checked lexer issue, and looks like it was inspected by people much more knowledgeable than me in this area.

Hi @object, there should be a fix for this available in https://www.nuget.org/packages/fantomas/6.3.0-alpha-008

Cool, thanks a lot!

@nojaf Out of curiosity, what has been changed in the fix? I checked the commit files, and they only refer to package changes

https://github.com/fsprojects/fantomas/pull/3052/files

The problem was fixed over the compiler side in (dotnet/fsharp#16774, dotnet/fsharp#16785 and dotnet/fsharp#16796).

#3052 mostly updated our source dependency to include these fixes.