@@ -596,11 +596,11 @@ type Meh =
596596 match parseResults with
597597 | ParsedInput.SigFile ( ParsedSigFileInput ( modules = [
598598 SynModuleOrNamespaceSig( decls = [ SynModuleSigDecl.Types( range = r)]) ])) ->
599- assertRange ( 3 , 0 ) ( 5 , 11 ) r
599+ assertRange ( 3 , 5 ) ( 5 , 11 ) r
600600 | _ -> Assert.Fail " Could not get valid AST"
601601
602602 [<Test>]
603- let ``Range of TypeDefnSig record should end at last member`` () =
603+ let ``Range of SynTypeDefnSig record should end at last member`` () =
604604 let parseResults =
605605 getParseResultsOfSignatureFile
606606 """ namespace X
@@ -615,7 +615,7 @@ type MyRecord =
615615 | _ -> Assert.Fail " Could not get valid AST"
616616
617617 [<Test>]
618- let ``Range of TypeDefnSig object model should end at last member`` () =
618+ let ``Range of SynTypeDefnSig object model should end at last member`` () =
619619 let parseResults =
620620 getParseResultsOfSignatureFile
621621 """ namespace X
@@ -631,7 +631,7 @@ type MyRecord =
631631 | _ -> Assert.Fail " Could not get valid AST"
632632
633633 [<Test>]
634- let ``Range of TypeDefnSig delegate of should start from name`` () =
634+ let ``Range of SynTypeDefnSig delegate of should start from name`` () =
635635 let parseResults =
636636 getParseResultsOfSignatureFile
637637 """ namespace Y
@@ -645,7 +645,7 @@ type MyFunction =
645645 | _ -> Assert.Fail " Could not get valid AST"
646646
647647 [<Test>]
648- let ``Range of TypeDefnSig simple should end at last val`` () =
648+ let ``Range of SynTypeDefnSig simple should end at last val`` () =
649649 let parseResults =
650650 getParseResultsOfSignatureFile
651651 """ namespace Z
@@ -659,6 +659,79 @@ type SomeCollection with
659659 assertRange ( 2 , 5 ) ( 4 , 37 ) r
660660 | _ -> Assert.Fail " Could not get valid AST"
661661
662+ [<Test>]
663+ let ``Range of attribute should be included in SynTypeDefnSig`` () =
664+ let parseResults =
665+ getParseResultsOfSignatureFile
666+ """
667+ namespace SomeNamespace
668+
669+ [<Foo1>]
670+ type MyType =
671+ class
672+ end
673+ """
674+
675+ match parseResults with
676+ | ParsedInput.SigFile ( ParsedSigFileInput ( modules = [
677+ SynModuleOrNamespaceSig( decls = [ SynModuleSigDecl.Types( types = [ SynTypeDefnSig.SynTypeDefnSig( range = r)]) as t]) ])) ->
678+ assertRange ( 4 , 0 ) ( 7 , 7 ) r
679+ assertRange ( 4 , 0 ) ( 7 , 7 ) t.Range
680+ | _ -> Assert.Fail " Could not get valid AST"
681+
682+ [<Test>]
683+ let ``Range of attributes should be included in recursive types`` () =
684+ let parseResults =
685+ getParseResultsOfSignatureFile
686+ """
687+ namespace SomeNamespace
688+
689+ type Foo =
690+ | Bar
691+
692+ and [<CustomEquality>] Bang =
693+ internal
694+ {
695+ LongNameBarBarBarBarBarBarBar: int
696+ }
697+ override GetHashCode : unit -> int
698+ """
699+
700+ match parseResults with
701+ | ParsedInput.SigFile ( ParsedSigFileInput ( modules = [
702+ SynModuleOrNamespaceSig( decls = [ SynModuleSigDecl.Types( types = [
703+ SynTypeDefnSig.SynTypeDefnSig( range = r1)
704+ SynTypeDefnSig.SynTypeDefnSig( range = r2)
705+ ]) as t]) ])) ->
706+ assertRange ( 4 , 5 ) ( 5 , 9 ) r1
707+ assertRange ( 7 , 4 ) ( 12 , 42 ) r2
708+ assertRange ( 4 , 5 ) ( 12 , 42 ) t.Range
709+ | _ -> Assert.Fail " Could not get valid AST"
710+
711+ [<Test>]
712+ let ``Range of attribute should be included in SynValSpfn and Member`` () =
713+ let parseResults =
714+ getParseResultsOfSignatureFile
715+ """
716+ namespace SomeNamespace
717+
718+ type FooType =
719+ [<Foo2>] // ValSpfn
720+ abstract x : int
721+ """
722+
723+ match parseResults with
724+ | ParsedInput.SigFile ( ParsedSigFileInput ( modules = [
725+ SynModuleOrNamespaceSig( decls =
726+ [ SynModuleSigDecl.Types( types = [
727+ SynTypeDefnSig.SynTypeDefnSig( typeRepr =
728+ SynTypeDefnSigRepr.ObjectModel( memberSigs = [
729+ SynMemberSig.Member( range = mr; memberSig = SynValSig( range = mv)) ]))
730+ ]) ]) ])) ->
731+ assertRange ( 5 , 4 ) ( 6 , 20 ) mr
732+ assertRange ( 5 , 4 ) ( 6 , 20 ) mv
733+ | _ -> Assert.Fail " Could not get valid AST"
734+
662735module SynMatchClause =
663736 [<Test>]
664737 let ``Range of single SynMatchClause`` () =
@@ -807,4 +880,26 @@ __SOURCE_FILE__"""
807880 SynModuleDecl.DoExpr( expr = SynExpr.Const( SynConst.SourceIdentifier( " __SOURCE_FILE__" , _, range), _))
808881 ]) ])) ->
809882 assertRange ( 2 , 0 ) ( 2 , 15 ) range
883+ | _ -> Assert.Fail " Could not get valid AST"
884+
885+ module NestedModules =
886+
887+ [<Test>]
888+ let ``Range of attribute should be included in SynModuleSigDecl.NestedModule`` () =
889+ let parseResults =
890+ getParseResultsOfSignatureFile
891+ """
892+ namespace SomeNamespace
893+
894+ [<Foo>]
895+ module Nested =
896+ val x : int
897+ """
898+
899+ match parseResults with
900+ | ParsedInput.SigFile ( ParsedSigFileInput ( modules = [ SynModuleOrNamespaceSig( decls = [
901+ SynModuleSigDecl.NestedModule _ as nm
902+ ]) as sigModule ])) ->
903+ assertRange ( 4 , 0 ) ( 6 , 15 ) nm.Range
904+ assertRange ( 2 , 0 ) ( 6 , 15 ) sigModule.Range
810905 | _ -> Assert.Fail " Could not get valid AST"
0 commit comments