@@ -1138,8 +1138,9 @@ type MyRecord =
11381138
11391139 match parseResults with
11401140 | ParsedInput.SigFile ( ParsedSigFileInput ( modules = [
1141- SynModuleOrNamespaceSig( decls = [ SynModuleSigDecl.Types( types = [ SynTypeDefnSig.SynTypeDefnSig( range = r)])]) ])) ->
1142- assertRange ( 2 , 0 ) ( 4 , 30 ) r
1141+ SynModuleOrNamespaceSig( decls = [ SynModuleSigDecl.Types([ SynTypeDefnSig.SynTypeDefnSig( range= mSynTypeDefnSig)], mTypes)]) ])) ->
1142+ assertRange ( 2 , 0 ) ( 4 , 30 ) mTypes
1143+ assertRange ( 2 , 5 ) ( 4 , 30 ) mSynTypeDefnSig
11431144 | _ -> Assert.Fail " Could not get valid AST"
11441145
11451146 [<Test>]
@@ -1154,8 +1155,9 @@ type MyRecord =
11541155
11551156 match parseResults with
11561157 | ParsedInput.SigFile ( ParsedSigFileInput ( modules = [
1157- SynModuleOrNamespaceSig( decls = [ SynModuleSigDecl.Types( types = [ SynTypeDefnSig.SynTypeDefnSig( range = r)])]) ])) ->
1158- assertRange ( 2 , 0 ) ( 5 , 30 ) r
1158+ SynModuleOrNamespaceSig( decls = [ SynModuleSigDecl.Types([ SynTypeDefnSig.SynTypeDefnSig( range= mSynTypeDefnSig)], mTypes)]) ])) ->
1159+ assertRange ( 2 , 0 ) ( 5 , 30 ) mTypes
1160+ assertRange ( 2 , 5 ) ( 5 , 30 ) mSynTypeDefnSig
11591161 | _ -> Assert.Fail " Could not get valid AST"
11601162
11611163 [<Test>]
@@ -1168,8 +1170,9 @@ type MyFunction =
11681170
11691171 match parseResults with
11701172 | ParsedInput.SigFile ( ParsedSigFileInput ( modules = [
1171- SynModuleOrNamespaceSig( decls = [ SynModuleSigDecl.Types( types = [ SynTypeDefnSig.SynTypeDefnSig( range = r)])]) ])) ->
1172- assertRange ( 2 , 0 ) ( 3 , 29 ) r
1173+ SynModuleOrNamespaceSig( decls = [ SynModuleSigDecl.Types([ SynTypeDefnSig.SynTypeDefnSig( range= mSynTypeDefnSig)], mTypes) ]) ])) ->
1174+ assertRange ( 2 , 0 ) ( 3 , 29 ) mTypes
1175+ assertRange ( 2 , 5 ) ( 3 , 29 ) mSynTypeDefnSig
11731176 | _ -> Assert.Fail " Could not get valid AST"
11741177
11751178 [<Test>]
@@ -1183,8 +1186,9 @@ type SomeCollection with
11831186
11841187 match parseResults with
11851188 | ParsedInput.SigFile ( ParsedSigFileInput ( modules = [
1186- SynModuleOrNamespaceSig( decls = [ SynModuleSigDecl.Types( types = [ SynTypeDefnSig.SynTypeDefnSig( range = r)])]) ])) ->
1187- assertRange ( 2 , 0 ) ( 4 , 37 ) r
1189+ SynModuleOrNamespaceSig( decls = [ SynModuleSigDecl.Types([ SynTypeDefnSig.SynTypeDefnSig( range= mSynTypeDefnSig)], mTypes)]) ])) ->
1190+ assertRange ( 2 , 0 ) ( 4 , 37 ) mTypes
1191+ assertRange ( 2 , 5 ) ( 4 , 37 ) mSynTypeDefnSig
11881192 | _ -> Assert.Fail " Could not get valid AST"
11891193
11901194 [<Test>]
@@ -1227,13 +1231,13 @@ and [<CustomEquality>] Bang =
12271231
12281232 match parseResults with
12291233 | ParsedInput.SigFile ( ParsedSigFileInput ( modules = [
1230- SynModuleOrNamespaceSig( decls = [ SynModuleSigDecl.Types( types = [
1234+ SynModuleOrNamespaceSig( decls = [ SynModuleSigDecl.Types([
12311235 SynTypeDefnSig.SynTypeDefnSig( range = r1)
12321236 SynTypeDefnSig.SynTypeDefnSig( range = r2)
1233- ]) as t ]) ])) ->
1234- assertRange ( 4 , 0 ) ( 5 , 9 ) r1
1237+ ], mTypes ) ]) ])) ->
1238+ assertRange ( 4 , 5 ) ( 5 , 9 ) r1
12351239 assertRange ( 7 , 4 ) ( 12 , 42 ) r2
1236- assertRange ( 4 , 0 ) ( 12 , 42 ) t.Range
1240+ assertRange ( 4 , 0 ) ( 12 , 42 ) mTypes
12371241 | _ -> Assert.Fail " Could not get valid AST"
12381242
12391243 [<Test>]
@@ -1717,6 +1721,98 @@ module X =
17171721 assertRange ( 4 , 9 ) ( 4 , 10 ) equalsM
17181722 | _ -> Assert.Fail " Could not get valid AST"
17191723
1724+ [<Test>]
1725+ let ``Range of nested module in signature file should end at the last SynModuleSigDecl`` () =
1726+ let parseResults =
1727+ getParseResultsOfSignatureFile
1728+ """ namespace Microsoft.FSharp.Core
1729+
1730+ open System
1731+ open System.Collections.Generic
1732+ open Microsoft.FSharp.Core
1733+ open Microsoft.FSharp.Collections
1734+ open System.Collections
1735+
1736+
1737+ module Tuple =
1738+
1739+ type Tuple<'T1,'T2,'T3,'T4> =
1740+ interface IStructuralEquatable
1741+ interface IStructuralComparable
1742+ interface IComparable
1743+ new : 'T1 * 'T2 * 'T3 * 'T4 -> Tuple<'T1,'T2,'T3,'T4>
1744+ member Item1 : 'T1 with get
1745+ member Item2 : 'T2 with get
1746+ member Item3 : 'T3 with get
1747+ member Item4 : 'T4 with get
1748+
1749+
1750+ module Choice =
1751+
1752+ /// <summary>Helper types for active patterns with 6 choices.</summary>
1753+ [<StructuralEquality; StructuralComparison>]
1754+ [<CompiledName("FSharpChoice`6")>]
1755+ type Choice<'T1,'T2,'T3,'T4,'T5,'T6> =
1756+ /// <summary>Choice 1 of 6 choices</summary>
1757+ | Choice1Of6 of 'T1
1758+ /// <summary>Choice 2 of 6 choices</summary>
1759+ | Choice2Of6 of 'T2
1760+ /// <summary>Choice 3 of 6 choices</summary>
1761+ | Choice3Of6 of 'T3
1762+ /// <summary>Choice 4 of 6 choices</summary>
1763+ | Choice4Of6 of 'T4
1764+ /// <summary>Choice 5 of 6 choices</summary>
1765+ | Choice5Of6 of 'T5
1766+ /// <summary>Choice 6 of 6 choices</summary>
1767+ | Choice6Of6 of 'T6
1768+
1769+
1770+
1771+ /// <summary>Basic F# Operators. This module is automatically opened in all F# code.</summary>
1772+ [<AutoOpen>]
1773+ module Operators =
1774+
1775+ type ``[,]``<'T> with
1776+ [<CompiledName("Length1")>]
1777+ /// <summary>Get the length of an array in the first dimension </summary>
1778+ member Length1 : int
1779+ [<CompiledName("Length2")>]
1780+ /// <summary>Get the length of the array in the second dimension </summary>
1781+ member Length2 : int
1782+ [<CompiledName("Base1")>]
1783+ /// <summary>Get the lower bound of the array in the first dimension </summary>
1784+ member Base1 : int
1785+ [<CompiledName("Base2")>]
1786+ /// <summary>Get the lower bound of the array in the second dimension </summary>
1787+ member Base2 : int
1788+ """
1789+
1790+ match parseResults with
1791+ | ParsedInput.SigFile ( ParsedSigFileInput ( modules = [ SynModuleOrNamespaceSig( decls = [
1792+ SynModuleSigDecl.Open _
1793+ SynModuleSigDecl.Open _
1794+ SynModuleSigDecl.Open _
1795+ SynModuleSigDecl.Open _
1796+ SynModuleSigDecl.Open _
1797+ SynModuleSigDecl.NestedModule( range= mTupleModule; moduleDecls=[ SynModuleSigDecl.Types([
1798+ SynTypeDefnSig( typeRepr= SynTypeDefnSigRepr.ObjectModel( range= mTupleObjectModel); range= mTupleType)
1799+ ], mTupleTypes) ])
1800+ SynModuleSigDecl.NestedModule( range= mChoiceModule)
1801+ SynModuleSigDecl.NestedModule( range= mOperatorsModule; moduleDecls=[ SynModuleSigDecl.Types([
1802+ SynTypeDefnSig( typeRepr= SynTypeDefnSigRepr.Simple( range= mAugmentationSimple); range= mAugmentation)
1803+ ], mOperatorsTypes) ])
1804+ ]) ])) ->
1805+ assertRange ( 10 , 0 ) ( 20 , 35 ) mTupleModule
1806+ assertRange ( 12 , 4 ) ( 20 , 35 ) mTupleTypes
1807+ assertRange ( 12 , 9 ) ( 20 , 35 ) mTupleType
1808+ assertRange ( 13 , 8 ) ( 20 , 35 ) mTupleObjectModel
1809+ assertRange ( 23 , 0 ) ( 40 , 25 ) mChoiceModule
1810+ assertRange ( 45 , 0 ) ( 60 , 26 ) mOperatorsModule
1811+ assertRange ( 48 , 4 ) ( 60 , 26 ) mOperatorsTypes
1812+ assertRange ( 48 , 9 ) ( 60 , 26 ) mAugmentation
1813+ assertRange ( 48 , 9 ) ( 60 , 26 ) mAugmentationSimple
1814+ | _ -> Assert.Fail " Could not get valid AST"
1815+
17201816module SynBindings =
17211817 [<Test>]
17221818 let ``Range of attribute should be included in SynModuleDecl.Let`` () =
0 commit comments