-
Notifications
You must be signed in to change notification settings - Fork 789
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
FS3118 and FS0010 when combined with task CE and function name is too long #15432
Comments
After playing with the sample a little ( https://sharplab.io/#v2:DYLgZgzgPgtg9gEwK7AKYAIDCwCGEIAyAlgEYBOOZAngIwCwAUI3AA6oB26AylRAC6oYAOgAqACzKocCIuwDmovAGsIjRmj7owAJgDMAFgCs6ABQBKdAF50fZegDejdM+eS+SMp3PoAvuhAAfOgiykA= ), I think the rule I am observing so far is: When using the style of declaration, the number of spaces used for indentation must be higher or equal than the length of the identifier. This is of course not good since it is not refactoring friendly, which is also why this style is not recommended in the F# style guide. |
I found some interesting details while experimenting with this sample. It seems that when task {
return ()
} :> Task let f1 () =
task {
return ()
} :> Task // still allowed But when it's not the first thing on the line (or indeed is placed as the binding body), then |
@auduchinok : The relation to the length of the function is indirect here - it affects where the context starts, since name length keeps moving the "{" character. |
Thank you for investigating. I'm not surprised that it seems to be fundamentally linked to my non-idiomatic formatting. FWIW, my main reason for reporting this was that it confused me enough that I thought it might be helpful to others, if there was a place one could go to when running into this issue. Even if Don Syme ultimately rules that my use of the language is invalid, I think the compiler errors are so cryptic that, if possible, better messages might be helpful. |
Any changes to this behavior should go through language suggestions. See https://github.com/fsharp/fslang-design/blob/main/FSharp-6.0/FS-1108-undentation-frenzy.md for examples. We might want to look into improving the error messages somehow. |
Yeah this was a small detail I brought up in fsharp/fslang-design#706 (comment) so this applies to more than just casting. |
Please accept my apologies if this is a known issue, or not reproducible.
Repro steps
Use Visual Studio to create a new .NET 6.0 F# class library. Modify the default
Library.fs
file by giving it this content:Expected behavior
The code compiles.
Actual behavior
Compilation fails with two error messages:
Known workarounds
There are (at least) two workarounds to this problem:
f234
, and the code compiles. The above code is a minimal repro of an issue I've run into more than once, and while I don't understand the exact relationship, the maximum function name length seems to be somehow related to the last expression in thetask
CE. (Here, it's justreturn ()
, but with a longer expression, the name can be longer, too.)This alternative formatting seems to resolve the problem, and I haven't seen any problems with it.
This syntax does, however, introduce an extra line of code, and what is worse, an extra level of indentation, which I'd like to avoid.
Related information
If you're wondering about why anyone would want to upcast
Task<'a>
toTask
this is only a minimal repro. My actual use case is asynchronous integration tests written with xUnit.net. The xUnit.net framework can executeTask
-valued operations, but notTask<'a>
-valued operations.I suspect that the repro syntax may strictly speaking not be valid F# syntax, but usually it works. In any case it's confusing that it compiles when the function name is short, but stops compiling when the name exceeds a threshold.
I've discovered this issue while working with F# in Visual Studio (details below), but it also reproduces with
dotnet build
from the command line. I don't know if it reproduces in Visual Studio Code.Edition Windows 11 Pro
Version 22H2
Installed on 27.01.2023
OS build 22621.1848
Experience Windows Feature Experience Pack 1000.22642.1000.0
.NET 6
Microsoft Visual Studio Community 2022
Version 17.6.3
VisualStudio.17.Release/17.6.3+33801.468
Microsoft .NET Framework
Version 4.8.09032
Installed Version: Community
Visual C++ 2022 00482-90000-00000-AA879
Microsoft Visual C++ 2022
ASP.NET and Web Tools 17.6.326.62524
ASP.NET and Web Tools
Azure App Service Tools v3.0.0 17.6.326.62524
Azure App Service Tools v3.0.0
Azure Functions and Web Jobs Tools 17.6.326.62524
Azure Functions and Web Jobs Tools
C# Tools 4.6.0-3.23259.8+c3cc1d0ceeab1a65da0217e403851a1e8a30086a
C# components used in the IDE. Depending on your project type and settings, a different version of the compiler may be used.
CodeMaintainability 2022 1.2
Extension for tracking code maintainability of your methods. Instead of often performing report driven code analysis tools, you can use this extension to view in real-time maintainability score.
Common Azure Tools 1.10
Provides common services for use by Azure Mobile Services and Microsoft Azure Tools.
Microsoft JVM Debugger 1.0
Provides support for connecting the Visual Studio debugger to JDWP compatible Java Virtual Machines
NuGet Package Manager 6.6.0
NuGet Package Manager in Visual Studio. For more information about NuGet, visit https://docs.nuget.org/
Razor (ASP.NET Core) 17.6.0.2327201+a6a61fdfa748eaa65aab53dab583276e26af4a3e
Provides languages services for ASP.NET Core Razor.
SQL Server Data Tools 17.6.13.0
Microsoft SQL Server Data Tools
Surrounder 1.0.12
Surrounds any selected texts with matching quotation or brace pairs
TypeScript Tools 17.0.20329.2001
TypeScript Tools for Microsoft Visual Studio
Visual Basic Tools 4.6.0-3.23259.8+c3cc1d0ceeab1a65da0217e403851a1e8a30086a
Visual Basic components used in the IDE. Depending on your project type and settings, a different version of the compiler may be used.
Visual F# Tools 17.6.0-beta.23174.5+0207bea1afae48d9351ac26fb51afc8260de0a97
Microsoft Visual F# Tools
Visual Studio IntelliCode 2.2
AI-assisted development for Visual Studio.
The text was updated successfully, but these errors were encountered: