fsharp icon indicating copy to clipboard operation
fsharp copied to clipboard

Potential relaxation of indentation requirements for type extensions

Open roboz0r opened this issue 10 months ago • 3 comments

Is your feature request related to a problem? Please describe.

In writing a type extension without remembering the typical syntax I arrived at something like:

type Id = Id of int

type Id 
    with static member Of(x) =
        if x < 1 then
            failwithf "Id must be less than %d" 1
        else
            Id x

Which gives the error:

Unexpected syntax or possible incorrect indentation: this token is offside of context started at position (5:10). 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.

The error is clear enough and I was able to quickly fix the problem by indenting if beyond the s in static, however it seems like a situation where the indentation requirements could be loosened back to the with keyword.

Describe the solution you'd like

The above code could be made to compile without errors.

Describe alternatives you've considered

Another thing that could be done is moving the "Try indenting this further." part of the message to the start, as the proposed solution may not fit on the screen with inline errors (see attached screenshot)

I'm happy enough with the standard syntax:

type Id with
    static member Of(x) =
        if x < 1 then
            failwithf "Id must be less than %d" 1
        else
            Id x

Additional context

related: #11481

Add any other context or screenshots about the feature request here.

image

roboz0r avatar Apr 04 '24 23:04 roboz0r

I would assume this is "by design" with current rules, and this will need change in the lexer(?) spec. Maybe @auduchinok can chime in with more details.

vzarytovskii avatar Apr 05 '24 11:04 vzarytovskii

Some discussion happened in https://github.com/fsharp/fslang-suggestions/issues/1273

edgarfgp avatar Apr 06 '24 06:04 edgarfgp

I think we would require a specific language suggestion here for this feature, to define what exactly is allowed/disallowed

abonie avatar Apr 15 '24 17:04 abonie