- 
                Notifications
    You must be signed in to change notification settings 
- Fork 834
Closed
Labels
Milestone
Description
Hello,
I found another minor discrepancy between implementation files and signature files.
Repro steps
Consider the following code:
Signature
namespace X
type MyRecord =
    { Level: int }
    member Score : unit -> intAST:
TypeDefnSig
                 (ComponentInfo
                    ([], [], [], [MyRecord],
                     PreXmlDoc ((2,13), FSharp.Compiler.XmlDoc+XmlDocCollector),
                     false, None, tmp.fsi (2,5--2,13) IsSynthetic=false),
                  Simple
                    (Record
                       (None,
                        [Field
                           ([], false, Some Level,
                            LongIdent (LongIdentWithDots ([int], [])), false,
                            PreXmlDoc ((3,11), FSharp.Compiler.XmlDoc+XmlDocCollector),
                            None, tmp.fsi (3,6--3,16) IsSynthetic=false)],
                        tmp.fsi (3,4--3,18) IsSynthetic=false),
                     tmp.fsi (3,4--3,18) IsSynthetic=false),
                  [Member
                     (ValSpfn
                        ([], Score, SynValTyparDecls ([], true, []),
                         Fun
                           (LongIdent (LongIdentWithDots ([unit], [])),
                            LongIdent (LongIdentWithDots ([int], [])),
                            tmp.fsi (4,19--4,30) IsSynthetic=false),
                         SynValInfo
                           ([[SynArgInfo ([], false, None)]],
                            SynArgInfo ([], false, None)), false, false,
                         PreXmlDoc ((4,10), FSharp.Compiler.XmlDoc+XmlDocCollector),
                         None, None, tmp.fsi (4,4--4,30) IsSynthetic=false),
                      { IsInstance = true
                        IsDispatchSlot = false
                        IsOverrideOrExplicitImpl = false
                        IsFinal = false
                        MemberKind = Member },
                      tmp.fsi (4,4--4,30) IsSynthetic=false)],
                  tmp.fsi (3,4--3,18) IsSynthetic=false)Notice how TypeDefnSig ends on position 3.18.
Implementation
namespace X
type MyRecord =
    { Level: int }
    member Score () = 7AST
TypeDefn
                 (ComponentInfo
                    ([], [], [], [MyRecord],
                     PreXmlDoc ((2,13), FSharp.Compiler.XmlDoc+XmlDocCollector),
                     false, None, tmp.fsx (2,5--2,13) IsSynthetic=false),
                  Simple
                    (Record
                       (None,
                        [Field
                           ([], false, Some Level,
                            LongIdent (LongIdentWithDots ([int], [])), false,
                            PreXmlDoc ((3,11), FSharp.Compiler.XmlDoc+XmlDocCollector),
                            None, tmp.fsx (3,6--3,16) IsSynthetic=false)],
                        tmp.fsx (3,4--3,18) IsSynthetic=false),
                     tmp.fsx (3,4--3,18) IsSynthetic=false),
                  [Member
                     (Binding
                        (None, NormalBinding, false, false, [],
                         PreXmlDoc ((4,11), FSharp.Compiler.XmlDoc+XmlDocCollector),
                         SynValData
                           (Some { IsInstance = true
                                   IsDispatchSlot = false
                                   IsOverrideOrExplicitImpl = false
                                   IsFinal = false
                                   MemberKind = Member },
                            SynValInfo
                              ([[SynArgInfo ([], false, None)]; []],
                               SynArgInfo ([], false, None)), None),
                         LongIdent
                           (LongIdentWithDots ([Score], []), None, None,
                            Pats
                              [Paren
                                 (Const
                                    (Unit,
                                     tmp.fsx (4,17--4,19) IsSynthetic=false),
                                  tmp.fsx (4,17--4,19) IsSynthetic=false)], None,
                            tmp.fsx (4,11--4,19) IsSynthetic=false), None,
                         Const (Int32 7, tmp.fsx (4,22--4,23) IsSynthetic=false),
                         tmp.fsx (4,11--4,19) IsSynthetic=false,
                         NoDebugPointAtInvisibleBinding),
                      tmp.fsx (4,4--4,23) IsSynthetic=false)],
                  tmp.fsx (2,5--4,23) IsSynthetic=false)TypeDefn ends on position 4,23, including the member.
Expected behavior
The range of both TypeDefnSig and TypeDefn include the members.
Actual behavior
Only TypeDefn contains the member.
Known workarounds
Construct a new range for TypeDefnSig that uses the end position of the last member.
Related information
Provide any related information (optional):
- FCS 39
I'm interested in submitting a PR, please confirm my assumption that members should be included in the range.
auduchinok and vzarytovskii