@@ -448,6 +448,17 @@ def dispatch_departure(self, node: docutils.nodes.Node) -> None:
448448 and popped .options ["tabset" ] != "tab"
449449 ):
450450 self .handle_tabset (popped )
451+ elif isinstance (popped , n .Directive ) and popped .name == "list-table" :
452+ failed_node = popped .check_tree (
453+ n .ListNode , n .ListNodeItem , n .ListNode , n .ListNodeItem
454+ )
455+ if failed_node :
456+ self .diagnostics .append (
457+ InvalidTableStructure (
458+ f"Incorrect list-item directive child: expected { failed_node [1 ].__name__ } , got { type (failed_node [0 ]).__name__ } . List tables must contain a list of lists" ,
459+ failed_node [0 ].start [0 ],
460+ )
461+ )
451462
452463 elif isinstance (popped , n .Directive ) and popped .name == "tabs" :
453464 self .validate_tabs_children (popped )
@@ -610,10 +621,10 @@ def handle_directive(
610621 self .validate_and_add_asset (doc , argument_text , line )
611622
612623 elif name == "list-table" :
613- # Calculate the expected number of columns for this list-table structure.
614624 if not node .children :
615625 return doc
616626
627+ # Calculate the expected number of columns for this list-table structure.
617628 expected_num_columns = 0
618629 if "widths" in options :
619630 widths = re .split (r"[,\s][\s]?" , options ["widths" ])
@@ -623,7 +634,9 @@ def handle_directive(
623634 if expected_num_columns == 0 and list_item .children :
624635 expected_num_columns = len (list_item .children [0 ].children )
625636 for bullets in list_item .children :
626- self .validate_list_table (bullets , expected_num_columns )
637+ self .diagnostics .extend (
638+ self .validate_list_table_item (bullets , expected_num_columns )
639+ )
627640
628641 elif name == "openapi" :
629642 # Parsing should be done by the OpenAPI renderer on the frontend by default
@@ -973,9 +986,10 @@ def validate_doc_role(self, node: docutils.nodes.Node) -> None:
973986 )
974987 )
975988
976- def validate_list_table (
977- self , node : docutils .nodes .Node , expected_num_columns : int
978- ) -> None :
989+ @staticmethod
990+ def validate_list_table_item (
991+ node : docutils .nodes .Node , expected_num_columns : int
992+ ) -> Sequence [Diagnostic ]:
979993 """Validate list-table structure"""
980994 if (
981995 isinstance (node , docutils .nodes .bullet_list )
@@ -984,10 +998,11 @@ def validate_list_table(
984998 msg = (
985999 f'Expected "{ expected_num_columns } " columns, saw "{ len (node .children )} "'
9861000 )
987- self . diagnostics . append (
1001+ return [
9881002 InvalidTableStructure (msg , util .get_line (node ) + len (node .children ) - 1 )
989- )
990- return
1003+ ]
1004+
1005+ return []
9911006
9921007 def validate_tabs_children (self , node : n .Directive ) -> None :
9931008 new_children : List [n .Node ] = []
0 commit comments