Hello community, here is the log from the commit of package python3-pylint for openSUSE:Factory checked in at 2016-01-21 23:42:24 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python3-pylint (Old) and /work/SRC/openSUSE:Factory/.python3-pylint.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python3-pylint" Changes: -------- --- /work/SRC/openSUSE:Factory/python3-pylint/python3-pylint.changes 2015-12-23 08:50:40.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.python3-pylint.new/python3-pylint.changes 2016-01-22 01:07:00.000000000 +0100 @@ -1,0 +2,34 @@ +Wed Jan 13 10:15:52 UTC 2016 - toddrme2...@gmail.com + +- Update to version 1.5.3: + * Handle the import fallback idiom with regard to wrong-import-order. + Closes issue #750. + * Decouple the displaying of reports from the displaying of messages + Some reporters are aggregating the messages instead of displaying + them when they are available. The actual displaying was conflatted + in the generate_reports. Unfortunately this behaviour was flaky + and in the case of the JSON reporter, the messages weren't shown + at all if a file had syntax errors or if it was missing. + In order to fix this, the aggregated messages can now be + displayed with Reporter.display_message, while the reports are + displayed with display_reports. + Closes issues #766 and #765. + * Ignore function calls with variadic arguments without a context. + Inferring variadic positional arguments and keyword arguments + will result into empty Tuples and Dicts, which can lead in + some cases to false positives with regard to no-value-for-parameter. + In order to avoid this, until we'll have support for call context + propagation, we're ignoring such cases if detected. + Closes issue #722. + * Treat AsyncFunctionDef just like FunctionDef nodes, + by implementing visit_asyncfunctiondef in terms of + visit_functiondef. + Closes issue #767. + * Take in account kwonlyargs when verifying that arguments + are defined with the check_docs extension. + Closes issue #745. + * Suppress reporting 'unneeded-not' inside `__ne__` methods + Closes issue #749. +- Cleanup update-alternatives + +------------------------------------------------------------------- Old: ---- pylint-1.5.2.tar.gz New: ---- pylint-1.5.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python3-pylint.spec ++++++ --- /var/tmp/diff_new_pack.n7Ho4P/_old 2016-01-22 01:07:02.000000000 +0100 +++ /var/tmp/diff_new_pack.n7Ho4P/_new 2016-01-22 01:07:02.000000000 +0100 @@ -1,7 +1,7 @@ # # spec file for package python3-pylint # -# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,15 +17,15 @@ Name: python3-pylint -Version: 1.5.2 +Version: 1.5.3 Release: 0 Summary: Syntax and style checker for Python code License: GPL-2.0+ Group: Development/Languages/Python -Url: http://www.pylint.org/ +Url: https://github.com/pycqa/pylint Source: https://pypi.python.org/packages/source/p/pylint/pylint-%{version}.tar.gz -BuildRequires: python3-2to3 BuildRequires: python3-astroid +BuildRequires: python3-six BuildRequires: python3-tk Requires: python3-astroid Requires: python3-six @@ -58,58 +58,53 @@ python3 setup.py build %install -# build failes without --no-compile python3 setup.py install --prefix=%{_prefix} --root=%{buildroot} --no-compile + # fix non-executable rpmlint warning chmod +x %{buildroot}%{python3_sitelib}/pylint/epylint.py -# update-alternatives -mv %{buildroot}%{_bindir}/pylint %{buildroot}%{_bindir}/pylint-%{py3_ver} -mv %{buildroot}%{_bindir}/epylint %{buildroot}%{_bindir}/epylint-%{py3_ver} -mv %{buildroot}%{_bindir}/pylint-gui %{buildroot}%{_bindir}/pylint-gui-%{py3_ver} -mv %{buildroot}%{_bindir}/pyreverse %{buildroot}%{_bindir}/pyreverse-%{py3_ver} -mv %{buildroot}%{_bindir}/symilar %{buildroot}%{_bindir}/symilar-%{py3_ver} -ln -s %{_bindir}/pylint-%{py3_ver} %{buildroot}%{_bindir}/pylint -ln -s %{_bindir}/epylint-%{py3_ver} %{buildroot}%{_bindir}/epylint -ln -s %{_bindir}/pylint-gui-%{py3_ver} %{buildroot}%{_bindir}/pylint-gui -ln -s %{_bindir}/pyreverse-%{py3_ver} %{buildroot}%{_bindir}/pyreverse -ln -s %{_bindir}/symilar-%{py3_ver} %{buildroot}%{_bindir}/symilar - -%pre -# Since /usr/bin/pylint, etc. became ghosted to be used with update-alternatives, we have to get rid -# of the old binary resulting from the non-update-alternativies-ified package: -[ -h %{_bindir}/pylint ] || rm -f %{_bindir}/pylint -[ -h %{_bindir}/epylint ] || rm -f %{_bindir}/epylint -[ -h %{_bindir}/pylint-gui ] || rm -f %{_bindir}/pylint-gui -[ -h %{_bindir}/pyreverse ] || rm -f %{_bindir}/pyreverse -[ -h %{_bindir}/symilar ] || rm -f %{_bindir}/symilar + +# Prepare for update-alternatives usage +mkdir -p %{buildroot}%{_sysconfdir}/alternatives +for p in pylint epylint pylint-gui pyreverse symilar ; do + mv %{buildroot}%{_bindir}/$p %{buildroot}%{_bindir}/$p-%{py3_ver} + ln -s -f %{_sysconfdir}/alternatives/$p %{buildroot}%{_bindir}/$p + # create a dummy target for /etc/alternatives/$p + touch %{buildroot}%{_sysconfdir}/alternatives/$p +done %post -update-alternatives \ +%_sbindir/update-alternatives \ --install %{_bindir}/pylint pylint %{_bindir}/pylint-%{py3_ver} 30 \ --slave %{_bindir}/epylint epylint %{_bindir}/epylint-%{py3_ver} \ --slave %{_bindir}/pylint-gui pylint-gui %{_bindir}/pylint-gui-%{py3_ver} \ --slave %{_bindir}/pyreverse pyreverse %{_bindir}/pyreverse-%{py3_ver} \ --slave %{_bindir}/symilar symilar %{_bindir}/symilar-%{py3_ver} -%preun +%postun if [ $1 -eq 0 ] ; then - update-alternatives --remove pylint %{_bindir}/pylint-%{py3_ver} + %_sbindir/update-alternatives --remove pylint %{_bindir}/pylint-%{py3_ver} fi %files %defattr(-,root,root) -%doc ChangeLog COPYING README.rst examples/ +%doc ChangeLog COPYING README.rst +%doc examples/ +%{_bindir}/pylint +%{_bindir}/epylint +%{_bindir}/pylint-gui +%{_bindir}/pyreverse +%{_bindir}/symilar %{_bindir}/pylint-%{py3_ver} %{_bindir}/epylint-%{py3_ver} %{_bindir}/pylint-gui-%{py3_ver} %{_bindir}/pyreverse-%{py3_ver} %{_bindir}/symilar-%{py3_ver} -%ghost %{_bindir}/pylint -%ghost %{_bindir}/epylint -%ghost %{_bindir}/pylint-gui -%ghost %{_bindir}/pyreverse -%ghost %{_bindir}/symilar +%ghost %{_sysconfdir}/alternatives/pylint +%ghost %{_sysconfdir}/alternatives/epylint +%ghost %{_sysconfdir}/alternatives/pylint-gui +%ghost %{_sysconfdir}/alternatives/pyreverse +%ghost %{_sysconfdir}/alternatives/symilar %{python3_sitelib}/pylint/ -%{python3_sitelib}/pylint-%{version}-py%{py3_ver}.egg-info +%{python3_sitelib}/pylint-%{version}-py*.egg-info %changelog ++++++ pylint-1.5.2.tar.gz -> pylint-1.5.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/ChangeLog new/pylint-1.5.3/ChangeLog --- old/pylint-1.5.2/ChangeLog 2015-12-21 01:15:06.000000000 +0100 +++ new/pylint-1.5.3/ChangeLog 2016-01-11 10:51:49.000000000 +0100 @@ -1,8 +1,52 @@ ChangeLog for Pylint -------------------- -2015-12-21 +2016-01-11 -- 1.5.3 + * Handle the import fallback idiom with regard to wrong-import-order. + + Closes issue #750. + + * Decouple the displaying of reports from the displaying of messages + + Some reporters are aggregating the messages instead of displaying + them when they are available. The actual displaying was conflatted + in the generate_reports. Unfortunately this behaviour was flaky + and in the case of the JSON reporter, the messages weren't shown + at all if a file had syntax errors or if it was missing. + In order to fix this, the aggregated messages can now be + displayed with Reporter.display_message, while the reports are + displayed with display_reports. + + Closes issues #766 and #765. + + * Ignore function calls with variadic arguments without a context. + + Inferring variadic positional arguments and keyword arguments + will result into empty Tuples and Dicts, which can lead in + some cases to false positives with regard to no-value-for-parameter. + In order to avoid this, until we'll have support for call context + propagation, we're ignoring such cases if detected. + Closes issue #722. + + * Treat AsyncFunctionDef just like FunctionDef nodes, + by implementing visit_asyncfunctiondef in terms of + visit_functiondef. + + Closes issue #767. + + * Take in account kwonlyargs when verifying that arguments + are defined with the check_docs extension. + + Closes issue #745. + + * Suppress reporting 'unneeded-not' inside `__ne__` methods + + Closes issue #749. + + +2015-12-21 -- 1.5.2 + * Don't crash if graphviz is not installed, instead emit a warning letting the user to know. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/PKG-INFO new/pylint-1.5.3/PKG-INFO --- old/pylint-1.5.2/PKG-INFO 2015-12-21 01:21:43.000000000 +0100 +++ new/pylint-1.5.3/PKG-INFO 2016-01-11 11:07:57.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: pylint -Version: 1.5.2 +Version: 1.5.3 Summary: python code static checker Home-page: http://www.pylint.org Author: Logilab diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/doc/changelog.rst new/pylint-1.5.3/doc/changelog.rst --- old/pylint-1.5.2/doc/changelog.rst 2015-12-10 16:29:47.000000000 +0100 +++ new/pylint-1.5.3/doc/changelog.rst 2016-01-09 21:13:05.000000000 +0100 @@ -1,8 +1,6 @@ -Changes & Contributors -====================== +Change log +========== .. include:: ../ChangeLog - -.. include:: ../CONTRIBUTORS.txt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/man/pylint.1 new/pylint-1.5.3/man/pylint.1 --- old/pylint-1.5.2/man/pylint.1 2015-12-10 16:29:47.000000000 +0100 +++ new/pylint-1.5.3/man/pylint.1 2016-01-09 21:13:05.000000000 +0100 @@ -239,7 +239,7 @@ .IP "--max-module-lines=<int>" Maximum number of lines in a module [current: 1000] .IP "--indent-string=<string>" -String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 tab). [current: ' '] +String used as indentation unit. This is usually " " (4 spaces) or "\\t" (1 tab). [current: ' '] .IP "--indent-after-paren=<int>" Number of spaces of indent required inside a hanging or continued line. [current: 4] .IP "--expected-line-ending-format=<empty or LF or CRLF>" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/__pkginfo__.py new/pylint-1.5.3/pylint/__pkginfo__.py --- old/pylint-1.5.2/pylint/__pkginfo__.py 2015-12-21 01:14:49.000000000 +0100 +++ new/pylint-1.5.3/pylint/__pkginfo__.py 2016-01-11 10:51:17.000000000 +0100 @@ -23,11 +23,11 @@ modname = distname = 'pylint' -numversion = (1, 5, 2) +numversion = (1, 5, 3) version = '.'.join([str(num) for num in numversion]) install_requires = [ - 'astroid>=1.4.1', + 'astroid>=1.4.1,<1.5.0', 'six', ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/checkers/base.py new/pylint-1.5.3/pylint/checkers/base.py --- old/pylint-1.5.2/pylint/checkers/base.py 2015-12-20 14:33:00.000000000 +0100 +++ new/pylint-1.5.3/pylint/checkers/base.py 2016-01-09 21:13:05.000000000 +0100 @@ -419,6 +419,8 @@ else: args.add(name) + visit_asyncfunctiondef = visit_functiondef + def _check_nonlocal_and_global(self, node): """Check that a name is both nonlocal and global.""" def same_scope(current): @@ -777,7 +779,7 @@ # * a yield (which are wrapped by a discard node in _ast XXX) # warn W0106 if we have any underlying function call (we can't predict # side effects), else pointless-statement - if (isinstance(expr, (astroid.Yield, astroid.Call)) or + if (isinstance(expr, (astroid.Yield, astroid.Await, astroid.Call)) or (isinstance(node.parent, astroid.TryExcept) and node.parent.body == [node])): return @@ -871,6 +873,8 @@ self.stats[node.is_method() and 'method' or 'function'] += 1 self._check_dangerous_default(node) + visit_asyncfunctiondef = visit_functiondef + def _check_dangerous_default(self, node): # check for dangerous default values as arguments is_iterable = lambda n: isinstance(n, (astroid.List, @@ -1238,6 +1242,8 @@ if args is not None: self._recursive_check_names(args, node) + visit_asyncfunctiondef = visit_functiondef + @check_messages('blacklisted-name', 'invalid-name') def visit_global(self, node): for name in node.names: @@ -1389,6 +1395,8 @@ else: self._check_docstring(ftype, node) + visit_asyncfunctiondef = visit_functiondef + def _check_docstring(self, node_type, node, report_missing=True, confidence=HIGH): """check the node has a non empty docstring""" @@ -1860,6 +1868,7 @@ if node.op != 'not': return operand = node.operand + if isinstance(operand, astroid.UnaryOp) and operand.op == 'not': self.add_message('unneeded-not', node=node, args=(node.as_string(), @@ -1872,6 +1881,12 @@ operator, right = operand.ops[0] if operator not in self.reverse_op: return + + # Ignore __ne__ as function of __eq__ + frame = node.frame() + if frame.name == '__ne__' and operator == '==': + return + suggestion = '%s %s %s' % (left.as_string(), self.reverse_op[operator], right.as_string()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/checkers/classes.py new/pylint-1.5.3/pylint/checkers/classes.py --- old/pylint-1.5.2/pylint/checkers/classes.py 2015-12-10 16:29:47.000000000 +0100 +++ new/pylint-1.5.3/pylint/checkers/classes.py 2016-01-09 21:13:05.000000000 +0100 @@ -508,6 +508,8 @@ except astroid.NotFoundError: pass + visit_asyncfunctiondef = visit_functiondef + def _check_slots(self, node): if '__slots__' not in node.locals: return @@ -1015,6 +1017,8 @@ if node.name in PYMETHODS: self._check_unexpected_method_signature(node) + visit_asyncfunctiondef = visit_functiondef + def _check_unexpected_method_signature(self, node): expected_params = SPECIAL_METHODS_PARAMS[node.name] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/checkers/design_analysis.py new/pylint-1.5.3/pylint/checkers/design_analysis.py --- old/pylint-1.5.2/pylint/checkers/design_analysis.py 2015-12-10 16:29:47.000000000 +0100 +++ new/pylint-1.5.3/pylint/checkers/design_analysis.py 2016-01-09 21:13:05.000000000 +0100 @@ -254,6 +254,8 @@ # init statements counter self._stmts = 1 + visit_asyncfunctiondef = visit_functiondef + @check_messages('too-many-return-statements', 'too-many-branches', 'too-many-arguments', 'too-many-locals', 'too-many-statements') @@ -274,6 +276,8 @@ self.add_message('too-many-statements', node=node, args=(self._stmts, self.config.max_statements)) + leave_asyncfunctiondef = leave_functiondef + def visit_return(self, _): """count number of returns""" if not self._returns: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/checkers/imports.py new/pylint-1.5.3/pylint/checkers/imports.py --- old/pylint-1.5.2/pylint/checkers/imports.py 2015-12-21 00:56:43.000000000 +0100 +++ new/pylint-1.5.3/pylint/checkers/imports.py 2016-01-11 10:42:15.000000000 +0100 @@ -16,6 +16,7 @@ """imports checkers for Python code""" import collections +from distutils import sysconfig import os import sys @@ -23,7 +24,7 @@ import astroid from astroid import are_exclusive -from astroid.modutils import (EXT_LIB_DIR, get_module_part, is_standard_module, +from astroid.modutils import (get_module_part, is_standard_module, file_from_modpath) from pylint.interfaces import IAstroidChecker @@ -253,7 +254,6 @@ given file (report RP0402 must not be disabled)'} ), ) - ext_lib_dir = os.path.normcase(os.path.abspath(EXT_LIB_DIR)) def __init__(self, linter=None): BaseChecker.__init__(self, linter) @@ -268,6 +268,29 @@ self._report_dependencies_graph), ) + self._site_packages = self._compute_site_packages() + + @staticmethod + def _compute_site_packages(): + def _normalized_path(path): + return os.path.normcase(os.path.abspath(path)) + + paths = set() + real_prefix = getattr(sys, 'real_prefix', None) + for prefix in filter(None, (real_prefix, sys.prefix)): + path = sysconfig.get_python_lib(prefix=prefix) + path = _normalized_path(path) + paths.add(path) + + # Handle Debian's derivatives /usr/local. + if os.path.isfile("/etc/debian_version"): + for prefix in filter(None, (real_prefix, sys.prefix)): + libpython = os.path.join(prefix, "local", "lib", + "python" + sysconfig.get_python_version(), + "dist-packages") + paths.add(libpython) + return paths + def open(self): """called before visiting project (i.e set of modules)""" self.linter.add_stats(dependencies={}) @@ -429,6 +452,12 @@ importedname = node.names[0][0].split('.')[0] self._imports_stack.append((node, importedname)) + @staticmethod + def _is_fallback_import(node, imports): + imports = [import_node for (import_node, _) in imports] + return any(astroid.are_exclusive(import_node, node) + for import_node in imports) + def _check_imports_order(self, node): """Checks imports of module `node` are grouped by category @@ -437,11 +466,6 @@ extern_imports = [] local_imports = [] std_imports = [] - stdlib_paths = [sys.prefix, self.ext_lib_dir] - real_prefix = getattr(sys, 'real_prefix', None) - if real_prefix is not None: - stdlib_paths.append(real_prefix) - for node, modname in self._imports_stack: package = modname.split('.')[0] if is_standard_module(modname): @@ -449,6 +473,8 @@ wrong_import = extern_imports or local_imports if not wrong_import: continue + if self._is_fallback_import(node, wrong_import): + continue self.add_message('wrong-import-order', node=node, args=('standard import "%s"' % node.as_string(), '"%s"' % wrong_import[0][0].as_string())) @@ -456,13 +482,12 @@ try: filename = file_from_modpath([package]) except ImportError: - extern_imports.append((node, package)) continue if not filename: - extern_imports.append((node, package)) continue + filename = os.path.normcase(os.path.abspath(filename)) - if not any(filename.startswith(path) for path in stdlib_paths): + if not any(filename.startswith(path) for path in self._site_packages): local_imports.append((node, package)) continue extern_imports.append((node, package)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/checkers/newstyle.py new/pylint-1.5.3/pylint/checkers/newstyle.py --- old/pylint-1.5.2/pylint/checkers/newstyle.py 2015-12-16 16:25:28.000000000 +0100 +++ new/pylint-1.5.3/pylint/checkers/newstyle.py 2016-01-09 21:13:05.000000000 +0100 @@ -161,6 +161,8 @@ if name is not None: self.add_message('bad-super-call', node=call, args=(name, )) + visit_asyncfunctiondef = visit_functiondef + def register(linter): """required method to auto register this checker """ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/checkers/spelling.py new/pylint-1.5.3/pylint/checkers/spelling.py --- old/pylint-1.5.2/pylint/checkers/spelling.py 2015-12-10 16:29:47.000000000 +0100 +++ new/pylint-1.5.3/pylint/checkers/spelling.py 2016-01-09 21:13:05.000000000 +0100 @@ -239,6 +239,8 @@ return self._check_docstring(node) + visit_asyncfunctiondef = visit_functiondef + def _check_docstring(self, node): """check the node has any spelling errors""" docstring = node.doc diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/checkers/typecheck.py new/pylint-1.5.3/pylint/checkers/typecheck.py --- old/pylint-1.5.2/pylint/checkers/typecheck.py 2015-12-21 00:56:58.000000000 +0100 +++ new/pylint-1.5.3/pylint/checkers/typecheck.py 2016-01-11 10:42:15.000000000 +0100 @@ -468,6 +468,33 @@ args=node.func.as_string()) break + @staticmethod + def _no_context_variadic(node): + """Verify if the given call node has variadic nodes without context + + This is a workaround for handling cases of nested call functions + which don't have the specific call context at hand. + Variadic arguments (variable positional arguments and variable + keyword arguments) are inferred, inherently wrong, by astroid + as a Tuple, respectively a Dict with empty elements. + This can lead pylint to believe that a function call receives + too few arguments. + """ + for arg in node.args: + if not isinstance(arg, astroid.Starred): + continue + + inferred = safe_infer(arg.value) + if isinstance(inferred, astroid.Tuple): + length = len(inferred.elts) + elif isinstance(inferred, astroid.Dict): + length = len(inferred.items) + else: + return False + if not length and isinstance(inferred.statement(), astroid.FunctionDef): + return True + return False + @check_messages(*(list(MSGS.keys()))) def visit_call(self, node): """check that called functions/methods are inferred to callable objects, @@ -479,6 +506,7 @@ call_site = astroid.arguments.CallSite.from_call(node) num_positional_args = len(call_site.positional_arguments) keyword_args = list(call_site.keyword_arguments.keys()) + no_context_variadic = self._no_context_variadic(node) called = safe_infer(node.func) # only function, generator and object defining __call__ are allowed @@ -494,6 +522,7 @@ # Any error occurred during determining the function type, most of # those errors are handled by different warnings. return + num_positional_args += implicit_args if called.args.args is None: # Built-in functions have no argument information. @@ -610,8 +639,10 @@ display_name = '<tuple>' else: display_name = repr(name) - self.add_message('no-value-for-parameter', node=node, - args=(display_name, callable_name)) + # TODO(cpopa): this should be removed after PyCQA/astroid/issues/177 + if not no_context_variadic: + self.add_message('no-value-for-parameter', node=node, + args=(display_name, callable_name)) for name in kwparams: defval, assigned = kwparams[name] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/checkers/variables.py new/pylint-1.5.3/pylint/checkers/variables.py --- old/pylint-1.5.2/pylint/checkers/variables.py 2015-12-21 00:52:14.000000000 +0100 +++ new/pylint-1.5.3/pylint/checkers/variables.py 2016-01-11 10:42:15.000000000 +0100 @@ -622,6 +622,9 @@ continue self.add_message('unused-variable', args=name, node=stmt) + visit_asyncfunctiondef = visit_functiondef + leave_asyncfunctiondef = leave_functiondef + @check_messages('global-variable-undefined', 'global-variable-not-assigned', 'global-statement', 'global-at-module-level', 'redefined-builtin') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/extensions/check_docs.py new/pylint-1.5.3/pylint/extensions/check_docs.py --- old/pylint-1.5.2/pylint/extensions/check_docs.py 2015-12-12 13:20:29.000000000 +0100 +++ new/pylint-1.5.3/pylint/extensions/check_docs.py 2016-01-09 21:13:05.000000000 +0100 @@ -174,6 +174,7 @@ # Collect the function arguments. expected_argument_names = [arg.name for arg in arguments_node.args] + expected_argument_names += [arg.name for arg in arguments_node.kwonlyargs] not_needed_type_in_docstring = ( self.not_needed_param_in_docstring.copy()) @@ -183,7 +184,6 @@ if arguments_node.kwarg is not None: expected_argument_names.append(arguments_node.kwarg) not_needed_type_in_docstring.add(arguments_node.kwarg) - params_with_doc, params_with_type = self.match_param_docs(doc) # Tolerate no parameter documentation at all. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/interfaces.py new/pylint-1.5.3/pylint/interfaces.py --- old/pylint-1.5.2/pylint/interfaces.py 2015-12-21 00:52:14.000000000 +0100 +++ new/pylint-1.5.3/pylint/interfaces.py 2016-01-11 10:42:15.000000000 +0100 @@ -94,7 +94,7 @@ msg is the actual message """ - def display_results(self, layout): + def display_reports(self, layout): """display results encapsulated in the layout tree """ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/lint.py new/pylint-1.5.3/pylint/lint.py --- old/pylint-1.5.2/pylint/lint.py 2015-12-21 00:52:14.000000000 +0100 +++ new/pylint-1.5.3/pylint/lint.py 2016-01-11 10:42:15.000000000 +0100 @@ -964,6 +964,9 @@ if persistent run, pickle results for later comparison """ + # Display whatever messages are left on the reporter. + self.reporter.display_messages(report_nodes.Section()) + if self.file_state.base_name is not None: # load previous results if any previous_stats = config.load_results(self.file_state.base_name) @@ -976,17 +979,12 @@ self.reporter.set_output(open(filename, 'w')) else: sect = report_nodes.Section() - if self.config.reports or self.config.output_format == 'html': - self.reporter.display_results(sect) + if self.config.reports: + self.reporter.display_reports(sect) # save results if persistent run if self.config.persistent: config.save_results(self.stats, self.file_state.base_name) else: - if self.config.output_format == 'html': - # No output will be emitted for the html - # reporter if the file doesn't exist, so emit - # the results here. - self.reporter.display_results(report_nodes.Section()) self.reporter.on_close(self.stats, {}) # specific reports ######################################################## diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/reporters/__init__.py new/pylint-1.5.3/pylint/reporters/__init__.py --- old/pylint-1.5.2/pylint/reporters/__init__.py 2015-12-21 00:52:14.000000000 +0100 +++ new/pylint-1.5.3/pylint/reporters/__init__.py 2016-01-11 10:42:15.000000000 +0100 @@ -91,17 +91,34 @@ """write a line in the output buffer""" print(self.encode(string), file=self.out) - def display_results(self, layout): + def display_reports(self, layout): """display results encapsulated in the layout tree""" self.section = 0 if hasattr(layout, 'report_id'): layout.children[0].children[0].data += ' (%s)' % layout.report_id self._display(layout) + def display_results(self, layout): + warnings.warn("display_results is deprecated, use display_reports instead. " + "The former will be removed in Pylint 2.0.", + DeprecationWarning) + self.display_reports(layout) + def _display(self, layout): """display the layout""" raise NotImplementedError() + def display_messages(self, layout): + """Hook for displaying the messages of the reporter + + This will be called whenever the underlying messages + needs to be displayed. For some reporters, it probably + doesn't make sense to display messages as soon as they + are available, so some mechanism of storing them could be used. + This method can be implemented to display them after they've + been aggregated. + """ + # Event callbacks def on_set_current_module(self, module, filepath): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/reporters/html.py new/pylint-1.5.3/pylint/reporters/html.py --- old/pylint-1.5.2/pylint/reporters/html.py 2015-12-10 16:29:47.000000000 +0100 +++ new/pylint-1.5.3/pylint/reporters/html.py 2016-01-09 21:13:05.000000000 +0100 @@ -88,6 +88,9 @@ (in add_message, message is not displayed, just collected so it can be displayed in an html table) """ + HTMLWriter().format(layout, self.out) + + def display_messages(self, layout): if self.msgs: # add stored messages to the layout msgs = self.header @@ -97,7 +100,7 @@ layout.append(sect) sect.append(Table(cols=cols, children=msgs, rheaders=1)) self.msgs = [] - HTMLWriter().format(layout, self.out) + self._display(layout) def register(linter): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/reporters/json.py new/pylint-1.5.3/pylint/reporters/json.py --- old/pylint-1.5.2/pylint/reporters/json.py 2015-12-10 16:29:47.000000000 +0100 +++ new/pylint-1.5.3/pylint/reporters/json.py 2016-01-09 21:13:05.000000000 +0100 @@ -35,7 +35,6 @@ def handle_message(self, message): """Manage message of different type and in the context of path.""" - self.messages.append({ 'type': message.category, 'module': message.module, @@ -48,11 +47,17 @@ 'message': cgi.escape(message.msg or ''), }) - def _display(self, layout): + def display_messages(self, layout): """Launch layouts display""" if self.messages: print(json.dumps(self.messages, indent=4), file=self.out) + def display_reports(self, _): + """Don't do nothing in this reporter.""" + + def _display(self, layout): + """Don't do nothing.""" + def register(linter): """Register the reporter classes with the linter.""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/test/extensions/test_check_docs.py new/pylint-1.5.3/pylint/test/extensions/test_check_docs.py --- old/pylint-1.5.2/pylint/test/extensions/test_check_docs.py 2015-12-10 16:29:47.000000000 +0100 +++ new/pylint-1.5.3/pylint/test/extensions/test_check_docs.py 2016-01-09 21:13:05.000000000 +0100 @@ -4,6 +4,7 @@ from __future__ import division, print_function, absolute_import import unittest +import sys import astroid from astroid import test_utils @@ -639,6 +640,27 @@ ): self._visit_methods_of_class(node) + @unittest.skipIf(sys.version_info[0] != 3, "Enabled on Python 3") + def test_kwonlyargs_are_taken_in_account(self): + node = test_utils.extract_node(''' + def my_func(arg, *, kwonly, missing_kwonly): + """The docstring + + :param int arg: The argument. + :param bool kwonly: A keyword-arg. + """ + ''') + with self.assertAddsMessages( + Message( + msg_id='missing-param-doc', + node=node, + args=('missing_kwonly', )), + Message( + msg_id='missing-type-doc', + node=node, + args=('missing_kwonly', ))): + self.checker.visit_functiondef(node) + if __name__ == '__main__': unittest.main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/test/functional/arguments.py new/pylint-1.5.3/pylint/test/functional/arguments.py --- old/pylint-1.5.2/pylint/test/functional/arguments.py 2015-12-21 00:52:14.000000000 +0100 +++ new/pylint-1.5.3/pylint/test/functional/arguments.py 2016-01-11 10:42:15.000000000 +0100 @@ -156,3 +156,12 @@ function_1_arg(5, 6, **{unknown: 1}) function_1_arg(**{object: 1}) function_1_arg(**{1: 2}) + +# Don't emit no-value-for-parameter for this, since we +# don't have the context at our disposal. +def expect_three(one, two, three): + return one + two + three + + +def no_context(*args): + expect_three(*args) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/test/functional/async_functions.py new/pylint-1.5.3/pylint/test/functional/async_functions.py --- old/pylint-1.5.2/pylint/test/functional/async_functions.py 1970-01-01 01:00:00.000000000 +0100 +++ new/pylint-1.5.3/pylint/test/functional/async_functions.py 2016-01-11 10:42:15.000000000 +0100 @@ -0,0 +1,65 @@ +"""Check that Python 3.5's async functions are properly analyzed by Pylint.""" +# pylint: disable=missing-docstring,invalid-name,too-few-public-methods +# pylint: disable=using-constant-test + +async def next(): # [redefined-builtin] + pass + +async def some_function(arg1, arg2): # [unused-argument] + await arg1 + + +class OtherClass(object): + + @staticmethod + def test(): + return 42 + + +class Class(object): + + async def some_method(self): + super(OtherClass, self).test() # [bad-super-call] + + +# +1: [too-many-arguments,too-many-return-statements, too-many-branches] +async def complex_function(this, function, has, more, arguments, than, + one, _, should, have): + if 1: + return this + elif 1: + return function + elif 1: + return has + elif 1: + return more + elif 1: + return arguments + elif 1: + return than + try: + return one + finally: + pass + if 2: + return should + while True: + pass + if 1: + return have + elif 2: + return function + elif 3: + pass + + +# +1: [duplicate-argument-name,dangerous-default-value] +async def func(a, a, b=[]): + return a, b + + +# +1: [empty-docstring, blacklisted-name] +async def foo(): + "" + + \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/test/functional/async_functions.rc new/pylint-1.5.3/pylint/test/functional/async_functions.rc --- old/pylint-1.5.2/pylint/test/functional/async_functions.rc 1970-01-01 01:00:00.000000000 +0100 +++ new/pylint-1.5.3/pylint/test/functional/async_functions.rc 2016-01-09 21:13:05.000000000 +0100 @@ -0,0 +1,2 @@ +[testoptions] +min_pyver=3.5 \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/test/functional/async_functions.txt new/pylint-1.5.3/pylint/test/functional/async_functions.txt --- old/pylint-1.5.2/pylint/test/functional/async_functions.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/pylint-1.5.3/pylint/test/functional/async_functions.txt 2016-01-09 21:13:05.000000000 +0100 @@ -0,0 +1,10 @@ +redefined-builtin:5:next:"Redefining built-in 'next'" +unused-argument:8:some_function:"Unused argument 'arg2'" +bad-super-call:22:Class.some_method:"Bad first argument 'OtherClass' given to super()" +too-many-arguments:26:complex_function:Too many arguments (10/5) +too-many-branches:26:complex_function:Too many branches (13/12) +too-many-return-statements:26:complex_function:Too many return statements (10/6) +dangerous-default-value:57:func:Dangerous default value [] as argument +duplicate-argument-name:57:func:Duplicate argument name a in function definition +blacklisted-name:62:foo:Black listed name "foo" +empty-docstring:62:foo:Empty function docstring \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/test/functional/unneeded_not.py new/pylint-1.5.3/pylint/test/functional/unneeded_not.py --- old/pylint-1.5.2/pylint/test/functional/unneeded_not.py 2015-12-10 16:29:47.000000000 +0100 +++ new/pylint-1.5.3/pylint/test/functional/unneeded_not.py 2016-01-11 10:42:15.000000000 +0100 @@ -1,6 +1,6 @@ """Check exceeding negations in boolean expressions trigger warnings""" -# pylint: disable=singleton-comparison, too-many-branches +# pylint: disable=singleton-comparison, too-many-branches, too-few-public-methods def unneeded_not(): """This is not ok @@ -49,3 +49,9 @@ pass if not 2 <= someint < 3 < 4: pass + +class Klass(object): + """This is also ok""" + def __ne__(self, other): + return not self == other + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/test/functional/wrong_import_order.py new/pylint-1.5.3/pylint/test/functional/wrong_import_order.py --- old/pylint-1.5.2/pylint/test/functional/wrong_import_order.py 2015-12-10 16:29:47.000000000 +0100 +++ new/pylint-1.5.3/pylint/test/functional/wrong_import_order.py 2016-01-11 10:42:04.000000000 +0100 @@ -1,5 +1,9 @@ """Checks import order rule""" # pylint: disable=unused-import,relative-import,ungrouped-imports,import-error +try: + from six.moves import configparser +except ImportError: + import configparser import six import os.path # [wrong-import-order] @@ -7,4 +11,5 @@ import sys # [wrong-import-order] import datetime # [wrong-import-order] import unused_import +import totally_missing import astroid diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/test/functional/wrong_import_order.txt new/pylint-1.5.3/pylint/test/functional/wrong_import_order.txt --- old/pylint-1.5.2/pylint/test/functional/wrong_import_order.txt 2015-12-10 16:29:47.000000000 +0100 +++ new/pylint-1.5.3/pylint/test/functional/wrong_import_order.txt 2016-01-11 10:40:13.000000000 +0100 @@ -1,3 +1,3 @@ -wrong-import-order:5::standard import "import os.path" comes before "import six" -wrong-import-order:7::standard import "import sys" comes before "import six" -wrong-import-order:8::standard import "import datetime" comes before "import six" +wrong-import-order:9::standard import "import os.path" comes before "from six.moves import configparser" +wrong-import-order:11::standard import "import sys" comes before "from six.moves import configparser" +wrong-import-order:12::standard import "import datetime" comes before "from six.moves import configparser" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/test/functional/yield_inside_async_function.py new/pylint-1.5.3/pylint/test/functional/yield_inside_async_function.py --- old/pylint-1.5.2/pylint/test/functional/yield_inside_async_function.py 2015-12-10 16:29:47.000000000 +0100 +++ new/pylint-1.5.3/pylint/test/functional/yield_inside_async_function.py 2016-01-09 21:13:05.000000000 +0100 @@ -1,5 +1,5 @@ """Test that `yield` or `yield from` can't be used inside an async function.""" -# pylint: disable=missing-docstring +# pylint: disable=missing-docstring, unused-variable async def good_coro(): def _inner(): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/test/regrtest_data/syntax_error.py new/pylint-1.5.3/pylint/test/regrtest_data/syntax_error.py --- old/pylint-1.5.2/pylint/test/regrtest_data/syntax_error.py 1970-01-01 01:00:00.000000000 +0100 +++ new/pylint-1.5.3/pylint/test/regrtest_data/syntax_error.py 2016-01-09 21:13:05.000000000 +0100 @@ -0,0 +1 @@ +class A extends B {} \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/test/test_functional.py new/pylint-1.5.3/pylint/test/test_functional.py --- old/pylint-1.5.2/pylint/test/test_functional.py 2015-12-10 16:29:47.000000000 +0100 +++ new/pylint-1.5.3/pylint/test/test_functional.py 2016-01-09 21:13:05.000000000 +0100 @@ -88,7 +88,7 @@ def on_set_current_module(self, module, filepath): self.messages = [] - def display_results(self, layout): + def display_reports(self, layout): """Ignore layouts.""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/test/test_self.py new/pylint-1.5.3/pylint/test/test_self.py --- old/pylint-1.5.2/pylint/test/test_self.py 2015-12-21 00:52:14.000000000 +0100 +++ new/pylint-1.5.3/pylint/test/test_self.py 2016-01-11 10:42:15.000000000 +0100 @@ -12,6 +12,7 @@ # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. import contextlib +import json import re import sys import os @@ -56,7 +57,7 @@ for rep in self._reporters: rep.handle_message(msg) - def display_results(self, layout): + def display_reports(self, layout): pass @property @@ -296,6 +297,51 @@ expected_output=expected) + def test_json_report_when_file_has_syntax_error(self): + out = six.StringIO() + module = join(HERE, 'regrtest_data', 'syntax_error.py') + self._runtest([module], code=2, reporter=JSONReporter(out)) + output = json.loads(out.getvalue()) + self.assertIsInstance(output, list) + self.assertEqual(len(output), 1) + self.assertIsInstance(output[0], dict) + expected = { + "obj": "", + "column": 0, + "line": 1, + "type": "error", + "symbol": "syntax-error", + "module": "syntax_error" + } + message = output[0] + for key, value in expected.items(): + self.assertIn(key, message) + self.assertEqual(message[key], value) + self.assertIn("invalid syntax", message["message"].lower()) + + def test_json_report_when_file_is_missing(self): + out = six.StringIO() + module = join(HERE, 'regrtest_data', 'totally_missing.py') + self._runtest([module], code=1, reporter=JSONReporter(out)) + output = json.loads(out.getvalue()) + self.assertIsInstance(output, list) + self.assertEqual(len(output), 1) + self.assertIsInstance(output[0], dict) + expected = { + "obj": "", + "column": 0, + "line": 1, + "type": "fatal", + "symbol": "fatal", + "module": module + } + message = output[0] + for key, value in expected.items(): + self.assertIn(key, message) + self.assertEqual(message[key], value) + self.assertTrue(message['message'].startswith("No module named")) + + if __name__ == '__main__': unittest.main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/test/unittest_reporters_json.py new/pylint-1.5.3/pylint/test/unittest_reporters_json.py --- old/pylint-1.5.2/pylint/test/unittest_reporters_json.py 2015-12-10 16:29:47.000000000 +0100 +++ new/pylint-1.5.3/pylint/test/unittest_reporters_json.py 2016-01-09 21:13:05.000000000 +0100 @@ -40,7 +40,8 @@ linter.add_message('line-too-long', line=1, args=(1, 2)) # we call this method because we didn't actually run the checkers - reporter.display_results(None) + reporter.display_messages(None) + expected_result = [[ ("column", 0), ("line", 1), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/test/unittest_reporting.py new/pylint-1.5.3/pylint/test/unittest_reporting.py --- old/pylint-1.5.2/pylint/test/unittest_reporting.py 2015-12-21 00:52:14.000000000 +0100 +++ new/pylint-1.5.3/pylint/test/unittest_reporting.py 2016-01-11 10:42:15.000000000 +0100 @@ -123,7 +123,7 @@ linter.open() linter.set_current_module('0123') linter.add_message('lowercase-l-suffix', line=1) - linter.reporter.display_results(Section()) + linter.reporter.display_messages(Section()) self.assertEqual(output.getvalue().splitlines(), expected) @unittest.expectedFailure @@ -169,8 +169,26 @@ linter.add_message('bad-whitespace', line=1, args=('Exactly one', 'required', 'before', 'comparison', 'a< 5: print "zero"')) - linter.reporter.display_results(Section()) + linter.reporter.display_reports(Section()) self.assertMultiLineEqual(output.getvalue(), expected) + def test_display_results_is_renamed(self): + class CustomReporter(TextReporter): + def _display(self, layout): + return None + + reporter = CustomReporter() + if __pkginfo__.numversion >= (2, 0): + with self.assertRaises(AttributeError): + reporter.display_results + else: + with warnings.catch_warnings(record=True) as cm: + warnings.simplefilter("always") + reporter.display_results(Section()) + + self.assertEqual(len(cm), 1) + self.assertIsInstance(cm[0].message, DeprecationWarning) + + if __name__ == '__main__': unittest.main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint/testutils.py new/pylint-1.5.3/pylint/testutils.py --- old/pylint-1.5.2/pylint/testutils.py 2015-12-21 00:52:14.000000000 +0100 +++ new/pylint-1.5.3/pylint/testutils.py 2016-01-11 10:42:15.000000000 +0100 @@ -125,7 +125,7 @@ self.reset() return result - def display_results(self, layout): + def display_reports(self, layout): """ignore layouts""" _display = None diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint.egg-info/PKG-INFO new/pylint-1.5.3/pylint.egg-info/PKG-INFO --- old/pylint-1.5.2/pylint.egg-info/PKG-INFO 2015-12-21 01:21:34.000000000 +0100 +++ new/pylint-1.5.3/pylint.egg-info/PKG-INFO 2016-01-11 11:07:49.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: pylint -Version: 1.5.2 +Version: 1.5.3 Summary: python code static checker Home-page: http://www.pylint.org Author: Logilab diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint.egg-info/SOURCES.txt new/pylint-1.5.3/pylint.egg-info/SOURCES.txt --- old/pylint-1.5.2/pylint.egg-info/SOURCES.txt 2015-12-21 01:21:34.000000000 +0100 +++ new/pylint-1.5.3/pylint.egg-info/SOURCES.txt 2016-01-11 11:07:49.000000000 +0100 @@ -178,6 +178,9 @@ pylint/test/functional/assert_on_tuple.txt pylint/test/functional/assigning_non_slot.py pylint/test/functional/assigning_non_slot.txt +pylint/test/functional/async_functions.py +pylint/test/functional/async_functions.rc +pylint/test/functional/async_functions.txt pylint/test/functional/attribute_defined_outside_init.py pylint/test/functional/attribute_defined_outside_init.txt pylint/test/functional/bad_builtin.py @@ -784,6 +787,7 @@ pylint/test/regrtest_data/precedence_test.py pylint/test/regrtest_data/py3k_error_flag.py pylint/test/regrtest_data/special_attr_scope_lookup_crash.py +pylint/test/regrtest_data/syntax_error.py pylint/test/regrtest_data/try_finally_disable_msg_crash.py pylint/test/regrtest_data/wrong_import_position.py pylint/test/regrtest_data/absimp/__init__.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pylint-1.5.2/pylint.egg-info/requires.txt new/pylint-1.5.3/pylint.egg-info/requires.txt --- old/pylint-1.5.2/pylint.egg-info/requires.txt 2015-12-21 01:21:34.000000000 +0100 +++ new/pylint-1.5.3/pylint.egg-info/requires.txt 2016-01-11 11:07:49.000000000 +0100 @@ -1,3 +1,3 @@ -astroid>=1.4.1 +astroid>=1.4.1,<1.5.0 six colorama