You can subscribe to this list here.
2002 |
Jan
|
Feb
(5) |
Mar
(352) |
Apr
(154) |
May
(14) |
Jun
(29) |
Jul
(9) |
Aug
(11) |
Sep
(60) |
Oct
(3) |
Nov
|
Dec
(27) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(17) |
Feb
(11) |
Mar
(1) |
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(22) |
Dec
(1) |
2004 |
Jan
|
Feb
|
Mar
(21) |
Apr
|
May
(8) |
Jun
(22) |
Jul
(8) |
Aug
|
Sep
|
Oct
(1) |
Nov
(4) |
Dec
(12) |
2005 |
Jan
|
Feb
(6) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(17) |
Sep
(32) |
Oct
(22) |
Nov
(15) |
Dec
|
2006 |
Jan
(5) |
Feb
(8) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(8) |
Oct
(1) |
Nov
(6) |
Dec
|
2007 |
Jan
|
Feb
|
Mar
|
Apr
(14) |
May
(4) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(3) |
Nov
|
Dec
|
2008 |
Jan
|
Feb
(2) |
Mar
|
Apr
|
May
|
Jun
(12) |
Jul
(70) |
Aug
(2) |
Sep
|
Oct
|
Nov
(7) |
Dec
|
2009 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(71) |
Jul
(1) |
Aug
|
Sep
(28) |
Oct
(8) |
Nov
|
Dec
|
2010 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(83) |
2011 |
Jan
(192) |
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
2014 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2016 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
From: Thomas V. S. <tho...@us...> - 2011-01-09 22:40:45
|
Update of /cvsroot/pychecker/pychecker/test/input In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv20539/test/input Modified Files: unused_import.py Log Message: * test/input/unused_import.py: Add an import and a function argument shadowing that name. This used to fail up to pychecker 0.8.19, but now correctly triggers * test/expected/unused_import: * test/test_internal.py: Adjust assertions and expected output. Index: unused_import.py =================================================================== RCS file: /cvsroot/pychecker/pychecker/test/input/unused_import.py,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- unused_import.py 9 Jan 2011 17:19:44 -0000 1.2 +++ unused_import.py 9 Jan 2011 22:40:35 -0000 1.3 @@ -6,3 +6,8 @@ from os import path import xml.sax as sax + +from unittest import case + +def do(case=None): # older pycheckers treated case as used + print case |
From: Thomas V. S. <tho...@us...> - 2011-01-09 22:40:45
|
Update of /cvsroot/pychecker/pychecker In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv20539 Modified Files: ChangeLog Log Message: * test/input/unused_import.py: Add an import and a function argument shadowing that name. This used to fail up to pychecker 0.8.19, but now correctly triggers * test/expected/unused_import: * test/test_internal.py: Adjust assertions and expected output. Index: ChangeLog =================================================================== RCS file: /cvsroot/pychecker/pychecker/ChangeLog,v retrieving revision 1.126 retrieving revision 1.127 diff -u -d -r1.126 -r1.127 --- ChangeLog 9 Jan 2011 20:00:42 -0000 1.126 +++ ChangeLog 9 Jan 2011 22:40:35 -0000 1.127 @@ -1,5 +1,15 @@ 2011-01-09 Thomas Vander Stichele <thomas at apestaart dot org> + * test/input/unused_import.py: + Add an import and a function argument shadowing that name. + This used to fail up to pychecker 0.8.19, but now correctly + triggers + * test/expected/unused_import: + * test/test_internal.py: + Adjust assertions and expected output. + +2011-01-09 Thomas Vander Stichele <thomas at apestaart dot org> + * test/test_internal.py: I'm sorry, I meant pre-2.6 |
From: Thomas V. S. <tho...@us...> - 2011-01-09 22:40:45
|
Update of /cvsroot/pychecker/pychecker/test In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv20539/test Modified Files: test_internal.py Log Message: * test/input/unused_import.py: Add an import and a function argument shadowing that name. This used to fail up to pychecker 0.8.19, but now correctly triggers * test/expected/unused_import: * test/test_internal.py: Adjust assertions and expected output. Index: test_internal.py =================================================================== RCS file: /cvsroot/pychecker/pychecker/test/test_internal.py,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- test_internal.py 9 Jan 2011 20:00:42 -0000 1.6 +++ test_internal.py 9 Jan 2011 22:40:35 -0000 1.7 @@ -39,7 +39,7 @@ def test_unused_import(self): warnings = self.check(['input/unused_import.py', ]) - self.assertEquals(len(warnings), 3) + self.assertEquals(len(warnings), 4) # check the module and the code pcmodule = pcmodules.getPCModule("unused_import", moduleDir="input") @@ -51,10 +51,10 @@ else: self.assertEquals(pcmodule.variables.keys(), []) self.assertEquals(pcmodule.classes, {}) - self.assertEquals(pcmodule.functions, {}) + self.assertEquals(pcmodule.functions.keys(), ["do"]) # check the code - self.assertEquals(len(pcmodule.codes), 1) + self.assertEquals(len(pcmodule.codes), 2) main = pcmodule.codes[0] # all triggered warnings were import warnings @@ -65,15 +65,19 @@ modules = pcmodule.modules.keys() modules.sort() - self.assertEquals(modules, ["path", "sax", "sys"]) + self.assertEquals(modules, ["case", "path", "sax", "sys"]) self.assertEquals(pcmodule.moduleLineNums, { - 'sys': ('input/unused_import.py', 4), - 'path': ('input/unused_import.py', 6), - ('os', 'path'): ('input/unused_import.py', 6), - ('os',): ('input/unused_import.py', 6), - 'sax': ('input/unused_import.py', 8), - 'xml.sax': ('input/unused_import.py', 8), + 'case': ('input/unused_import.py', 10), + 'do': ('input/unused_import.py', 12), + 'sys': ('input/unused_import.py', 4), + 'path': ('input/unused_import.py', 6), + ('os', 'path'): ('input/unused_import.py', 6), + ('os',): ('input/unused_import.py', 6), + 'sax': ('input/unused_import.py', 8), + 'xml.sax': ('input/unused_import.py', 8), + ('unittest', ): ('input/unused_import.py', 10), + ('unittest', 'case'): ('input/unused_import.py', 10), }) if __name__ == '__main__': |
From: Thomas V. S. <tho...@us...> - 2011-01-09 20:00:50
|
Update of /cvsroot/pychecker/pychecker In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv10219 Modified Files: ChangeLog Log Message: * test/test_internal.py: I'm sorry, I meant pre-2.6 Index: ChangeLog =================================================================== RCS file: /cvsroot/pychecker/pychecker/ChangeLog,v retrieving revision 1.125 retrieving revision 1.126 diff -u -d -r1.125 -r1.126 --- ChangeLog 9 Jan 2011 19:58:12 -0000 1.125 +++ ChangeLog 9 Jan 2011 20:00:42 -0000 1.126 @@ -1,6 +1,11 @@ 2011-01-09 Thomas Vander Stichele <thomas at apestaart dot org> * test/test_internal.py: + I'm sorry, I meant pre-2.6 + +2011-01-09 Thomas Vander Stichele <thomas at apestaart dot org> + + * test/test_internal.py: Pre-2.5 __package__ is not a module variable. 2011-01-09 Thomas Vander Stichele <thomas at apestaart dot org> |
From: Thomas V. S. <tho...@us...> - 2011-01-09 20:00:50
|
Update of /cvsroot/pychecker/pychecker/test In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv10219/test Modified Files: test_internal.py Log Message: * test/test_internal.py: I'm sorry, I meant pre-2.6 Index: test_internal.py =================================================================== RCS file: /cvsroot/pychecker/pychecker/test/test_internal.py,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- test_internal.py 9 Jan 2011 19:58:12 -0000 1.5 +++ test_internal.py 9 Jan 2011 20:00:42 -0000 1.6 @@ -46,7 +46,7 @@ self.assertEquals(pcmodule.moduleName, "unused_import") self.assertEquals(pcmodule.moduleDir, "input") - if utils.pythonVersion() >= utils.PYTHON_2_5: + if utils.pythonVersion() >= utils.PYTHON_2_6: self.assertEquals(pcmodule.variables.keys(), ["__package__"]) else: self.assertEquals(pcmodule.variables.keys(), []) |
From: Thomas V. S. <tho...@us...> - 2011-01-09 19:58:24
|
Update of /cvsroot/pychecker/pychecker/test In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv9396/test Modified Files: test_internal.py Log Message: * test/test_internal.py: Pre-2.5 __package__ is not a module variable. Index: test_internal.py =================================================================== RCS file: /cvsroot/pychecker/pychecker/test/test_internal.py,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- test_internal.py 9 Jan 2011 19:38:33 -0000 1.4 +++ test_internal.py 9 Jan 2011 19:58:12 -0000 1.5 @@ -11,6 +11,7 @@ from pychecker import pcmodules from pychecker import Config +from pychecker import utils class InternalTestCase(common.TestCase): def setUp(self): @@ -45,7 +46,10 @@ self.assertEquals(pcmodule.moduleName, "unused_import") self.assertEquals(pcmodule.moduleDir, "input") - self.assertEquals(pcmodule.variables.keys(), ["__package__"]) + if utils.pythonVersion() >= utils.PYTHON_2_5: + self.assertEquals(pcmodule.variables.keys(), ["__package__"]) + else: + self.assertEquals(pcmodule.variables.keys(), []) self.assertEquals(pcmodule.classes, {}) self.assertEquals(pcmodule.functions, {}) |
From: Thomas V. S. <tho...@us...> - 2011-01-09 19:58:24
|
Update of /cvsroot/pychecker/pychecker In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv9396 Modified Files: ChangeLog Log Message: * test/test_internal.py: Pre-2.5 __package__ is not a module variable. Index: ChangeLog =================================================================== RCS file: /cvsroot/pychecker/pychecker/ChangeLog,v retrieving revision 1.124 retrieving revision 1.125 diff -u -d -r1.124 -r1.125 --- ChangeLog 9 Jan 2011 19:46:22 -0000 1.124 +++ ChangeLog 9 Jan 2011 19:58:12 -0000 1.125 @@ -1,5 +1,10 @@ 2011-01-09 Thomas Vander Stichele <thomas at apestaart dot org> + * test/test_internal.py: + Pre-2.5 __package__ is not a module variable. + +2011-01-09 Thomas Vander Stichele <thomas at apestaart dot org> + * pychecker/pcmodules.py: Don't complain about not finding real modules when they start with underscore - they probably do not want to be found. |
From: Thomas V. S. <tho...@us...> - 2011-01-09 19:46:33
|
Update of /cvsroot/pychecker/pychecker In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv7501 Modified Files: ChangeLog Log Message: * pychecker/pcmodules.py: Don't complain about not finding real modules when they start with underscore - they probably do not want to be found. * test/expected/test_zope_interface_q: Adjust output. Index: ChangeLog =================================================================== RCS file: /cvsroot/pychecker/pychecker/ChangeLog,v retrieving revision 1.123 retrieving revision 1.124 diff -u -d -r1.123 -r1.124 --- ChangeLog 9 Jan 2011 19:38:33 -0000 1.123 +++ ChangeLog 9 Jan 2011 19:46:22 -0000 1.124 @@ -1,5 +1,13 @@ 2011-01-09 Thomas Vander Stichele <thomas at apestaart dot org> + * pychecker/pcmodules.py: + Don't complain about not finding real modules when they start + with underscore - they probably do not want to be found. + * test/expected/test_zope_interface_q: + Adjust output. + +2011-01-09 Thomas Vander Stichele <thomas at apestaart dot org> + * pychecker/checker.py: Allow passing a config to _check() and use it. * test/test_internal.py: |
From: Thomas V. S. <tho...@us...> - 2011-01-09 19:46:33
|
Update of /cvsroot/pychecker/pychecker/pychecker In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv7501/pychecker Modified Files: pcmodules.py Log Message: * pychecker/pcmodules.py: Don't complain about not finding real modules when they start with underscore - they probably do not want to be found. * test/expected/test_zope_interface_q: Adjust output. Index: pcmodules.py =================================================================== RCS file: /cvsroot/pychecker/pychecker/pychecker/pcmodules.py,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- pcmodules.py 9 Jan 2011 19:14:06 -0000 1.11 +++ pcmodules.py 9 Jan 2011 19:46:22 -0000 1.12 @@ -158,7 +158,8 @@ # and deleted it from sys.modules if not self.module and pcmodule.moduleDir is None: self.module = module - if modname not in utils.cfg().blacklist: + if modname not in utils.cfg().blacklist \ + and not modname.startswith('_'): sys.stderr.write("warning: couldn't find real module " "for class %s (module name: %s)\n" % (self.classObject, modname)) |
From: Thomas V. S. <tho...@us...> - 2011-01-09 19:46:33
|
Update of /cvsroot/pychecker/pychecker/test/expected In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv7501/test/expected Modified Files: test_zope_interface_q Log Message: * pychecker/pcmodules.py: Don't complain about not finding real modules when they start with underscore - they probably do not want to be found. * test/expected/test_zope_interface_q: Adjust output. Index: test_zope_interface_q =================================================================== RCS file: /cvsroot/pychecker/pychecker/test/expected/test_zope_interface_q,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- test_zope_interface_q 9 Jan 2011 17:19:43 -0000 1.2 +++ test_zope_interface_q 9 Jan 2011 19:46:22 -0000 1.3 @@ -1,15 +1,4 @@ Processing module test_zope_interface (input/test_zope_interface.py)... -warning: couldn't find real module for class <type '_interface_coptimizations.ClassProvidesBase'> (module name: _interface_coptimizations) -warning: couldn't find real module for class <type '_zope_interface_coptimizations.InterfaceBase'> (module name: _zope_interface_coptimizations) -warning: couldn't find real module for class <type '_zope_interface_coptimizations.LookupBase'> (module name: _zope_interface_coptimizations) -warning: couldn't find real module for class <type '_interface_coptimizations.ObjectSpecificationDescriptor'> (module name: _interface_coptimizations) -warning: couldn't find real module for class <type '_interface_coptimizations.SpecificationBase'> (module name: _interface_coptimizations) -warning: couldn't find real module for class <type '_zope_interface_coptimizations.VerifyingBase'> (module name: _zope_interface_coptimizations) -warning: couldn't find real module for class <type '_interface_coptimizations.ClassProvidesBase'> (module name: _interface_coptimizations) -warning: couldn't find real module for class <type '_interface_coptimizations.ObjectSpecificationDescriptor'> (module name: _interface_coptimizations) -warning: couldn't find real module for class <type '_interface_coptimizations.SpecificationBase'> (module name: _interface_coptimizations) -warning: couldn't find real module for class <type '_zope_interface_coptimizations.InterfaceBase'> (module name: _zope_interface_coptimizations) -warning: couldn't find real module for class <type '_interface_coptimizations.SpecificationBase'> (module name: _interface_coptimizations) Warnings... |
From: Thomas V. S. <tho...@us...> - 2011-01-09 19:38:44
|
Update of /cvsroot/pychecker/pychecker/test In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv5829/test Modified Files: test_internal.py Log Message: * pychecker/checker.py: Allow passing a config to _check() and use it. * test/test_internal.py: Ignore standard library. We don't care about xml.sax Index: test_internal.py =================================================================== RCS file: /cvsroot/pychecker/pychecker/test/test_internal.py,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- test_internal.py 9 Jan 2011 18:47:05 -0000 1.3 +++ test_internal.py 9 Jan 2011 19:38:33 -0000 1.4 @@ -10,6 +10,7 @@ import common from pychecker import pcmodules +from pychecker import Config class InternalTestCase(common.TestCase): def setUp(self): @@ -25,8 +26,11 @@ # starts fresh for each test def check(self, paths): + config = Config.Config() + config.ignoreStandardLibrary = 1 + from pychecker.checker import _check - warnings = _check(paths) + warnings = _check(paths, cfg=config) return warnings @@ -34,8 +38,7 @@ def test_unused_import(self): warnings = self.check(['input/unused_import.py', ]) - # FIXME: this should generate one more - self.assertEquals(len(warnings), 11) + self.assertEquals(len(warnings), 3) # check the module and the code pcmodule = pcmodules.getPCModule("unused_import", moduleDir="input") |
From: Thomas V. S. <tho...@us...> - 2011-01-09 19:38:44
|
Update of /cvsroot/pychecker/pychecker In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv5829 Modified Files: ChangeLog Log Message: * pychecker/checker.py: Allow passing a config to _check() and use it. * test/test_internal.py: Ignore standard library. We don't care about xml.sax Index: ChangeLog =================================================================== RCS file: /cvsroot/pychecker/pychecker/ChangeLog,v retrieving revision 1.122 retrieving revision 1.123 diff -u -d -r1.122 -r1.123 --- ChangeLog 9 Jan 2011 19:14:06 -0000 1.122 +++ ChangeLog 9 Jan 2011 19:38:33 -0000 1.123 @@ -1,5 +1,12 @@ 2011-01-09 Thomas Vander Stichele <thomas at apestaart dot org> + * pychecker/checker.py: + Allow passing a config to _check() and use it. + * test/test_internal.py: + Ignore standard library. We don't care about xml.sax + +2011-01-09 Thomas Vander Stichele <thomas at apestaart dot org> + * pychecker/CodeChecks.py: Report warning when from X import * imports symbols that get shadowed by later class definitions. |
From: Thomas V. S. <tho...@us...> - 2011-01-09 19:38:44
|
Update of /cvsroot/pychecker/pychecker/pychecker In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv5829/pychecker Modified Files: checker.py Log Message: * pychecker/checker.py: Allow passing a config to _check() and use it. * test/test_internal.py: Ignore standard library. We don't care about xml.sax Index: checker.py =================================================================== RCS file: /cvsroot/pychecker/pychecker/pychecker/checker.py,v retrieving revision 1.133 retrieving revision 1.134 diff -u -d -r1.133 -r1.134 --- checker.py 9 Jan 2011 14:25:59 -0000 1.133 +++ checker.py 9 Jan 2011 19:38:33 -0000 1.134 @@ -293,20 +293,20 @@ sys.stderr.write("Processing %s...\n" % name) # grooming this to be public API to use pychecker as a module -def _check(files, suppressions=None, printProcessing=False): +def _check(files, cfg=None, suppressions=None, printProcessing=False): utils.debug('main: Finding import warnings') - importWarnings = processFiles(files, _cfg, + importWarnings = processFiles(files, cfg, printProcessing and _print_processing or None) utils.debug('main: Found %d import warnings' % len(importWarnings)) fixupBuiltinModules() - if _cfg.printParse : + if cfg.printParse : for module in getAllModules() : printer.module(module) utils.debug('main: Finding warnings') # suppressions is a tuple of suppressions, suppressionRegexs dicts - warnings = warn.find(getAllModules(), _cfg, suppressions) + warnings = warn.find(getAllModules(), cfg, suppressions) utils.debug('main: Found %d warnings' % len(warnings)) return importWarnings + warnings @@ -352,7 +352,9 @@ # insert this here, so we find files in the local dir before std library sys.path.insert(0, '') - warnings = _check(files, suppressions=suppressions, printProcessing=True) + warnings = _check(files, + cfg=_cfg, + suppressions=suppressions, printProcessing=True) if not _cfg.quiet : print "\nWarnings...\n" if warnings: |
From: Thomas V. S. <tho...@us...> - 2011-01-09 19:14:17
|
Update of /cvsroot/pychecker/pychecker/pychecker In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv600/pychecker Modified Files: CodeChecks.py msgs.py pcmodules.py Log Message: * pychecker/CodeChecks.py: Report warning when from X import * imports symbols that get shadowed by later class definitions. In _BUILD_CLASS, looks to me like we should push the name on the stack, not the dict. * pychecker/msgs.py: Add the error message. * pychecker/pcmodules.py: Track where imports happen in imported instance variable. Add addImported method. * test_todo/import44.py (deleted): * test_todo/test44.py (deleted): * test_input/import44.py: * test_input/test44.py: * test_expected/test44: Since the code now gives a useful hint about what's wrong in this test (a class definition shadowing an import through *), put this test back in the test suite Index: CodeChecks.py =================================================================== RCS file: /cvsroot/pychecker/pychecker/pychecker/CodeChecks.py,v retrieving revision 1.218 retrieving revision 1.219 diff -u -d -r1.218 -r1.219 --- CodeChecks.py 9 Jan 2011 18:47:05 -0000 1.218 +++ CodeChecks.py 9 Jan 2011 19:14:06 -0000 1.219 @@ -76,6 +76,8 @@ if err: code.addWarning(err) +# FIXME: THOMAS: in test44, the func passed is wrong; it points to the +# Ccc.__init__ from test44 instead of the one from import44 def _checkFunctionArgs(code, func, objectReference, argCount, kwArgs, checkArgCount=1): """ @@ -636,6 +638,12 @@ # if fromModule: # assert isinstance(fromModule, pcmodules.PyCheckerModule) + if isinstance(fromWhere, pcmodules.PyCheckerModule) and operand == '*': + for name in fromWhere.getTokenNames(): + module.addImported(name, code.getLineNum(), fromWhere) + + # FIXME: direct names imported should be added too + # FIXME: this function should be refactored/cleaned up key = operand tmpOperand = tmpFromName = operand @@ -1813,7 +1821,17 @@ # Creates a new class object. TOS is the methods dictionary, TOS1 the tuple # of the names of the base classes, and TOS2 the class name. def _BUILD_CLASS(oparg, operand, codeSource, code) : - newValue = Stack.makeFuncReturnValue(code.stack[-1], types.ClassType) + nameItem = code.stack[-3] + newValue = Stack.makeFuncReturnValue(nameItem, types.ClassType) + + if codeSource.main and \ + nameItem.type is str and nameItem.data in codeSource.module.imported: + if cfg().shadows: + name = nameItem.data + line, pcmodule = codeSource.module.imported[name] + code.addWarning(msgs.CLASS_SHADOWS_IMPORT % ( + name, line, pcmodule.moduleName)) + code.popStackItems(3) code.pushStack(newValue) Index: pcmodules.py =================================================================== RCS file: /cvsroot/pychecker/pychecker/pychecker/pcmodules.py,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- pcmodules.py 9 Jan 2011 18:47:05 -0000 1.10 +++ pcmodules.py 9 Jan 2011 19:14:06 -0000 1.11 @@ -355,6 +355,8 @@ @type classes: dict of str -> L{Class} @ivar modules: dict of module alias -> module @type modules: dict of str -> L{PyCheckerModule} + @ivar imported: dict of name -> (import line, other module) + @type imported: dict of str -> (int, L{PyCheckerModule}) @ivar moduleLineNums: mapping of the module's nameds/operands to the filename and linenumber where they are created @type moduleLineNums: dict of str or tuple of str -> (str, int) @@ -387,6 +389,7 @@ self.functions = {} self.classes = {} self.modules = {} + self.imported = {} self.moduleLineNums = {} self.attributes = [ '__dict__' ] self.mainCode = None @@ -452,6 +455,18 @@ else : self.modules[alias] = module + def addImported(self, name, line, pcmodule): + """ + @param name: the name of the token being imported + @type name: str + @param line: the line number where the import happened + @type line: int + @param pcmodule: the module this name is being imported from + @type pcmodule: L{PyCheckerModule} + """ + assert name not in self.imported + self.imported[name] = (line, pcmodule) + def filename(self) : try : filename = self.module.__file__ @@ -590,6 +605,15 @@ return None + def getTokenNames(self): + """ + Looks up all names of tokens in this module's namespace. + + @rtype: list of str + """ + return self.variables.keys() + self.functions.keys() + \ + self.classes.keys() + self.modules.keys() + def getPCModule(moduleName, moduleDir=None): """ Index: msgs.py =================================================================== RCS file: /cvsroot/pychecker/pychecker/pychecker/msgs.py,v retrieving revision 1.61 retrieving revision 1.62 diff -u -d -r1.61 -r1.62 --- msgs.py 6 Jan 2011 19:53:10 -0000 1.61 +++ msgs.py 9 Jan 2011 19:14:06 -0000 1.62 @@ -86,6 +86,7 @@ LOCAL_SHADOWS_GLOBAL = Warning("Local variable (%s) shadows global defined on line %d") VARIABLE_SHADOWS_BUILTIN = Warning("(%s) shadows builtin") +CLASS_SHADOWS_IMPORT = Warning("Class (%s) shadows import on line %d from module (%s)") USING_METHOD_AS_ATTR = Warning("Using method (%s) as an attribute (not invoked)") OBJECT_HAS_NO_ATTR = Warning("Object (%s) has no attribute (%s)") METHOD_SIGNATURE_MISMATCH = Warning("Overridden method (%s) doesn't match signature in class (%s)") |
From: Thomas V. S. <tho...@us...> - 2011-01-09 19:14:17
|
Update of /cvsroot/pychecker/pychecker In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv600 Modified Files: ChangeLog Log Message: * pychecker/CodeChecks.py: Report warning when from X import * imports symbols that get shadowed by later class definitions. In _BUILD_CLASS, looks to me like we should push the name on the stack, not the dict. * pychecker/msgs.py: Add the error message. * pychecker/pcmodules.py: Track where imports happen in imported instance variable. Add addImported method. * test_todo/import44.py (deleted): * test_todo/test44.py (deleted): * test_input/import44.py: * test_input/test44.py: * test_expected/test44: Since the code now gives a useful hint about what's wrong in this test (a class definition shadowing an import through *), put this test back in the test suite Index: ChangeLog =================================================================== RCS file: /cvsroot/pychecker/pychecker/ChangeLog,v retrieving revision 1.121 retrieving revision 1.122 diff -u -d -r1.121 -r1.122 --- ChangeLog 9 Jan 2011 18:47:05 -0000 1.121 +++ ChangeLog 9 Jan 2011 19:14:06 -0000 1.122 @@ -1,6 +1,27 @@ 2011-01-09 Thomas Vander Stichele <thomas at apestaart dot org> * pychecker/CodeChecks.py: + Report warning when from X import * imports symbols that + get shadowed by later class definitions. + In _BUILD_CLASS, looks to me like we should push the name + on the stack, not the dict. + * pychecker/msgs.py: + Add the error message. + * pychecker/pcmodules.py: + Track where imports happen in imported instance variable. + Add addImported method. + * test_todo/import44.py (deleted): + * test_todo/test44.py (deleted): + * test_input/import44.py: + * test_input/test44.py: + * test_expected/test44: + Since the code now gives a useful hint about what's wrong in this + test (a class definition shadowing an import through *), put this + test back in the test suite + +2011-01-09 Thomas Vander Stichele <thomas at apestaart dot org> + + * pychecker/CodeChecks.py: Track the aliased name of a global reference, so we track path when we do from os import path * pychecker/pcmodules.py: |
From: Thomas V. S. <tho...@us...> - 2011-01-09 19:14:17
|
Update of /cvsroot/pychecker/pychecker/test_input In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv600/test_input Added Files: import44.py test44.py Log Message: * pychecker/CodeChecks.py: Report warning when from X import * imports symbols that get shadowed by later class definitions. In _BUILD_CLASS, looks to me like we should push the name on the stack, not the dict. * pychecker/msgs.py: Add the error message. * pychecker/pcmodules.py: Track where imports happen in imported instance variable. Add addImported method. * test_todo/import44.py (deleted): * test_todo/test44.py (deleted): * test_input/import44.py: * test_input/test44.py: * test_expected/test44: Since the code now gives a useful hint about what's wrong in this test (a class definition shadowing an import through *), put this test back in the test suite --- NEW FILE: import44.py --- 'd' class Ccc: 'd' def __init__(self, c): pass class Ddd: 'd' def __init__(self): self.ccc = Ccc(1) --- NEW FILE: test44.py --- 'd' from import44 import * class Ccc: 'd' def __init__(self): pass |
From: Thomas V. S. <tho...@us...> - 2011-01-09 19:14:17
|
Update of /cvsroot/pychecker/pychecker/test_expected In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv600/test_expected Modified Files: test44 Log Message: * pychecker/CodeChecks.py: Report warning when from X import * imports symbols that get shadowed by later class definitions. In _BUILD_CLASS, looks to me like we should push the name on the stack, not the dict. * pychecker/msgs.py: Add the error message. * pychecker/pcmodules.py: Track where imports happen in imported instance variable. Add addImported method. * test_todo/import44.py (deleted): * test_todo/test44.py (deleted): * test_input/import44.py: * test_input/test44.py: * test_expected/test44: Since the code now gives a useful hint about what's wrong in this test (a class definition shadowing an import through *), put this test back in the test suite Index: test44 =================================================================== RCS file: /cvsroot/pychecker/pychecker/test_expected/test44,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- test44 13 Jul 2008 19:53:36 -0000 1.2 +++ test44 9 Jan 2011 19:14:06 -0000 1.3 @@ -2,4 +2,6 @@ Warnings... -None +test_input/import44.py:11: Invalid arguments to (__init__), got 1, expected 0 + +test_input/test44.py:5: Class (Ccc) shadows import on line 3 from module (import44) |
From: Thomas V. S. <tho...@us...> - 2011-01-09 19:14:17
|
Update of /cvsroot/pychecker/pychecker/test_todo In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv600/test_todo Removed Files: import44.py test44.py Log Message: * pychecker/CodeChecks.py: Report warning when from X import * imports symbols that get shadowed by later class definitions. In _BUILD_CLASS, looks to me like we should push the name on the stack, not the dict. * pychecker/msgs.py: Add the error message. * pychecker/pcmodules.py: Track where imports happen in imported instance variable. Add addImported method. * test_todo/import44.py (deleted): * test_todo/test44.py (deleted): * test_input/import44.py: * test_input/test44.py: * test_expected/test44: Since the code now gives a useful hint about what's wrong in this test (a class definition shadowing an import through *), put this test back in the test suite --- import44.py DELETED --- --- test44.py DELETED --- |
From: Thomas V. S. <tho...@us...> - 2011-01-09 19:08:37
|
Update of /cvsroot/pychecker/pychecker/test/expected In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv31676/test/expected Modified Files: unused_import Log Message: of course we now report the alias Index: unused_import =================================================================== RCS file: /cvsroot/pychecker/pychecker/test/expected/unused_import,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- unused_import 9 Jan 2011 18:37:15 -0000 1.2 +++ unused_import 9 Jan 2011 19:08:28 -0000 1.3 @@ -4,4 +4,4 @@ input/unused_import.py:4: Imported module (sys) not used input/unused_import.py:6: Imported module (path) not used -input/unused_import.py:8: Imported module (xml.sax) not used +input/unused_import.py:8: Imported module (sax) not used |
From: Thomas V. S. <tho...@us...> - 2011-01-09 18:47:14
|
Update of /cvsroot/pychecker/pychecker In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv27989 Modified Files: ChangeLog Log Message: * pychecker/CodeChecks.py: Track the aliased name of a global reference, so we track path when we do from os import path * pychecker/pcmodules.py: Track aliases in Code.modules keys, instead of fully qualified names. Add a codes list member to Code, to analyze Code objects in unit tests for debugging. * pychecker/warn.py: Add to PyCheckerModule.codes. * test/test_internal.py: Replace the fully qualified module names with the aliases used in the code. * test/test_unused.py: With this change, we now catch the unused import of from os import path. Index: ChangeLog =================================================================== RCS file: /cvsroot/pychecker/pychecker/ChangeLog,v retrieving revision 1.120 retrieving revision 1.121 diff -u -d -r1.120 -r1.121 --- ChangeLog 9 Jan 2011 17:19:43 -0000 1.120 +++ ChangeLog 9 Jan 2011 18:47:05 -0000 1.121 @@ -1,6 +1,25 @@ 2011-01-09 Thomas Vander Stichele <thomas at apestaart dot org> * pychecker/CodeChecks.py: + Track the aliased name of a global reference, so we track + path when we do from os import path + * pychecker/pcmodules.py: + Track aliases in Code.modules keys, instead of fully qualified + names. + Add a codes list member to Code, to analyze Code objects in + unit tests for debugging. + * pychecker/warn.py: + Add to PyCheckerModule.codes. + * test/test_internal.py: + Replace the fully qualified module names with the aliases used in + the code. + * test/test_unused.py: + With this change, we now catch the unused import of + from os import path. + +2011-01-09 Thomas Vander Stichele <thomas at apestaart dot org> + + * pychecker/CodeChecks.py: Extract a method to handle deprecated modules being imported. Add a helper to get a pcmodule for a given name so we can put it on the stack. |
From: Thomas V. S. <tho...@us...> - 2011-01-09 18:47:14
|
Update of /cvsroot/pychecker/pychecker/test In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv27989/test Modified Files: test_internal.py test_unused.py Log Message: * pychecker/CodeChecks.py: Track the aliased name of a global reference, so we track path when we do from os import path * pychecker/pcmodules.py: Track aliases in Code.modules keys, instead of fully qualified names. Add a codes list member to Code, to analyze Code objects in unit tests for debugging. * pychecker/warn.py: Add to PyCheckerModule.codes. * test/test_internal.py: Replace the fully qualified module names with the aliases used in the code. * test/test_unused.py: With this change, we now catch the unused import of from os import path. Index: test_internal.py =================================================================== RCS file: /cvsroot/pychecker/pychecker/test/test_internal.py,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- test_internal.py 9 Jan 2011 17:19:43 -0000 1.2 +++ test_internal.py 9 Jan 2011 18:47:05 -0000 1.3 @@ -45,10 +45,20 @@ self.assertEquals(pcmodule.variables.keys(), ["__package__"]) self.assertEquals(pcmodule.classes, {}) self.assertEquals(pcmodule.functions, {}) - # FIXME: we did from os.path, but we get posixpath + + # check the code + self.assertEquals(len(pcmodule.codes), 1) + main = pcmodule.codes[0] + + # all triggered warnings were import warnings + self.failIf(main.warnings) + + # FIXME: should the stack not be empty after processing it all ? + # self.failIf(main.stack) + modules = pcmodule.modules.keys() modules.sort() - self.assertEquals(modules, ["posixpath", "sys", "xml.sax"]) + self.assertEquals(modules, ["path", "sax", "sys"]) self.assertEquals(pcmodule.moduleLineNums, { 'sys': ('input/unused_import.py', 4), @@ -59,6 +69,5 @@ 'xml.sax': ('input/unused_import.py', 8), }) - if __name__ == '__main__': unittest.main() Index: test_unused.py =================================================================== RCS file: /cvsroot/pychecker/pychecker/test/test_unused.py,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- test_unused.py 8 Jan 2011 21:15:02 -0000 1.1 +++ test_unused.py 9 Jan 2011 18:47:05 -0000 1.2 @@ -9,9 +9,6 @@ import common class UnusedImportTestCase(common.TestCase): - todo = "Pychecker should catch the unused from ... import" - ''' - ''' def test_unused_import(self): self.check('unused_import') |
From: Thomas V. S. <tho...@us...> - 2011-01-09 18:47:14
|
Update of /cvsroot/pychecker/pychecker/pychecker In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv27989/pychecker Modified Files: CodeChecks.py pcmodules.py warn.py Log Message: * pychecker/CodeChecks.py: Track the aliased name of a global reference, so we track path when we do from os import path * pychecker/pcmodules.py: Track aliases in Code.modules keys, instead of fully qualified names. Add a codes list member to Code, to analyze Code objects in unit tests for debugging. * pychecker/warn.py: Add to PyCheckerModule.codes. * test/test_internal.py: Replace the fully qualified module names with the aliases used in the code. * test/test_unused.py: With this change, we now catch the unused import of from os import path. Index: warn.py =================================================================== RCS file: /cvsroot/pychecker/pychecker/pychecker/warn.py,v retrieving revision 1.174 retrieving revision 1.175 diff -u -d -r1.174 -r1.175 --- warn.py 8 Jan 2011 21:40:11 -0000 1.174 +++ warn.py 9 Jan 2011 18:47:05 -0000 1.175 @@ -254,7 +254,7 @@ code.unusedLocals[key] = -1 codeSource = CodeChecks.CodeSource( module, func, classObject, main, in_class, code) - + module.codes.append(code) try : _checkCode(code, codeSource) Index: pcmodules.py =================================================================== RCS file: /cvsroot/pychecker/pychecker/pychecker/pcmodules.py,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- pcmodules.py 9 Jan 2011 17:19:43 -0000 1.9 +++ pcmodules.py 9 Jan 2011 18:47:05 -0000 1.10 @@ -353,7 +353,7 @@ @type functions: dict of str -> L{function.Function} @ivar classes: dict of class name -> class @type classes: dict of str -> L{Class} - @ivar modules: dict of fully qualified module name -> module + @ivar modules: dict of module alias -> module @type modules: dict of str -> L{PyCheckerModule} @ivar moduleLineNums: mapping of the module's nameds/operands to the filename and linenumber where they are created @@ -361,6 +361,9 @@ @type mainCode: L{function.Function} @ivar check: whether this module should be checked @type check: int (used as bool) + @ivar codes: a list of all code in this module; used for + testing + @type codes: list of L{CodeChecks.Code} """ def __init__(self, moduleName, check=1, moduleDir=None): @@ -392,6 +395,8 @@ # entries for modules with the same name but in different directories addPCModule(self) + self.codes = [] + def __str__(self): return self.moduleName @@ -432,18 +437,20 @@ if not c.ignoreAttrs : self.__addAttributes(c, c.classObject) - def addModule(self, name, moduleDir=None) : + def addModule(self, name, alias, moduleDir=None) : module = getPCModule(name, moduleDir) if module is None : - self.modules[name] = module = PyCheckerModule(name, 0) + # not yet loaded, so load + self.modules[alias] = module = PyCheckerModule(name, 0) if imp.is_builtin(name) == 0: module.load() else : + # FIXME: probably should be alias ? globalModule = globals().get(name) if globalModule : module.attributes.extend(dir(globalModule)) else : - self.modules[name] = module + self.modules[alias] = module def filename(self) : try : @@ -523,7 +530,7 @@ token = getattr(self.module, tokenName) if isinstance(token, types.ModuleType) : # get the real module name, tokenName could be an alias - self.addModule(token.__name__) + self.addModule(token.__name__, tokenName) elif isinstance(token, types.FunctionType) : self.addFunction(token) elif isinstance(token, types.ClassType) or \ Index: CodeChecks.py =================================================================== RCS file: /cvsroot/pychecker/pychecker/pychecker/CodeChecks.py,v retrieving revision 1.217 retrieving revision 1.218 diff -u -d -r1.217 -r1.218 --- CodeChecks.py 9 Jan 2011 17:19:43 -0000 1.217 +++ CodeChecks.py 9 Jan 2011 18:47:05 -0000 1.218 @@ -854,7 +854,6 @@ @type stackValue: {Stack.Item} @type attr: str """ - if not cfg().checkObjectAttrs: return @@ -979,7 +978,10 @@ self.codeObjects = {} self.codeOrder = [] - def init(self, func) : + def init(self, func): + """ + @type func: L{function.Function} + """ self.func = func self.func_code, self.bytes, self.index, self.maxCode, self.extended_arg = \ OP.initFuncCode(func.function) @@ -1204,6 +1206,7 @@ self.codeObjects[key] = code self.codeOrder.append(key) + class CodeSource: """ Holds source information about a code block (module, class, func, etc) @@ -1326,7 +1329,8 @@ varname = varname[len(codeSource.classObject.name)+1:] # make sure we remember each global ref to check for unused - code.globalRefs[_getGlobalName(varname, codeSource.func)] = varname + # FIXME: globalRefs is a dict where only key is used. + code.globalRefs[varname] = varname if not codeSource.in_class : _checkGlobal(varname, codeSource.module, codeSource.func, code, msgs.INVALID_GLOBAL) @@ -1335,6 +1339,8 @@ _checkLoadGlobal(codeSource, code, operand) # if there was from XXX import *, _* names aren't imported + # FIXME: this changes operand from handler to xml.sax.handler + # for from xml.sax import handler; see test12 if codeSource.module.modules.has_key(operand) and \ hasattr(codeSource.module.module, operand) : operand = getattr(codeSource.module.module, operand).__name__ |
From: Thomas V. S. <tho...@us...> - 2011-01-09 18:37:24
|
Update of /cvsroot/pychecker/pychecker/test/expected In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv26279/test/expected Modified Files: unused_import Log Message: add a line that should be there now that we added an import Index: unused_import =================================================================== RCS file: /cvsroot/pychecker/pychecker/test/expected/unused_import,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- unused_import 9 Jan 2011 14:27:55 -0000 1.1 +++ unused_import 9 Jan 2011 18:37:15 -0000 1.2 @@ -4,3 +4,4 @@ input/unused_import.py:4: Imported module (sys) not used input/unused_import.py:6: Imported module (path) not used +input/unused_import.py:8: Imported module (xml.sax) not used |
From: Thomas V. S. <tho...@us...> - 2011-01-09 17:19:58
|
Update of /cvsroot/pychecker/pychecker In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv8232 Modified Files: ChangeLog Log Message: * pychecker/CodeChecks.py: Extract a method to handle deprecated modules being imported. Add a helper to get a pcmodule for a given name so we can put it on the stack. Put the actual PyCheckerModule on the stack if we can find it. This will allow us to properly get attributes later on. * pychecker/pcmodules.py: Allow errors during import to go through, so we can detect when something is not really a module. * pychecker/Stack.py: Add a wishlist note. * test/expected/test_zope_interface_q: * test/test_stdlib.py: Doing more imports triggers these annoying warnings. Blacklist them later in the test. * test/input/unused_import.py: Add an import xml.sax as sax found in some test that caused problems while writing this patch. * test/test_internal.py: Adjust the expected output because of it. Index: ChangeLog =================================================================== RCS file: /cvsroot/pychecker/pychecker/ChangeLog,v retrieving revision 1.119 retrieving revision 1.120 diff -u -d -r1.119 -r1.120 --- ChangeLog 9 Jan 2011 14:22:27 -0000 1.119 +++ ChangeLog 9 Jan 2011 17:19:43 -0000 1.120 @@ -1,5 +1,28 @@ 2011-01-09 Thomas Vander Stichele <thomas at apestaart dot org> + * pychecker/CodeChecks.py: + Extract a method to handle deprecated modules being imported. + Add a helper to get a pcmodule for a given name so we can + put it on the stack. + Put the actual PyCheckerModule on the stack if we can find it. + This will allow us to properly get attributes later on. + * pychecker/pcmodules.py: + Allow errors during import to go through, so we can detect when + something is not really a module. + * pychecker/Stack.py: + Add a wishlist note. + * test/expected/test_zope_interface_q: + * test/test_stdlib.py: + Doing more imports triggers these annoying warnings. Blacklist them + later in the test. + * test/input/unused_import.py: + Add an import xml.sax as sax found in some test that caused problems + while writing this patch. + * test/test_internal.py: + Adjust the expected output because of it. + +2011-01-09 Thomas Vander Stichele <thomas at apestaart dot org> + * pychecker/checker.py: Extract a still-private _check method so we can also invoke pychecker as a function from other code. |
From: Thomas V. S. <tho...@us...> - 2011-01-09 17:19:57
|
Update of /cvsroot/pychecker/pychecker/test In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv8232/test Modified Files: test_stdlib.py test_internal.py Log Message: * pychecker/CodeChecks.py: Extract a method to handle deprecated modules being imported. Add a helper to get a pcmodule for a given name so we can put it on the stack. Put the actual PyCheckerModule on the stack if we can find it. This will allow us to properly get attributes later on. * pychecker/pcmodules.py: Allow errors during import to go through, so we can detect when something is not really a module. * pychecker/Stack.py: Add a wishlist note. * test/expected/test_zope_interface_q: * test/test_stdlib.py: Doing more imports triggers these annoying warnings. Blacklist them later in the test. * test/input/unused_import.py: Add an import xml.sax as sax found in some test that caused problems while writing this patch. * test/test_internal.py: Adjust the expected output because of it. Index: test_internal.py =================================================================== RCS file: /cvsroot/pychecker/pychecker/test/test_internal.py,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- test_internal.py 9 Jan 2011 14:22:28 -0000 1.1 +++ test_internal.py 9 Jan 2011 17:19:43 -0000 1.2 @@ -34,8 +34,8 @@ def test_unused_import(self): warnings = self.check(['input/unused_import.py', ]) - # FIXME: this should generate two of them - self.assertEquals(len(warnings), 1) + # FIXME: this should generate one more + self.assertEquals(len(warnings), 11) # check the module and the code pcmodule = pcmodules.getPCModule("unused_import", moduleDir="input") @@ -48,13 +48,15 @@ # FIXME: we did from os.path, but we get posixpath modules = pcmodule.modules.keys() modules.sort() - self.assertEquals(modules, ["posixpath", "sys"]) + self.assertEquals(modules, ["posixpath", "sys", "xml.sax"]) self.assertEquals(pcmodule.moduleLineNums, { 'sys': ('input/unused_import.py', 4), 'path': ('input/unused_import.py', 6), ('os', 'path'): ('input/unused_import.py', 6), - ('os',): ('input/unused_import.py', 6) + ('os',): ('input/unused_import.py', 6), + 'sax': ('input/unused_import.py', 8), + 'xml.sax': ('input/unused_import.py', 8), }) Index: test_stdlib.py =================================================================== RCS file: /cvsroot/pychecker/pychecker/test/test_stdlib.py,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- test_stdlib.py 27 Jun 2009 11:14:29 -0000 1.4 +++ test_stdlib.py 9 Jan 2011 17:19:43 -0000 1.5 @@ -20,6 +20,7 @@ self.skip = True # FIXME: interpret this return + # FIXME: add _interface_coptimizations to blacklist self.check('test_zope_interface', '-q') if __name__ == '__main__': |