UtilitiesPython2/Pep8NamingCheckerPy2.py

Sun, 29 Sep 2013 18:22:08 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 29 Sep 2013 18:22:08 +0200
changeset 2965
d133c7edd88a
parent 2913
4e395efc0ef9
permissions
-rw-r--r--

Continued correcting doc strings by using the new doc string checker.

2896
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2013 Detlev Offenbach <detlev@die-offenbachs.de>
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a checker for PEP-8 naming conventions for Python2.
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import collections
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 import ast
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 import re
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 import os
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 class Pep8NamingChecker(object):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 Class implementing a checker for PEP-8 naming conventions for Python2.
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 LowercaseRegex = re.compile(r"[_a-z][_a-z0-9]*$")
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 UppercaseRegexp = re.compile(r"[_A-Z][_A-Z0-9]*$")
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 CamelcaseRegexp = re.compile(r"_?[A-Z][a-zA-Z0-9]*$")
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 MixedcaseRegexp = re.compile(r"_?[a-z][a-zA-Z0-9]*$")
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 Codes = [
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 "N801", "N802", "N803", "N804", "N805", "N806", "N807", "N808",
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 "N811", "N812", "N813", "N814", "N821", "N831"
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 ]
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29
2913
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
30 def __init__(self, tree, filename, options):
2896
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 """
2913
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
32 Constructor (according to 'extended' pep8.py API)
2896
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 @param tree AST tree of the source file
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 @param filename name of the source file (string)
2913
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
36 @param options options as parsed by pep8.StyleGuide
2896
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 self.__parents = collections.deque()
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 self.__tree = tree
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 self.__filename = filename
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41
2913
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
42 self.__checkersWithCodes = {
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
43 "classdef": [
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
44 (self.__checkClassName, ("N801",)),
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
45 (self.__checkNameToBeAvoided, ("N831",)),
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
46 ],
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
47 "functiondef": [
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
48 (self.__checkFuntionName, ("N802",)),
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
49 (self.__checkFunctionArgumentNames,
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
50 ("N803", "N804", "N805", "N806")),
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
51 (self.__checkNameToBeAvoided, ("N831",)),
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
52 ],
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
53 "assign": [
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
54 (self.__checkVariablesInFunction, ("N821",)),
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
55 (self.__checkNameToBeAvoided, ("N831",)),
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
56 ],
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
57 "importfrom": [
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
58 (self.__checkImportAs, ("N811", "N812", "N813", "N814")),
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
59 ],
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
60 "module": [
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
61 (self.__checkModule, ("N807", "N808")),
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
62 ],
2896
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 }
2913
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
64
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
65 self.__checkers = {}
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
66 for key, checkers in self.__checkersWithCodes.items():
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
67 for checker, codes in checkers:
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
68 if any(not (code and options.ignore_code(code))
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
69 for code in codes):
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
70 if key not in self.__checkers:
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
71 self.__checkers[key] = []
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
72 self.__checkers[key].append(checker)
2896
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 def run(self):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 Public method run by the pep8.py checker.
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 @return tuple giving line number, offset within line, code and
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 checker function
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 if self.__tree:
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 return self.__visitTree(self.__tree)
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 else:
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 return ()
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 def __visitTree(self, node):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 Private method to scan the given AST tree.
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 @param node AST tree node to scan
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 @return tuple giving line number, offset within line, code and
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 checker function
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 for error in self.__visitNode(node):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 yield error
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 self.__parents.append(node)
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 for child in ast.iter_child_nodes(node):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 for error in self.__visitTree(child):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 yield error
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 self.__parents.pop()
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 def __visitNode(self, node):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 Private method to inspect the given AST node.
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 @param node AST tree node to inspect
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 @return tuple giving line number, offset within line, code and
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 checker function
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 if isinstance(node, ast.ClassDef):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 self.__tagClassFunctions(node)
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 elif isinstance(node, ast.FunctionDef):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 self.__findGlobalDefs(node)
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 checkerName = node.__class__.__name__.lower()
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 if checkerName in self.__checkers:
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 for checker in self.__checkers[checkerName]:
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 for error in checker(node, self.__parents):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 yield error + (self.__checkers[checkerName],)
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 def __tagClassFunctions(self, classNode):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 Private method to tag functions if they are methods, class methods or
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 static methods.
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 @param classNode AST tree node to tag
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 # try to find all 'old style decorators' like
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 # m = staticmethod(m)
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 lateDecoration = {}
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 for node in ast.iter_child_nodes(classNode):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 if not (isinstance(node, ast.Assign) and
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 isinstance(node.value, ast.Call) and
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 isinstance(node.value.func, ast.Name)):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 continue
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 funcName = node.value.func.id
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 if funcName in ("classmethod", "staticmethod"):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 meth = (len(node.value.args) == 1 and node.value.args[0])
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 if isinstance(meth, ast.Name):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 lateDecoration[meth.id] = funcName
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 # iterate over all functions and tag them
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 for node in ast.iter_child_nodes(classNode):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 if not isinstance(node, ast.FunctionDef):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 continue
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 node.function_type = 'method'
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 if node.name == "__new__":
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 node.function_type = "classmethod"
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 if node.name in lateDecoration:
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 node.function_type = lateDecoration[node.name]
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 elif node.decorator_list:
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 names = [d.id for d in node.decorator_list
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 if isinstance(d, ast.Name) and
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 d.id in ("classmethod", "staticmethod")]
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 if names:
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 node.function_type = names[0]
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 def __findGlobalDefs(self, functionNode):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 Private method amend a node with global definitions information.
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 @param functionNode AST tree node to amend
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 globalNames = set()
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 nodesToCheck = collections.deque(ast.iter_child_nodes(functionNode))
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 while nodesToCheck:
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 node = nodesToCheck.pop()
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 if isinstance(node, ast.Global):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 globalNames.update(node.names)
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 if not isinstance(node, (ast.FunctionDef, ast.ClassDef)):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 nodesToCheck.extend(ast.iter_child_nodes(node))
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 functionNode.global_names = globalNames
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 def __getArgNames(self, node):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 Private method to get the argument names of a function node.
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 @param node AST node to extract arguments names from
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 @return list of argument names (list of string)
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 def unpackArgs(args):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 Local helper function to unpack function argument names.
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 @param args list of AST node arguments
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 @return list of argument names (list of string)
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 ret = []
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 for arg in args:
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 if isinstance(arg, ast.Tuple):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 ret.extend(unpackArgs(arg.elts))
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 else:
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 ret.append(arg.id)
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 return ret
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 return unpackArgs(node.args.args)
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 def __error(self, node, code):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 """
2965
d133c7edd88a Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2913
diff changeset
203 Private method to build the error information.
2896
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 @param node AST node to report an error for
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 @param code error code to report (string)
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 @return tuple giving line number, offset within line and error code
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 (integer, integer, string)
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 if isinstance(node, ast.Module):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 lineno = 0
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 offset = 0
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 else:
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 lineno = node.lineno
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 offset = node.col_offset
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 if isinstance(node, ast.ClassDef):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 lineno += len(node.decorator_list)
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 offset += 6
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 elif isinstance(node, ast.FunctionDef):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 lineno += len(node.decorator_list)
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 offset += 4
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 return (lineno, offset, code)
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 def __isNameToBeAvoided(self, name):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 Private method to check, if the given name should be avoided.
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 @param name name to be checked (string)
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 @return flag indicating to avoid it (boolen)
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 return name in ("l", "O", "I")
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232
2913
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
233 def __checkNameToBeAvoided(self, node, parents):
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
234 """
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
235 Private class to check the given node for a name to be avoided (N831).
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
236
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
237 @param node AST note to check
2965
d133c7edd88a Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2913
diff changeset
238 @param parents list of parent nodes
2913
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
239 @return tuple giving line number, offset within line and error code
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
240 (integer, integer, string)
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
241 """
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
242 if isinstance(node, (ast.ClassDef, ast.FunctionDef)):
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
243 name = node.name
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
244 if self.__isNameToBeAvoided(name):
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
245 yield self.__error(node, "N831")
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
246 return
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
247
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
248 if isinstance(node, ast.FunctionDef):
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
249 argNames = self.__getArgNames(node)
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
250 for arg in argNames:
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
251 if self.__isNameToBeAvoided(arg):
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
252 yield self.__error(node, "N831")
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
253 return
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
254
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
255 if isinstance(node, ast.Assign):
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
256 for target in node.targets:
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
257 name = isinstance(target, ast.Name) and target.id
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
258 if not name:
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
259 return
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
260
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
261 if self.__isNameToBeAvoided(name):
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
262 yield self.__error(node, "N831")
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
263 return
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
264
2896
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 def __checkClassName(self, node, parents):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 Private class to check the given node for class name
2913
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
268 conventions (N801).
2896
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 Almost without exception, class names use the CapWords convention.
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 Classes for internal use have a leading underscore in addition.
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 @param node AST note to check
2965
d133c7edd88a Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2913
diff changeset
274 @param parents list of parent nodes
2896
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 @return tuple giving line number, offset within line and error code
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 (integer, integer, string)
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 if not self.CamelcaseRegexp.match(node.name):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 yield self.__error(node, "N801")
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 def __checkFuntionName(self, node, parents):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 Private class to check the given node for function name
2913
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
284 conventions (N802).
2896
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 Function names should be lowercase, with words separated by underscores
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 as necessary to improve readability. Functions <b>not</b> being
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 methods '__' in front and back are not allowed. Mixed case is allowed
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 only in contexts where that's already the prevailing style
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 (e.g. threading.py), to retain backwards compatibility.
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 @param node AST note to check
2965
d133c7edd88a Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2913
diff changeset
293 @param parents list of parent nodes
2896
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 @return tuple giving line number, offset within line and error code
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 (integer, integer, string)
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 functionType = getattr(node, "function_type", "function")
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 name = node.name
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 if (functionType == "function" and "__" in (name[:2], name[-2:])) or \
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 not self.LowercaseRegex.match(name):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 yield self.__error(node, "N802")
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 def __checkFunctionArgumentNames(self, node, parents):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 Private class to check the argument names of functions
2913
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
306 (N803, N804, N805, N806).
2896
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 The argument names of a function should be lowercase, with words
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309 separated by underscores. A class method should have 'cls' as the
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 first argument. A method should have 'self' as the first argument.
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312 @param node AST note to check
2965
d133c7edd88a Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2913
diff changeset
313 @param parents list of parent nodes
2896
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 @return tuple giving line number, offset within line and error code
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 (integer, integer, string)
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 if node.args.kwarg is not None:
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 if not self.LowercaseRegex.match(node.args.kwarg):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 yield self.__error(node, "N803")
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 return
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 if node.args.vararg is not None:
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 if not self.LowercaseRegex.match(node.args.vararg):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 yield self.__error(node, "N803")
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 return
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 argNames = self.__getArgNames(node)
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 functionType = getattr(node, "function_type", "function")
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330 if not argNames:
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 if functionType == "method":
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 yield self.__error(node, "N805")
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 elif functionType == "classmethod":
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334 yield self.__error(node, "N804")
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 return
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 if functionType == "method":
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 if argNames[0] != "self":
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 yield self.__error(node, "N805")
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 elif functionType == "classmethod":
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 if argNames[0] != "cls":
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 yield self.__error(node, "N804")
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 elif functionType == "staticmethod":
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344 if argNames[0] in ("cls", "self"):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 yield self.__error(node, "N806")
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 for arg in argNames:
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 if not self.LowercaseRegex.match(arg):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 yield self.__error(node, "N803")
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 return
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 def __checkVariablesInFunction(self, node, parents):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 """
2913
4e395efc0ef9 Optimized the PEP-8 naming checker (Python2 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2896
diff changeset
353 Private method to check local variables in functions (N821).
2896
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
354
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
355 Local variables in functions should be lowercase.
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
357 @param node AST note to check
2965
d133c7edd88a Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2913
diff changeset
358 @param parents list of parent nodes
2896
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
359 @return tuple giving line number, offset within line and error code
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360 (integer, integer, string)
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362 for parentFunc in reversed(parents):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
363 if isinstance(parentFunc, ast.ClassDef):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364 return
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
365 if isinstance(parentFunc, ast.FunctionDef):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
366 break
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
367 else:
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368 return
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
369 for target in node.targets:
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
370 name = isinstance(target, ast.Name) and target.id
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
371 if not name or name in parentFunc.global_names:
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
372 return
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
373
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
374 if not self.LowercaseRegex.match(name) and name[:1] != '_':
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
375 yield self.__error(target, "N821")
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
376
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
377 def __checkModule(self, node, parents):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
378 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379 Private method to check module naming conventions (N807, N808).
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
381 Module and package names should be lowercase.
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
382
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
383 @param node AST note to check
2965
d133c7edd88a Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2913
diff changeset
384 @param parents list of parent nodes
2896
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
385 @return tuple giving line number, offset within line and error code
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
386 (integer, integer, string)
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
387 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
388 if self.__filename:
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
389 moduleName = os.path.splitext(os.path.basename(self.__filename))[0]
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
390 if moduleName.lower() != moduleName:
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
391 yield self.__error(node, "N807")
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
392
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
393 if moduleName == "__init__":
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
394 # we got a package
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
395 packageName = \
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
396 os.path.split(os.path.dirname(self.__filename))[1]
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
397 if packageName.lower != packageName:
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
398 yield self.__error(node, "N808")
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
399
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
400 def __checkImportAs(self, node, parents):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
401 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
402 Private method to check that imports don't change the
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
403 naming convention (N811, N812, N813, N814).
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
404
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
405 @param node AST note to check
2965
d133c7edd88a Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 2913
diff changeset
406 @param parents list of parent nodes
2896
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
407 @return tuple giving line number, offset within line and error code
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
408 (integer, integer, string)
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
409 """
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
410 for name in node.names:
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
411 if not name.asname:
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
412 continue
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
413
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
414 if self.UppercaseRegexp.match(name.name):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
415 if not self.UppercaseRegexp.match(name.asname):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
416 yield self.__error(node, "N811")
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
417 elif self.LowercaseRegex.match(name.name):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
418 if not self.LowercaseRegex.match(name.asname):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
419 yield self.__error(node, "N812")
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
420 elif self.LowercaseRegex.match(name.asname):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
421 yield self.__error(node, "N813")
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
422 elif self.UppercaseRegexp.match(name.asname):
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
423 yield self.__error(node, "N814")
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
424
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
425 #
9fa71ee50b3d Finished the pEP-8 naming checker implementation by doing the Py2 variant.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
426 # eflag: FileType = Python2

eric ide

mercurial