@@ -33,7 +33,7 @@ class UserError(Exception):
3333class CodeBlockAnalyser (nodes .SparseNodeVisitor ):
3434 """Transform literal blocks of Python with links to reference documentation."""
3535
36- def __init__ (self , * args , concat_default : str , source_dir : str , ** kwargs ):
36+ def __init__ (self , * args , source_dir : str , ** kwargs ):
3737 super ().__init__ (* args , ** kwargs )
3838 self .code_refs = {}
3939 relative_path = Path (self .document ['source' ]).relative_to (source_dir )
@@ -42,26 +42,25 @@ def __init__(self, *args, concat_default: str, source_dir: str, **kwargs):
4242 self .current_refid = None
4343 self .source_transforms : List [SourceTransforms ] = []
4444 self .implicit_imports = []
45- if concat_default not in ('none' , 'section' , 'file' ):
46- raise UserError (
47- f'Invalid concatenation default value in "conf.py": `{ concat_default } `'
48- )
49- self .concat_default = concat_default
50- self .concat_current = None
45+ self .concat_global = 'off'
46+ self .concat_section = False
5147 self .concat_sources = []
5248 self .autolink_skip = None
5349
5450 def unknown_visit (self , node ):
5551 """Handle and delete custom directives, ignore others."""
5652 if isinstance (node , ConcatBlocksMarker ):
57- if node .level not in ('none ' , 'section' , 'file' , 'reset ' ):
53+ if node .mode not in ('off ' , 'section' , 'on ' ):
5854 raise UserError (
59- f'Invalid concatenation argument: `{ node .level } ` '
55+ f'Invalid concatenation argument: `{ node .mode } ` '
6056 f'in document "{ self .current_document } "'
6157 )
6258
6359 self .concat_sources = []
64- self .concat_current = node .level if node .level != 'reset' else None
60+ if node .mode == 'section' :
61+ self .concat_section = True
62+ else :
63+ self .concat_global = node .mode
6564 node .parent .remove (node )
6665 elif isinstance (node , ImplicitImportMarker ):
6766 if '\n ' in node .content :
@@ -72,24 +71,22 @@ def unknown_visit(self, node):
7271 self .implicit_imports .append (node .content )
7372 node .parent .remove (node )
7473 elif isinstance (node , AutoLinkSkipMarker ):
75- if node .level not in ('next' , 'section' , 'file' , 'none ' ):
74+ if node .level not in ('next' , 'section' , 'file' , 'off ' ):
7675 raise UserError (
7776 f'Invalid skipping argument: `{ node .level } ` '
7877 f'in document "{ self .current_document } "'
7978 )
80- self .autolink_skip = node .level if node .level != 'none ' else None
79+ self .autolink_skip = node .level if node .level != 'off ' else None
8180 node .parent .remove (node )
8281
83- def _concat_mode (self ) -> str :
84- return self .concat_current or self .concat_default
85-
8682 def unknown_departure (self , node ):
8783 """Ignore unknown nodes."""
8884
8985 def visit_title (self , node ):
9086 """Track section names and break concatenation and skipping."""
9187 self .title_stack .append (node .astext ())
92- if self ._concat_mode () == 'section' :
88+ if self .concat_section :
89+ self .concat_section = False
9390 self .concat_sources = []
9491 if self .autolink_skip == 'section' :
9592 self .autolink_skip = None
@@ -142,7 +139,7 @@ def visit_literal_block(self, node: nodes.literal_block):
142139 name .lineno -= hidden_len
143140 name .end_lineno -= hidden_len
144141
145- if self ._concat_mode () != 'none ' :
142+ if self .concat_section or self . concat_global == 'on ' :
146143 self .concat_sources .extend (implicit_imports + [source ])
147144
148145 transforms = SourceTransforms (source , [])
0 commit comments