@@ -700,4 +700,64 @@ class ValidateSyntaxNodes: XCTestCase {
700
700
]
701
701
)
702
702
}
703
+
704
+ /// Nodes ending with `List` should always be syntax collections
705
+ func testNonCollectionNodesShouldntContainList( ) {
706
+ var failures : [ ValidationFailure ] = [ ]
707
+
708
+ for node in SYNTAX_NODES . compactMap ( \. layoutNode) {
709
+ if node. kind. syntaxType. description. contains ( " List " ) {
710
+ failures. append (
711
+ ValidationFailure (
712
+ node: node. kind,
713
+ message:
714
+ " non-collection node should not contain 'List' "
715
+ )
716
+ )
717
+ }
718
+ }
719
+
720
+ assertFailuresMatchXFails ( failures, expectedFailures: [ ] )
721
+ }
722
+
723
+ /// Children should always have a plural as their name instead of ending with 'List'.
724
+ func testChildrenDontEndWithList( ) {
725
+ var failures : [ ValidationFailure ] = [ ]
726
+
727
+ for node in SYNTAX_NODES . compactMap ( \. layoutNode) {
728
+ for child in node. children {
729
+ if child. name. contains ( " List " ) {
730
+ failures. append (
731
+ ValidationFailure (
732
+ node: node. kind,
733
+ message:
734
+ " child ' \( child. name) ' should not contain 'List' "
735
+ )
736
+ )
737
+ }
738
+ }
739
+ }
740
+
741
+ assertFailuresMatchXFails ( failures, expectedFailures: [ ] )
742
+ }
743
+
744
+ /// Entry is such an ambiguous term that we shouldn’t use it.
745
+ /// There are almost always better names
746
+ func testNoEntryInTypeNames( ) {
747
+ var failures : [ ValidationFailure ] = [ ]
748
+
749
+ for node in SYNTAX_NODES {
750
+ if node. kind. syntaxType. description. contains ( " Entry " ) {
751
+ failures. append (
752
+ ValidationFailure (
753
+ node: node. kind,
754
+ message:
755
+ " non-collection node shouldn’t contain 'List' "
756
+ )
757
+ )
758
+ }
759
+ }
760
+
761
+ assertFailuresMatchXFails ( failures, expectedFailures: [ ] )
762
+ }
703
763
}
0 commit comments