File: ScopeChecks.py

package info (click to toggle)
pychecker 0.8.17-3
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 1,856 kB
  • ctags: 1,896
  • sloc: python: 9,301; sh: 131; makefile: 44
file content (28 lines) | stat: -rw-r--r-- 1,172 bytes parent folder | download | duplicates (13)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

from pychecker2.Check import Check
from pychecker2.Warning import Warning
from pychecker2 import util

from compiler.ast import *

class RedefineCheck(Check):
    redefinedScope = Warning('Report redefined scopes',
                             'Scope (%s) is redefined at line %d')

    def check(self, file, unused_checker):
        names = {}                      # map name, parent to this scope
        for node, scope in file.scopes.items():
            if hasattr(node, 'name'):	# classes, functions
                key = (scope.parent, node.name)
                if names.has_key(key):
                    # oops, another scope has the same name and parent
                    first = node
                    second = names[key]
                    # but don't warn if the parent node is the same If or Try
                    if util.try_if_exclusive(first, second):
                        continue
                    if first.lineno > second.lineno:
                        second, first = first, second
                    file.warning(first, self.redefinedScope,
                                 first.name, second.lineno)
                names[key] = node