Sun, 11 Oct 2015 19:29:38 +0200
Added some vulture improvements from vulture repository.
1
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | #! /usr/bin/env python |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | # -*- coding: utf-8 -*- |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
3 | # |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # vulture - Find dead code. |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | # |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | # Copyright (C) 2012-2015 Jendrik Seipp (jendrikseipp@web.de) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | # |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | # This program is free software: you can redistribute it and/or modify |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | # it under the terms of the GNU General Public License as published by |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10 | # the Free Software Foundation, either version 3 of the License, or |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11 | # (at your option) any later version. |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12 | # |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13 | # This program is distributed in the hope that it will be useful, |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16 | # GNU General Public License for more details. |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17 | # |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | # You should have received a copy of the GNU General Public License |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | # |
7
a1a6ff3e5486
Patched the included vulture.py to support the @pyqtSlot() decorator.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1
diff
changeset
|
21 | # |
a1a6ff3e5486
Patched the included vulture.py to support the @pyqtSlot() decorator.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1
diff
changeset
|
22 | # |
1
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23 | # Patched to support the Python 3.5 async functionality. |
7
a1a6ff3e5486
Patched the included vulture.py to support the @pyqtSlot() decorator.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1
diff
changeset
|
24 | # Patched to support PyQt's @pyqtSlot decorator to consider slots as |
a1a6ff3e5486
Patched the included vulture.py to support the @pyqtSlot() decorator.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1
diff
changeset
|
25 | # always used. |
a1a6ff3e5486
Patched the included vulture.py to support the @pyqtSlot() decorator.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1
diff
changeset
|
26 | # Patches: Copyright (C) 2015 Detlev Offenbach <detlev@die-offenbachs.de> |
1
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | # |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29 | from __future__ import print_function |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | import ast |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32 | from fnmatch import fnmatchcase |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33 | import optparse |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34 | import os |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | import re |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | import sys |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | __version__ = '0.8.1-p1' |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | # Parse variable names in template strings. |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | FORMAT_STRING_PATTERNS = [re.compile(r'\%\((\w+)\)'), re.compile(r'{(\w+)}')] |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | |
18
e19e7622a428
Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7
diff
changeset
|
43 | IGNORED_VARIABLE_NAMES = ['object'] |
e19e7622a428
Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7
diff
changeset
|
44 | # True and False are NameConstants since Python 3.4. |
e19e7622a428
Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7
diff
changeset
|
45 | if sys.version_info < (3, 4): |
e19e7622a428
Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7
diff
changeset
|
46 | IGNORED_VARIABLE_NAMES += ['True', 'False'] |
e19e7622a428
Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7
diff
changeset
|
47 | |
1
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49 | def _ignore_function(name): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50 | return ((name.startswith('__') and name.endswith('__')) or |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51 | name.startswith('test_')) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54 | class Item(str): |
18
e19e7622a428
Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7
diff
changeset
|
55 | def __new__(cls, name, typ, filename, lineno): |
1
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56 | item = str.__new__(cls, name) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57 | item.typ = typ |
18
e19e7622a428
Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7
diff
changeset
|
58 | item.filename = filename |
1
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | item.lineno = lineno |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60 | return item |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63 | class Vulture(ast.NodeVisitor): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64 | """Find dead stuff.""" |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65 | def __init__(self, exclude=None, verbose=False): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66 | self.exclude = [] |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67 | for pattern in exclude or []: |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | if not any(char in pattern for char in ['*', '?', '[']): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69 | pattern = '*%s*' % pattern |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70 | self.exclude.append(pattern) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72 | self.verbose = verbose |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74 | self.defined_attrs = [] |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75 | self.defined_funcs = [] |
7
a1a6ff3e5486
Patched the included vulture.py to support the @pyqtSlot() decorator.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1
diff
changeset
|
76 | self.defined_slots = [] # @pyqtSlot support |
1
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77 | self.defined_props = [] |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78 | self.defined_vars = [] |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79 | self.used_attrs = [] |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80 | self.used_vars = [] |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81 | self.tuple_assign_vars = [] |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82 | self.names_imported_as_aliases = [] |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83 | |
18
e19e7622a428
Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7
diff
changeset
|
84 | self.filename = '' |
1
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
85 | self.code = None |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
86 | |
18
e19e7622a428
Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7
diff
changeset
|
87 | def scan(self, node_string, filename=''): |
1
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88 | self.code = node_string.splitlines() |
18
e19e7622a428
Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7
diff
changeset
|
89 | self.filename=filename |
e19e7622a428
Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7
diff
changeset
|
90 | node = ast.parse(node_string, filename=self.filename) |
1
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91 | self.visit(node) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93 | def _get_modules(self, paths, toplevel=True): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94 | """Take files from the command line even if they don't end with .py.""" |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95 | modules = [] |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96 | for path in paths: |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97 | path = os.path.abspath(path) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98 | if os.path.isfile(path) and (path.endswith('.py') or toplevel): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99 | modules.append(path) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
100 | elif os.path.isdir(path): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101 | subpaths = [os.path.join(path, filename) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
102 | for filename in sorted(os.listdir(path))] |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
103 | modules.extend(self._get_modules(subpaths, toplevel=False)) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104 | elif toplevel: |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
105 | sys.exit('Error: %s could not be found.' % path) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
106 | return modules |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
107 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108 | def scavenge(self, paths): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
109 | modules = self._get_modules(paths) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110 | included_modules = [] |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
111 | for module in modules: |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
112 | if any(fnmatchcase(module, pattern) for pattern in self.exclude): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
113 | self.log('Excluded:', module) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
114 | else: |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
115 | included_modules.append(module) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
116 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
117 | for module in included_modules: |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
118 | self.log('Scanning:', module) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
119 | with open(module) as f: |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
120 | module_string = f.read() |
18
e19e7622a428
Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7
diff
changeset
|
121 | self.scan(module_string, filename=module) |
1
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
122 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
123 | def report(self): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
124 | def file_lineno(item): |
18
e19e7622a428
Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7
diff
changeset
|
125 | return (item.filename.lower(), item.lineno) |
1
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
126 | unused_item_found = False |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
127 | for item in sorted(self.unused_funcs + self.unused_props + |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
128 | self.unused_vars + self.unused_attrs, |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
129 | key=file_lineno): |
18
e19e7622a428
Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7
diff
changeset
|
130 | relpath = os.path.relpath(item.filename) |
e19e7622a428
Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7
diff
changeset
|
131 | path = relpath if not relpath.startswith('..') else item.filename |
e19e7622a428
Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7
diff
changeset
|
132 | print( |
e19e7622a428
Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7
diff
changeset
|
133 | "%s:%d: Unused %s '%s'" % (path, item.lineno, item.typ, item)) |
1
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
134 | unused_item_found = True |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
135 | return unused_item_found |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
136 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
137 | def get_unused(self, defined, used): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
138 | return list(sorted(set(defined) - set(used), key=lambda x: x.lower())) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
139 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
140 | @property |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
141 | def unused_funcs(self): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
142 | return self.get_unused( |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
143 | self.defined_funcs, |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
144 | self.used_attrs + self.used_vars + self.names_imported_as_aliases) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
145 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
146 | @property |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
147 | def unused_props(self): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
148 | return self.get_unused(self.defined_props, self.used_attrs) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
149 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
150 | @property |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
151 | def unused_vars(self): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
152 | return self.get_unused( |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
153 | self.defined_vars, |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
154 | self.used_attrs + self.used_vars + self.tuple_assign_vars + |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
155 | self.names_imported_as_aliases) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
156 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
157 | @property |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
158 | def unused_attrs(self): |
18
e19e7622a428
Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7
diff
changeset
|
159 | return self.get_unused(self.defined_attrs, |
e19e7622a428
Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7
diff
changeset
|
160 | self.used_attrs + self.used_vars) |
1
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
161 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
162 | def _get_lineno(self, node): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
163 | return getattr(node, 'lineno', 1) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
164 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
165 | def _get_line(self, node): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
166 | return self.code[self._get_lineno(node) - 1] if self.code else '' |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
167 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
168 | def _get_item(self, node, typ): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
169 | name = getattr(node, 'name', None) |
18
e19e7622a428
Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7
diff
changeset
|
170 | id_ = getattr(node, 'id', None) |
1
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
171 | attr = getattr(node, 'attr', None) |
18
e19e7622a428
Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7
diff
changeset
|
172 | assert bool(name) ^ bool(id_) ^ bool(attr) |
e19e7622a428
Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7
diff
changeset
|
173 | return Item(name or id_ or attr, typ, self.filename, node.lineno) |
1
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
174 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
175 | def log(self, *args): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
176 | if self.verbose: |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
177 | print(*args) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
178 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
179 | def print_node(self, node): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
180 | # Only create the strings, if we'll also print them. |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
181 | if self.verbose: |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
182 | self.log( |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
183 | self._get_lineno(node), ast.dump(node), self._get_line(node)) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
184 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
185 | def visit_FunctionDef(self, node): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
186 | for decorator in node.decorator_list: |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
187 | if getattr(decorator, 'id', None) == 'property': |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
188 | self.defined_props.append(self._get_item(node, 'property')) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
189 | break |
7
a1a6ff3e5486
Patched the included vulture.py to support the @pyqtSlot() decorator.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1
diff
changeset
|
190 | elif getattr(decorator, 'func', None) is not None: |
a1a6ff3e5486
Patched the included vulture.py to support the @pyqtSlot() decorator.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1
diff
changeset
|
191 | # @pyqtSlot support |
a1a6ff3e5486
Patched the included vulture.py to support the @pyqtSlot() decorator.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1
diff
changeset
|
192 | if getattr(getattr(decorator, 'func'), 'id') == 'pyqtSlot': |
a1a6ff3e5486
Patched the included vulture.py to support the @pyqtSlot() decorator.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1
diff
changeset
|
193 | self.defined_slots.append(self._get_item(node, 'slot')) |
a1a6ff3e5486
Patched the included vulture.py to support the @pyqtSlot() decorator.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1
diff
changeset
|
194 | break |
1
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
195 | else: |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
196 | # Function is not a property. |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
197 | if not _ignore_function(node.name): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
198 | self.defined_funcs.append(self._get_item(node, 'function')) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
199 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
200 | visit_AsyncFunctionDef = visit_FunctionDef |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
201 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
202 | def visit_Attribute(self, node): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
203 | item = self._get_item(node, 'attribute') |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
204 | if isinstance(node.ctx, ast.Store): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
205 | self.log('defined_attrs <-', item) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
206 | self.defined_attrs.append(item) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
207 | elif isinstance(node.ctx, ast.Load): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
208 | self.log('used_attrs <-', item) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
209 | self.used_attrs.append(item) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
210 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
211 | def visit_Name(self, node): |
18
e19e7622a428
Added some vulture improvements from vulture repository.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7
diff
changeset
|
212 | if node.id not in IGNORED_VARIABLE_NAMES: |
1
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
213 | if isinstance(node.ctx, ast.Load): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
214 | self.log('used_vars <-', node.id) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
215 | self.used_vars.append(node.id) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
216 | elif isinstance(node.ctx, ast.Store): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
217 | # Ignore _x (pylint convention), __x, __x__ (special method). |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
218 | if not node.id.startswith('_'): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
219 | item = self._get_item(node, 'variable') |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
220 | self.log('defined_vars <-', item) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
221 | self.defined_vars.append(item) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
222 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
223 | def visit_Import(self, node): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
224 | self._add_aliases(node) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
225 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
226 | def visit_ImportFrom(self, node): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
227 | self._add_aliases(node) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
228 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
229 | def _add_aliases(self, node): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
230 | assert isinstance(node, (ast.Import, ast.ImportFrom)) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
231 | for name_and_alias in node.names: |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
232 | alias = name_and_alias.asname |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
233 | if alias is not None: |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
234 | name = name_and_alias.name |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
235 | self.log('names_imported_as_aliases <- %s' % name) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
236 | self.names_imported_as_aliases.append(name) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
237 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
238 | def _find_tuple_assigns(self, node): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
239 | # Find all tuple assignments. Those have the form |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
240 | # Assign->Tuple->Name or For->Tuple->Name or comprehension->Tuple->Name |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
241 | for child in ast.iter_child_nodes(node): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
242 | if not isinstance(child, ast.Tuple): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
243 | continue |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
244 | for grandchild in ast.walk(child): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
245 | if (isinstance(grandchild, ast.Name) and |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
246 | isinstance(grandchild.ctx, ast.Store)): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
247 | self.log('tuple_assign_vars <-', grandchild.id) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
248 | self.tuple_assign_vars.append(grandchild.id) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
249 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
250 | def visit_Assign(self, node): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
251 | self._find_tuple_assigns(node) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
252 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
253 | def visit_For(self, node): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
254 | self._find_tuple_assigns(node) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
255 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
256 | visit_AsyncFor = visit_For |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
257 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
258 | def visit_comprehension(self, node): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
259 | self._find_tuple_assigns(node) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
260 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
261 | def visit_ClassDef(self, node): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
262 | self.defined_funcs.append(self._get_item(node, 'class')) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
263 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
264 | def visit_Str(self, node): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
265 | """ |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
266 | Variables may appear in format strings: |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
267 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
268 | '%(my_var)s' % locals() |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
269 | '{my_var}'.format(**locals()) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
270 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
271 | """ |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
272 | for pattern in FORMAT_STRING_PATTERNS: |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
273 | self.used_vars.extend(pattern.findall(node.s)) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
274 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
275 | def visit(self, node): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
276 | method = 'visit_' + node.__class__.__name__ |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
277 | visitor = getattr(self, method, None) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
278 | if visitor is not None: |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
279 | self.print_node(node) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
280 | visitor(node) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
281 | return self.generic_visit(node) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
282 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
283 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
284 | def parse_args(): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
285 | def csv(option, opt, value, parser): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
286 | setattr(parser.values, option.dest, value.split(',')) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
287 | usage = 'usage: %prog [options] PATH [PATH ...]' |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
288 | parser = optparse.OptionParser(usage=usage) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
289 | parser.add_option('--exclude', action='callback', callback=csv, |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
290 | type='string', default=[], |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
291 | help='Comma-separated list of filename patterns to ' |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
292 | 'exclude (e.g. svn,external).') |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
293 | parser.add_option('-v', '--verbose', action='store_true') |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
294 | options, args = parser.parse_args() |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
295 | return options, args |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
296 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
297 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
298 | def main(): |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
299 | options, args = parse_args() |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
300 | vulture = Vulture(exclude=options.exclude, verbose=options.verbose) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
301 | vulture.scavenge(args) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
302 | sys.exit(vulture.report()) |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
303 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
304 | |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
305 | if __name__ == '__main__': |
ea6aed49cd69
Started implementing the vulture checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
306 | main() |