40
40
import sphinx
41
41
from sphinx .util .docutils import switch_source_input
42
42
from sphinx .util import logging
43
+ from pprint import pformat
43
44
44
45
srctree = os .path .abspath (os .environ ["srctree" ])
45
46
sys .path .insert (0 , os .path .join (srctree , "scripts/lib/kdoc" ))
49
50
50
51
__version__ = '1.0'
51
52
kfiles = None
52
- logger = logging .getLogger ('kerneldoc' )
53
+ logger = logging .getLogger (__name__ )
53
54
54
55
def cmd_str (cmd ):
55
56
"""
@@ -190,46 +191,31 @@ def handle_args(self):
190
191
191
192
return cmd
192
193
193
- def run_cmd (self ):
194
+ def run_cmd (self , cmd ):
194
195
"""
195
196
Execute an external kernel-doc command.
196
197
"""
197
198
198
199
env = self .state .document .settings .env
199
- cmd = self .handle_args ()
200
-
201
- if self .verbose >= 1 :
202
- print (cmd_str (cmd ))
203
-
204
200
node = nodes .section ()
205
201
206
- try :
207
- logger .verbose ("calling kernel-doc '%s'" % (" " .join (cmd )))
208
-
209
- p = subprocess .Popen (cmd , stdout = subprocess .PIPE , stderr = subprocess .PIPE )
210
- out , err = p .communicate ()
211
-
212
- out , err = codecs .decode (out , 'utf-8' ), codecs .decode (err , 'utf-8' )
202
+ p = subprocess .Popen (cmd , stdout = subprocess .PIPE , stderr = subprocess .PIPE )
203
+ out , err = p .communicate ()
213
204
214
- if p .returncode != 0 :
215
- sys .stderr .write (err )
205
+ out , err = codecs .decode (out , 'utf-8' ), codecs .decode (err , 'utf-8' )
216
206
217
- logger .warning ("kernel-doc '%s' failed with return code %d"
218
- % (" " .join (cmd ), p .returncode ))
219
- return [nodes .error (None , nodes .paragraph (text = "kernel-doc missing" ))]
220
- elif env .config .kerneldoc_verbosity > 0 :
221
- sys .stderr .write (err )
207
+ if p .returncode != 0 :
208
+ sys .stderr .write (err )
222
209
223
- except Exception as e : # pylint: disable=W0703
224
- logger .warning ("kernel-doc '%s' processing failed with: %s" %
225
- (" " .join (cmd ), str (e )))
210
+ logger .warning ("kernel-doc '%s' failed with return code %d"
211
+ % (" " .join (cmd ), p .returncode ))
226
212
return [nodes .error (None , nodes .paragraph (text = "kernel-doc missing" ))]
213
+ elif env .config .kerneldoc_verbosity > 0 :
214
+ sys .stderr .write (err )
227
215
228
216
filenames = self .parse_args ["file_list" ]
229
217
for filename in filenames :
230
- ret = self .parse_msg (filename , node , out , cmd )
231
- if ret :
232
- return ret
218
+ self .parse_msg (filename , node , out , cmd )
233
219
234
220
return node .children
235
221
@@ -240,40 +226,31 @@ def parse_msg(self, filename, node, out, cmd):
240
226
241
227
env = self .state .document .settings .env
242
228
243
- try :
244
- lines = statemachine .string2lines (out , self .tab_width ,
245
- convert_whitespace = True )
246
- result = ViewList ()
247
-
248
- lineoffset = 0 ;
249
- line_regex = re .compile (r"^\.\. LINENO ([0-9]+)$" )
250
- for line in lines :
251
- match = line_regex .search (line )
252
- if match :
253
- # sphinx counts lines from 0
254
- lineoffset = int (match .group (1 )) - 1
255
- # we must eat our comments since the upset the markup
256
- else :
257
- doc = str (env .srcdir ) + "/" + env .docname + ":" + str (self .lineno )
258
- result .append (line , doc + ": " + filename , lineoffset )
259
- lineoffset += 1
260
-
261
- self .do_parse (result , node )
262
-
263
- except Exception as e : # pylint: disable=W0703
264
- logger .warning ("kernel-doc '%s' processing failed with: %s" %
265
- (cmd_str (cmd ), str (e )))
266
- return [nodes .error (None , nodes .paragraph (text = "kernel-doc missing" ))]
229
+ lines = statemachine .string2lines (out , self .tab_width ,
230
+ convert_whitespace = True )
231
+ result = ViewList ()
232
+
233
+ lineoffset = 0 ;
234
+ line_regex = re .compile (r"^\.\. LINENO ([0-9]+)$" )
235
+ for line in lines :
236
+ match = line_regex .search (line )
237
+ if match :
238
+ # sphinx counts lines from 0
239
+ lineoffset = int (match .group (1 )) - 1
240
+ # we must eat our comments since the upset the markup
241
+ else :
242
+ doc = str (env .srcdir ) + "/" + env .docname + ":" + str (self .lineno )
243
+ result .append (line , doc + ": " + filename , lineoffset )
244
+ lineoffset += 1
267
245
268
- return None
246
+ self . do_parse ( result , node )
269
247
270
- def run_kdoc (self , kfiles ):
248
+ def run_kdoc (self , cmd , kfiles ):
271
249
"""
272
250
Execute kernel-doc classes directly instead of running as a separate
273
251
command.
274
252
"""
275
253
276
- cmd = self .handle_args ()
277
254
env = self .state .document .settings .env
278
255
279
256
node = nodes .section ()
@@ -282,22 +259,27 @@ def run_kdoc(self, kfiles):
282
259
filenames = self .parse_args ["file_list" ]
283
260
284
261
for filename , out in kfiles .msg (** self .msg_args , filenames = filenames ):
285
- if self .verbose >= 1 :
286
- print (cmd_str (cmd ))
287
-
288
- ret = self .parse_msg (filename , node , out , cmd )
289
- if ret :
290
- return ret
262
+ self .parse_msg (filename , node , out , cmd )
291
263
292
264
return node .children
293
265
294
266
def run (self ):
295
267
global kfiles
296
268
297
- if kfiles :
298
- return self .run_kdoc (kfiles )
299
- else :
300
- return self .run_cmd ()
269
+ cmd = self .handle_args ()
270
+ if self .verbose >= 1 :
271
+ logger .info (cmd_str (cmd ))
272
+
273
+ try :
274
+ if kfiles :
275
+ return self .run_kdoc (cmd , kfiles )
276
+ else :
277
+ return self .run_cmd (cmd )
278
+
279
+ except Exception as e : # pylint: disable=W0703
280
+ logger .warning ("kernel-doc '%s' processing failed with: %s" %
281
+ (cmd_str (cmd ), pformat (e )))
282
+ return [nodes .error (None , nodes .paragraph (text = "kernel-doc missing" ))]
301
283
302
284
def do_parse (self , result , node ):
303
285
with switch_source_input (self .state , result ):
0 commit comments