Skip to content

Commit b437bf2

Browse files
mchehabJonathan Corbet
authored andcommitted
docs: Sphinx: kerneldoc: only initialize kernel-doc classes once
Instead of re-creating the objects every time, initialize it just once. This allows caching previously parsed objects. Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> Signed-off-by: Jonathan Corbet <corbet@lwn.net> Message-ID: <b00788f26e161512858a6e01a673c34743c954df.1745564565.git.mchehab+huawei@kernel.org>
1 parent 292c39b commit b437bf2

1 file changed

Lines changed: 11 additions & 12 deletions

File tree

Documentation/sphinx/kerneldoc.py

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@
4848
from kdoc_output import RestFormat
4949

5050
__version__ = '1.0'
51-
use_kfiles = False
51+
kfiles = None
52+
logger = logging.getLogger('kerneldoc')
5253

5354
def cmd_str(cmd):
5455
"""
@@ -86,7 +87,6 @@ class KernelDocDirective(Directive):
8687
'functions': directives.unchanged,
8788
}
8889
has_content = False
89-
logger = logging.getLogger('kerneldoc')
9090
verbose = 0
9191

9292
parse_args = {}
@@ -204,7 +204,7 @@ def run_cmd(self):
204204
node = nodes.section()
205205

206206
try:
207-
self.logger.verbose("calling kernel-doc '%s'" % (" ".join(cmd)))
207+
logger.verbose("calling kernel-doc '%s'" % (" ".join(cmd)))
208208

209209
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
210210
out, err = p.communicate()
@@ -214,14 +214,14 @@ def run_cmd(self):
214214
if p.returncode != 0:
215215
sys.stderr.write(err)
216216

217-
self.logger.warning("kernel-doc '%s' failed with return code %d"
217+
logger.warning("kernel-doc '%s' failed with return code %d"
218218
% (" ".join(cmd), p.returncode))
219219
return [nodes.error(None, nodes.paragraph(text = "kernel-doc missing"))]
220220
elif env.config.kerneldoc_verbosity > 0:
221221
sys.stderr.write(err)
222222

223223
except Exception as e: # pylint: disable=W0703
224-
self.logger.warning("kernel-doc '%s' processing failed with: %s" %
224+
logger.warning("kernel-doc '%s' processing failed with: %s" %
225225
(" ".join(cmd), str(e)))
226226
return [nodes.error(None, nodes.paragraph(text = "kernel-doc missing"))]
227227

@@ -261,7 +261,7 @@ def parse_msg(self, filename, node, out, cmd):
261261
self.do_parse(result, node)
262262

263263
except Exception as e: # pylint: disable=W0703
264-
self.logger.warning("kernel-doc '%s' processing failed with: %s" %
264+
logger.warning("kernel-doc '%s' processing failed with: %s" %
265265
(cmd_str(cmd), str(e)))
266266
return [nodes.error(None, nodes.paragraph(text = "kernel-doc missing"))]
267267

@@ -292,11 +292,9 @@ def run_kdoc(self, kfiles):
292292
return node.children
293293

294294
def run(self):
295-
global use_kfiles
295+
global kfiles
296296

297-
if use_kfiles:
298-
out_style = RestFormat()
299-
kfiles = KernelFiles(out_style=out_style, logger=self.logger)
297+
if kfiles:
300298
return self.run_kdoc(kfiles)
301299
else:
302300
return self.run_cmd()
@@ -306,13 +304,14 @@ def do_parse(self, result, node):
306304
self.state.nested_parse(result, 0, node, match_titles=1)
307305

308306
def setup_kfiles(app):
309-
global use_kfiles
307+
global kfiles
310308

311309
kerneldoc_bin = app.env.config.kerneldoc_bin
312310

313311
if kerneldoc_bin and kerneldoc_bin.endswith("kernel-doc.py"):
314312
print("Using Python kernel-doc")
315-
use_kfiles = True
313+
out_style = RestFormat()
314+
kfiles = KernelFiles(out_style=out_style, logger=logger)
316315
else:
317316
print(f"Using {kerneldoc_bin}")
318317

0 commit comments

Comments
 (0)