78 lines
3 KiB
Python
78 lines
3 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""Simple API fro creolelint reports"""
|
|
import sys
|
|
from creole.lint.warning import Warn
|
|
from creole.lint import warnsymb
|
|
|
|
def ansi_print(text=None, fhandle=None, newline=True, flush=False):
|
|
"""normalized (ansi) print >> file handle function"""
|
|
#sys.stdout.write(self.getvalue())
|
|
if fhandle is None:
|
|
fhandle = sys.stderr
|
|
if text != None:
|
|
#text = text.strip()
|
|
if newline:
|
|
text += '\n'
|
|
fhandle.write(text)
|
|
if flush:
|
|
fhandle.flush()
|
|
# if fhandle:
|
|
# fhandle.close()
|
|
|
|
class AnsiWriter(object):
|
|
"""Définit une interface d'écriture de warnings
|
|
"""
|
|
def __init__(self, write_level, output=sys.stdout):
|
|
self.write_level = write_level
|
|
self.output = output
|
|
|
|
def process(self, linter):
|
|
"""
|
|
parse a result from an item.check() dictionnary
|
|
which is made of {name: TmplVar}
|
|
"""
|
|
ident=1
|
|
itemname = linter.name
|
|
warnno = linter.warnno
|
|
warncomment = linter.warncomment
|
|
display = linter.display
|
|
name, level = warnsymb.errorcode[warnno]
|
|
if level > getattr(warnsymb, self.write_level):
|
|
print "\nLint {0} désactivé (niveau {1})".format(itemname, warnsymb.errorlevel[level])
|
|
return ''
|
|
level = warnsymb.errorlevel[level]
|
|
if not display:
|
|
ansi_print('')
|
|
ansi_print('%s (%s:%s:%s)'%(warncomment, itemname, name, level), self.output)
|
|
checks = linter.check()
|
|
warn = Warn(self.write_level, itemname, warnno, warncomment, checks)
|
|
dico_loc = warn.to_dict()
|
|
if dico_loc != '' and dico_loc != {}:
|
|
ansi_print('')
|
|
ansi_print('%s (%s:%s:%s)'%(warncomment, itemname, name, level), self.output)
|
|
def compare(x,y):
|
|
return cmp(x[0],y[0])
|
|
for vfile in dico_loc.keys():
|
|
if vfile != 'dictionnaire':
|
|
ansi_print('%s\-- fichier %s' % (' '*ident, vfile), self.output, newline=False)
|
|
vlines = dico_loc[vfile]
|
|
vlines.sort(compare)
|
|
oldline=0
|
|
for vline, var in vlines:
|
|
if hasattr(var, 'name'):
|
|
vname = '%%%%%s'%str(var.name)
|
|
else:
|
|
vname = str(var)
|
|
if vline != None:
|
|
if vline != oldline:
|
|
ansi_print('', self.output)
|
|
ansi_print('%s|-- ligne %s' % (' '*(ident+1), vline), self.output, newline=False)
|
|
pass
|
|
oldline=vline
|
|
if vfile != 'dictionnaire':
|
|
ansi_print(" %s" %vname, self.output, newline=False)
|
|
else:
|
|
ansi_print("%s\-- %s" %(' '*ident, vname), self.output)
|
|
if vfile != 'dictionnaire':
|
|
ansi_print('', self.output)
|
|
|