Exemplo n.º 1
0
def report_messages_by_module_stats(sect, stats, _):
    """make errors / warnings by modules report"""
    if len(stats['by_module']) == 1:
        # don't print this report when we are analysing a single module
        raise EmptyReport()
    by_mod = {}
    for m_type in ('fatal', 'error', 'warning', 'refactor', 'convention'):
        total = stats[m_type]
        for module in stats['by_module'].iterkeys():
            mod_total = stats['by_module'][module][m_type]
            if total == 0:
                percent = 0
            else:
                percent = float((mod_total) * 100) / total
            by_mod.setdefault(module, {})[m_type] = percent
    sorted_result = []
    for module, mod_info in by_mod.iteritems():
        sorted_result.append(
            (mod_info['error'], mod_info['warning'], mod_info['refactor'],
             mod_info['convention'], module))
    sorted_result.sort()
    sorted_result.reverse()
    lines = ['module', 'error', 'warning', 'refactor', 'convention']
    for line in sorted_result:
        if line[0] == 0 and line[1] == 0:
            break
        lines.append(line[-1])
        for val in line[:-1]:
            lines.append('%.2f' % val)
    if len(lines) == 5:
        raise EmptyReport()
    sect.append(Table(children=lines, cols=5, rheaders=1))
Exemplo n.º 2
0
 def _report_external_dependencies(self, sect, _, dummy):
     """return a verbatim layout for displaying dependencies"""
     dep_info = _make_tree_defs(six.iteritems(self._external_dependencies_info()))
     if not dep_info:
         raise EmptyReport()
     tree_str = _repr_tree_defs(dep_info)
     sect.append(VerbatimText(tree_str))
Exemplo n.º 3
0
 def report_evaluation(self, sect, stats, previous_stats):
     """make the global evaluation report"""
     # check with at least check 1 statements (usually 0 when there is a
     # syntax error preventing pylint from further processing)
     if stats['statement'] == 0:
         raise EmptyReport()
     # get a global note for the code
     evaluation = self.config.evaluation
     try:
         note = eval(evaluation, {}, self.stats)
     except Exception, ex:
         msg = 'An exception occurred while rating: %s' % ex
Exemplo n.º 4
0
def report_messages_stats(sect, stats, _):
    """make messages type report"""
    if not stats['by_msg']:
        # don't print this report when we didn't detected any errors
        raise EmptyReport()
    in_order = sorted([(value, msg_id)
                       for msg_id, value in stats['by_msg'].iteritems()
                       if not msg_id.startswith('I')])
    in_order.reverse()
    lines = ('message id', 'occurrences')
    for value, msg_id in in_order:
        lines += (msg_id, str(value))
    sect.append(Table(children=lines, cols=2, rheaders=1))
Exemplo n.º 5
0
 def _report_dependencies_graph(self, sect, _, dummy):
     """write dependencies as a dot (graphviz) file"""
     dep_info = self.stats['dependencies']
     if not dep_info or not (self.config.import_graph
                             or self.config.ext_import_graph
                             or self.config.int_import_graph):
         raise EmptyReport()
     filename = self.config.import_graph
     if filename:
         _make_graph(filename, dep_info, sect, '')
     filename = self.config.ext_import_graph
     if filename:
         _make_graph(filename, self._external_dependencies_info(),
                     sect, 'external ')
     filename = self.config.int_import_graph
     if filename:
         _make_graph(filename, self._internal_dependencies_info(),
                     sect, 'internal ')
Exemplo n.º 6
0
def report_raw_stats(sect, stats, old_stats):
    """calculate percentage of code / doc / comment / empty
    """
    total_lines = stats['total_lines']
    if not total_lines:
        raise EmptyReport()
    sect.description = '%s lines have been analyzed' % total_lines
    lines = ('type', 'number', '%', 'previous', 'difference')
    for node_type in ('code', 'docstring', 'comment', 'empty'):
        key = node_type + '_lines'
        total = stats[key]
        percent = float(total * 100) / total_lines
        old = old_stats.get(key, None)
        if old is not None:
            diff_str = diff_string(old, total)
        else:
            old, diff_str = 'NC', 'NC'
        lines += (node_type, str(total), '%.2f' % percent, str(old), diff_str)
    sect.append(Table(children=lines, cols=5, rheaders=1))
Exemplo n.º 7
0
def report_by_type_stats(sect, stats, old_stats):
    """make a report of

    * percentage of different types documented
    * percentage of different types with a bad name
    """
    # percentage of different types documented and/or with a bad name
    nice_stats = {}
    for node_type in ('module', 'class', 'method', 'function'):
        try:
            total = stats[node_type]
        except KeyError:
            raise EmptyReport()
        nice_stats[node_type] = {}
        if total != 0:
            try:
                documented = total - stats['undocumented_'+node_type]
                percent = (documented * 100.) / total
                nice_stats[node_type]['percent_documented'] = '%.2f' % percent
            except KeyError:
                nice_stats[node_type]['percent_documented'] = 'NC'
            try:
                percent = (stats['badname_'+node_type] * 100.) / total
                nice_stats[node_type]['percent_badname'] = '%.2f' % percent
            except KeyError:
                nice_stats[node_type]['percent_badname'] = 'NC'
    lines = ('type', 'number', 'old number', 'difference',
             '%documented', '%badname')
    for node_type in ('module', 'class', 'method', 'function'):
        new = stats[node_type]
        old = old_stats.get(node_type, None)
        if old is not None:
            diff_str = diff_string(old, new)
        else:
            old, diff_str = 'NC', 'NC'
        lines += (node_type, str(new), str(old), diff_str,
                  nice_stats[node_type].get('percent_documented', '0'),
                  nice_stats[node_type].get('percent_badname', '0'))
    sect.append(Table(children=lines, cols=6, rheaders=1))
Exemplo n.º 8
0
 def report_evaluation(self, sect, stats, previous_stats):
     """make the global evaluation report"""
     # check with at least check 1 statements (usually 0 when there is a
     # syntax error preventing pylint from further processing)
     if stats['statement'] == 0:
         raise EmptyReport()
     # get a global note for the code
     evaluation = self.config.evaluation
     try:
         note = eval(evaluation, {}, self.stats)
     except Exception as ex:
         msg = 'An exception occurred while rating: %s' % ex
     else:
         stats['global_note'] = note
         msg = 'Your code has been rated at %.2f/10' % note
         pnote = previous_stats.get('global_note')
         if pnote is not None:
             msg += ' (previous run: %.2f/10, %+.2f)' % (pnote,
                                                         note - pnote)
         if self.config.comment:
             msg = '%s\n%s' % (msg, config.get_note_message(note))
     sect.append(Text(msg))