Uh oh!
There was an error while loading. Please reload this page.
Parser: recover on unfinished abstract members - #20070
Conversation
103396b to
69339b8Compare69339b8 to
4aefde1Compare@T-Gro There seems to be an issue with posting the release notes comment, could you please take a look? |
This comment has been minimized.
This comment has been minimized.
NatElkins
commented
Jul 24, 2026
@auduchinok See #20081 |
T-Gro
left a comment
There was a problem hiding this comment.
🤖 AI review (@expert-reviewer): no significant issues found. Please verify independently.
Reviewed the parser error-recovery changes for unfinished abstract members:
mkAbstractMemberextraction (ParseHelpers.fs) faithfully preserves the original inline grammar action. Since all fourclassDefnMemberproductions share the sameopt_attributes opt_access abstractMemberFlags opt_access opt_inlineprefix, therhs parseState 1/2ranges andgrabXmlDocpositions remain consistent when called from every rule.CheckDeclarations.fsguard (id.idText <> "") correctly skips only the fully name-less recovery slot (therecoverproduction with nonameop). Named-but-typeless recovery still flows throughTcAndPublishValSpecwith aSynType.FromParseErrortype, preserving IDE tooling info. No valid member (including operator names vianameop) yields an emptyidText, so nothing legitimate is filtered.- No correctness, security, or performance concerns identified. Full Azure
fsharp-cipasses, includingCheckCodeFormatting(grammar compiles with no new conflicts), and SyntaxTree baselines cover the new recovery cases.
❗ Release notes requiredYou can open this PR in browser to add release notes: open in github.dev
|
🔍 Tooling Safety Check — Affects-Compiler-Output
|
auduchinok
commented
Aug 10, 2026
This is ready. |
Uh oh!
There was an error while loading. Please reload this page.
Post-merge baseline drift, two independent causes: - 7 SyntaxTree parse baselines (Member/Abstract - Method 01/02, Abstract - Property 06/07/08/09, SynType/SynTypeAppNestedMultilineClosingGreaterAligned): main's dotnet#20070 ("Parser: recover on unfinished abstract members") added/updated these AFTER this branch last regenerated, emitting the old SynComponentInfo.longId shape `[T]`. This branch's SynComponentInfo.longId->synType change now prints `Some (LongIdent (SynLongIdent ([T], [], [None])))`. Pure representation change, consistent with the ~300 baselines already updated by this PR. - neg88.bsl (typecheck negative test): the SRTP constraint-solver changes shift the surfaced unification failure from FS0001 at the argument to FS0043 at the call site (+ an FS0193 for the fully-applied map3). All three invalid SRTP calls still error, so the negative test still correctly rejects the code; only the error shape changed. Regenerated baseline verified byte-for-byte against the net472 CI actual. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 1389e318-3aed-41ba-8b6a-e2eaa465b0d6
Fixes parsing of various unfinished abstract members, like the following: