Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(20)

Side by Side Diff: third_party/pylint/checkers/raw_metrics.py

Issue 707353002: pylint: upgrade to 1.3.1 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools/
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 # Copyright (c) 2003-2013 LOGILAB S.A. (Paris, FRANCE).
2 # http://www.logilab.fr/ -- mailto:contact@logilab.fr
3 #
1 # This program is free software; you can redistribute it and/or modify it under 4 # This program is free software; you can redistribute it and/or modify it under
2 # the terms of the GNU General Public License as published by the Free Software 5 # the terms of the GNU General Public License as published by the Free Software
3 # Foundation; either version 2 of the License, or (at your option) any later 6 # Foundation; either version 2 of the License, or (at your option) any later
4 # version. 7 # version.
5 # 8 #
6 # This program is distributed in the hope that it will be useful, but WITHOUT 9 # This program is distributed in the hope that it will be useful, but WITHOUT
7 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
8 # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. 11 # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
9 # 12 #
10 # You should have received a copy of the GNU General Public License along with 13 # You should have received a copy of the GNU General Public License along with
11 # this program; if not, write to the Free Software Foundation, Inc., 14 # this program; if not, write to the Free Software Foundation, Inc.,
12 # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 15 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
13 """ Copyright (c) 2003-2010 LOGILAB S.A. (Paris, FRANCE). 16 """ Copyright (c) 2003-2010 LOGILAB S.A. (Paris, FRANCE).
14 http://www.logilab.fr/ -- mailto:contact@logilab.fr 17 http://www.logilab.fr/ -- mailto:contact@logilab.fr
15 18
16 Raw metrics checker 19 Raw metrics checker
17 """ 20 """
18 21
19 import tokenize 22 import tokenize
20 23
21 # pylint now requires pylint >= 2.2, so this is no longer necessary 24 # pylint now requires pylint >= 2.2, so this is no longer necessary
22 #if not hasattr(tokenize, 'NL'): 25 #if not hasattr(tokenize, 'NL'):
23 # raise ValueError("tokenize.NL doesn't exist -- tokenize module too old") 26 # raise ValueError("tokenize.NL doesn't exist -- tokenize module too old")
24 27
25 from logilab.common.ureports import Table 28 from logilab.common.ureports import Table
26 29
27 from pylint.interfaces import IRawChecker 30 from pylint.interfaces import ITokenChecker
28 from pylint.checkers import BaseRawChecker, EmptyReport 31 from pylint.utils import EmptyReport
32 from pylint.checkers import BaseTokenChecker
29 from pylint.reporters import diff_string 33 from pylint.reporters import diff_string
30 34
31 def report_raw_stats(sect, stats, old_stats): 35 def report_raw_stats(sect, stats, old_stats):
32 """calculate percentage of code / doc / comment / empty 36 """calculate percentage of code / doc / comment / empty
33 """ 37 """
34 total_lines = stats['total_lines'] 38 total_lines = stats['total_lines']
35 if not total_lines: 39 if not total_lines:
36 raise EmptyReport() 40 raise EmptyReport()
37 sect.description = '%s lines have been analyzed' % total_lines 41 sect.description = '%s lines have been analyzed' % total_lines
38 lines = ('type', 'number', '%', 'previous', 'difference') 42 lines = ('type', 'number', '%', 'previous', 'difference')
39 for node_type in ('code', 'docstring', 'comment', 'empty'): 43 for node_type in ('code', 'docstring', 'comment', 'empty'):
40 key = node_type + '_lines' 44 key = node_type + '_lines'
41 total = stats[key] 45 total = stats[key]
42 percent = float(total * 100) / total_lines 46 percent = float(total * 100) / total_lines
43 old = old_stats.get(key, None) 47 old = old_stats.get(key, None)
44 if old is not None: 48 if old is not None:
45 diff_str = diff_string(old, total) 49 diff_str = diff_string(old, total)
46 else: 50 else:
47 old, diff_str = 'NC', 'NC' 51 old, diff_str = 'NC', 'NC'
48 lines += (node_type, str(total), '%.2f' % percent, 52 lines += (node_type, str(total), '%.2f' % percent,
49 str(old), diff_str) 53 str(old), diff_str)
50 sect.append(Table(children=lines, cols=5, rheaders=1)) 54 sect.append(Table(children=lines, cols=5, rheaders=1))
51 55
52 56
53 class RawMetricsChecker(BaseRawChecker): 57 class RawMetricsChecker(BaseTokenChecker):
54 """does not check anything but gives some raw metrics : 58 """does not check anything but gives some raw metrics :
55 * total number of lines 59 * total number of lines
56 * total number of code lines 60 * total number of code lines
57 * total number of docstring lines 61 * total number of docstring lines
58 * total number of comments lines 62 * total number of comments lines
59 * total number of empty lines 63 * total number of empty lines
60 """ 64 """
61 65
62 __implements__ = (IRawChecker,) 66 __implements__ = (ITokenChecker,)
63 67
64 # configuration section name 68 # configuration section name
65 name = 'metrics' 69 name = 'metrics'
66 # configuration options 70 # configuration options
67 options = ( ) 71 options = ()
68 # messages 72 # messages
69 msgs = {} 73 msgs = {}
70 # reports 74 # reports
71 reports = ( ('RP0701', 'Raw metrics', report_raw_stats), ) 75 reports = (('RP0701', 'Raw metrics', report_raw_stats),)
72 76
73 def __init__(self, linter): 77 def __init__(self, linter):
74 BaseRawChecker.__init__(self, linter) 78 BaseTokenChecker.__init__(self, linter)
75 self.stats = None 79 self.stats = None
76 80
77 def open(self): 81 def open(self):
78 """init statistics""" 82 """init statistics"""
79 self.stats = self.linter.add_stats(total_lines=0, code_lines=0, 83 self.stats = self.linter.add_stats(total_lines=0, code_lines=0,
80 empty_lines=0, docstring_lines=0, 84 empty_lines=0, docstring_lines=0,
81 comment_lines=0) 85 comment_lines=0)
82 86
83 def process_tokens(self, tokens): 87 def process_tokens(self, tokens):
84 """update stats""" 88 """update stats"""
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 line_type = 'empty_lines' 120 line_type = 'empty_lines'
117 elif i < len(tokens) and tok_type == tokenize.NEWLINE: 121 elif i < len(tokens) and tok_type == tokenize.NEWLINE:
118 i += 1 122 i += 1
119 return i, pos[0] - start[0] + 1, line_type 123 return i, pos[0] - start[0] + 1, line_type
120 124
121 125
122 def register(linter): 126 def register(linter):
123 """ required method to auto register this checker """ 127 """ required method to auto register this checker """
124 linter.register_checker(RawMetricsChecker(linter)) 128 linter.register_checker(RawMetricsChecker(linter))
125 129
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698