Renamed pep8.py to pycodestyle.py in order to track the upstream renaming.

Sun, 04 Sep 2016 17:16:38 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 04 Sep 2016 17:16:38 +0200
changeset 5147
d39dd5cee0c8
parent 5146
f96c32abd120
child 5148
1a879f9af1c0

Renamed pep8.py to pycodestyle.py in order to track the upstream renaming.

APIs/Python3/eric6.api file | annotate | diff | comparison | revisions
APIs/Python3/eric6.bas file | annotate | diff | comparison | revisions
Documentation/Help/source.qch file | annotate | diff | comparison | revisions
Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleFixer.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.NamingStyleChecker.html file | annotate | diff | comparison | revisions
Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html file | annotate | diff | comparison | revisions
Documentation/Source/index-eric6.Plugins.CheckerPlugins.CodeStyleChecker.html file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleChecker.py file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleFixer.py file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/CodeStyleChecker/NamingStyleChecker.py file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/CodeStyleChecker/pep8.py file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/CodeStyleChecker/pycodestyle.py file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/CodeStyleChecker/translations.py file | annotate | diff | comparison | revisions
changelog file | annotate | diff | comparison | revisions
eric6.e4p file | annotate | diff | comparison | revisions
i18n/eric6_cs.ts file | annotate | diff | comparison | revisions
i18n/eric6_de.qm file | annotate | diff | comparison | revisions
i18n/eric6_de.ts file | annotate | diff | comparison | revisions
i18n/eric6_en.ts file | annotate | diff | comparison | revisions
i18n/eric6_es.ts file | annotate | diff | comparison | revisions
i18n/eric6_fr.ts file | annotate | diff | comparison | revisions
i18n/eric6_it.ts file | annotate | diff | comparison | revisions
i18n/eric6_pt.ts file | annotate | diff | comparison | revisions
i18n/eric6_ru.ts file | annotate | diff | comparison | revisions
i18n/eric6_tr.ts file | annotate | diff | comparison | revisions
i18n/eric6_zh_CN.ts file | annotate | diff | comparison | revisions
--- a/APIs/Python3/eric6.api	Sun Sep 04 16:50:23 2016 +0200
+++ b/APIs/Python3/eric6.api	Sun Sep 04 17:16:38 2016 +0200
@@ -4082,130 +4082,134 @@
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.mccabe.PathNode.dot_id?4()
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.mccabe.PathNode.to_dot?4()
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.mccabe.PathNode?1(name, look="circle")
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.ARITHMETIC_OP?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.BENCHMARK_KEYS?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.BaseReport.error?4(line_number, offset, text, check)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.BaseReport.error_args?4(line_number, offset, text, check, *args)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.BaseReport.get_count?4(prefix='')
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.BaseReport.get_file_results?4()
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.BaseReport.get_statistics?4(prefix='')
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.BaseReport.increment_logical_line?4()
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.BaseReport.init_file?4(filename, lines, expected, line_offset)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.BaseReport.print_benchmark?4()
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.BaseReport.print_filename?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.BaseReport.print_statistics?4(prefix='')
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.BaseReport.start?4()
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.BaseReport.stop?4()
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.BaseReport?1(options)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.COMMENT_WITH_NL?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.COMPARE_NEGATIVE_REGEX?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.COMPARE_SINGLETON_REGEX?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.COMPARE_TYPE_REGEX?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.Checker.build_tokens_line?4()
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.Checker.check_all?4(expected=None, line_offset=0)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.Checker.check_ast?4()
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.Checker.check_logical?4()
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.Checker.check_physical?4(line)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.Checker.generate_tokens?4()
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.Checker.init_checker_state?4(name, argument_names)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.Checker.maybe_check_physical?4(token)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.Checker.readline?4()
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.Checker.report_invalid_syntax?4()
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.Checker.run_check?4(check, argument_names)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.Checker?1(filename=None, lines=None, options=None, report=None, **kwargs)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.DEFAULT_EXCLUDE?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.DEFAULT_IGNORE?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.DOCSTRING_REGEX?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.DiffReport.error?4(line_number, offset, text, check)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.DiffReport?1(options)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.ERRORCODE_REGEX?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.EXTRANEOUS_WHITESPACE_REGEX?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.FileReport.print_filename?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.HUNK_REGEX?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.INDENT_REGEX?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.KEYWORDS?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.KEYWORD_REGEX?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.LAMBDA_REGEX?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.MAX_LINE_LENGTH?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.NEWLINE?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.OPERATOR_REGEX?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.PROJECT_CONFIG?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.RAISE_COMMA_REGEX?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.REPORT_FORMAT?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.RERAISE_COMMA_REGEX?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.SINGLETONS?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.SKIP_COMMENTS?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.SKIP_TOKENS?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.StandardReport.error?4(line_number, offset, text, check)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.StandardReport.error_args?4(line_number, offset, code, check, *args)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.StandardReport.get_file_results?4()
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.StandardReport.init_file?4(filename, lines, expected, line_offset)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.StandardReport?1(options)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.StyleGuide.check_files?4(paths=None)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.StyleGuide.excluded?4(filename, parent=None)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.StyleGuide.get_checks?4(argument_name)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.StyleGuide.ignore_code?4(code)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.StyleGuide.init_report?4(reporter=None)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.StyleGuide.input_dir?4(dirname)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.StyleGuide.input_file?4(filename, lines=None, expected=None, line_offset=0)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.StyleGuide?1(*args, **kwargs)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.TESTSUITE_PATH?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.UNARY_OPERATORS?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.WHITESPACE?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.WHITESPACE_AFTER_COMMA_REGEX?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.WS_NEEDED_OPERATORS?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.WS_OPTIONAL_OPERATORS?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8._add_check?5(check, kind, codes, args)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8._checks?8
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8._get_parameters?5(function)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8._is_eol_token?5(token)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8._is_eol_token?5(token, _eol_token=_is_eol_token)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8._main?5()
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8._parse_multi_options?5(options, split_token=', ')
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.blank_lines?4(logical_line, blank_lines, indent_level, line_number, blank_before, previous_logical, previous_indent_level)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.break_around_binary_operator?4(logical_line, tokens)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.comparison_negative?4(logical_line)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.comparison_to_singleton?4(logical_line, noqa)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.comparison_type?4(logical_line, noqa)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.compound_statements?4(logical_line)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.continued_indentation?4(logical_line, tokens, indent_level, hang_closing, indent_char, noqa, verbose)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.expand_indent?4(line)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.explicit_line_join?4(logical_line, tokens)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.extraneous_whitespace?4(logical_line)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.filename_match?4(filename, patterns, default=True)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.get_parser?4(prog='pep8', version=__version__)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.imports_on_separate_lines?4(logical_line)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.indentation?4(logical_line, previous_logical, indent_char, indent_level, previous_indent_level)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.init_checks_registry?4()
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.is_binary_operator?4(token_type, text)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.is_string_literal?4(line)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.maximum_line_length?4(physical_line, max_line_length, multiline)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.missing_whitespace?4(logical_line)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.missing_whitespace_around_operator?4(logical_line, tokens)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.module_imports_on_top_of_file?4(logical_line, indent_level, checker_state, noqa)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.mute_string?4(text)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.noqa?7
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.normalize_paths?4(value, parent=os.curdir)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.parse_udiff?4(diff, patterns=None, parent='.')
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.process_options?4(arglist=None, parse_argv=False, config_file=None, parser=None)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.python_3000_backticks?4(logical_line)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.python_3000_has_key?4(logical_line, noqa)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.python_3000_not_equal?4(logical_line)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.python_3000_raise_comma?4(logical_line)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.read_config?4(options, args, arglist, parser)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.readlines?4(filename)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.register_check?4(check, codes=None)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.stdin_get_value?4()
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.tabs_obsolete?4(physical_line)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.tabs_or_spaces?4(physical_line, indent_char)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.trailing_blank_lines?4(physical_line, lines, line_number, total_lines)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.trailing_whitespace?4(physical_line)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.whitespace_around_comma?4(logical_line)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.whitespace_around_keywords?4(logical_line)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.whitespace_around_named_parameter_equals?4(logical_line, tokens)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.whitespace_around_operator?4(logical_line)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.whitespace_before_comment?4(logical_line, tokens)
-eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.whitespace_before_parameters?4(logical_line, tokens)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.ARITHMETIC_OP?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.BENCHMARK_KEYS?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.BaseReport.error?4(line_number, offset, text, check)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.BaseReport.error_args?4(line_number, offset, text, check, *args)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.BaseReport.get_count?4(prefix='')
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.BaseReport.get_file_results?4()
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.BaseReport.get_statistics?4(prefix='')
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.BaseReport.increment_logical_line?4()
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.BaseReport.init_file?4(filename, lines, expected, line_offset)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.BaseReport.print_benchmark?4()
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.BaseReport.print_filename?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.BaseReport.print_statistics?4(prefix='')
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.BaseReport.start?4()
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.BaseReport.stop?4()
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.BaseReport?1(options)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.COMMENT_WITH_NL?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.COMPARE_NEGATIVE_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.COMPARE_SINGLETON_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.COMPARE_TYPE_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.Checker.build_tokens_line?4()
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.Checker.check_all?4(expected=None, line_offset=0)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.Checker.check_ast?4()
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.Checker.check_logical?4()
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.Checker.check_physical?4(line)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.Checker.generate_tokens?4()
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.Checker.init_checker_state?4(name, argument_names)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.Checker.maybe_check_physical?4(token)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.Checker.readline?4()
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.Checker.report_invalid_syntax?4()
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.Checker.run_check?4(check, argument_names)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.Checker?1(filename=None, lines=None, options=None, report=None, **kwargs)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.DEFAULT_EXCLUDE?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.DEFAULT_IGNORE?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.DOCSTRING_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.DiffReport.error?4(line_number, offset, text, check)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.DiffReport?1(options)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.ERRORCODE_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.EXTRANEOUS_WHITESPACE_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.FileReport.print_filename?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.HUNK_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.INDENT_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.KEYWORDS?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.KEYWORD_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.LAMBDA_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.MAX_LINE_LENGTH?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.NEWLINE?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.OPERATOR_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.PROJECT_CONFIG?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.PyCF_ONLY_AST?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.RAISE_COMMA_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.REPORT_FORMAT?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.RERAISE_COMMA_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.SINGLETONS?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.SKIP_COMMENTS?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.SKIP_TOKENS?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.StandardReport.error?4(line_number, offset, text, check)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.StandardReport.error_args?4(line_number, offset, code, check, *args)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.StandardReport.get_file_results?4()
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.StandardReport.init_file?4(filename, lines, expected, line_offset)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.StandardReport?1(options)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.StyleGuide.check_files?4(paths=None)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.StyleGuide.excluded?4(filename, parent=None)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.StyleGuide.get_checks?4(argument_name)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.StyleGuide.ignore_code?4(code)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.StyleGuide.init_report?4(reporter=None)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.StyleGuide.input_dir?4(dirname)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.StyleGuide.input_file?4(filename, lines=None, expected=None, line_offset=0)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.StyleGuide?1(*args, **kwargs)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.TESTSUITE_PATH?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.UNARY_OPERATORS?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.WHITESPACE?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.WHITESPACE_AFTER_COMMA_REGEX?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.WS_NEEDED_OPERATORS?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.WS_OPTIONAL_OPERATORS?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle._add_check?5(check, kind, codes, args)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle._checks?8
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle._get_parameters?5(function)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle._is_eol_token?5(token)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle._is_eol_token?5(token, _eol_token=_is_eol_token)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle._main?5()
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle._parse_multi_options?5(options, split_token=', ')
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.ambiguous_identifier?4(logical_line, tokens)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.blank_lines?4(logical_line, blank_lines, indent_level, line_number, blank_before, previous_logical, previous_unindented_logical_line, previous_indent_level, lines)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.break_around_binary_operator?4(logical_line, tokens)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.comparison_negative?4(logical_line)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.comparison_to_singleton?4(logical_line, noqa)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.comparison_type?4(logical_line, noqa)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.compound_statements?4(logical_line)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.continued_indentation?4(logical_line, tokens, indent_level, hang_closing, indent_char, noqa, verbose)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.expand_indent?4(line)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.explicit_line_join?4(logical_line, tokens)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.extraneous_whitespace?4(logical_line)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.filename_match?4(filename, patterns, default=True)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.get_parser?4(prog='pycodestyle', version=__version__)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.imports_on_separate_lines?4(logical_line)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.indentation?4(logical_line, previous_logical, indent_char, indent_level, previous_indent_level)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.init_checks_registry?4()
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.is_binary_operator?4(token_type, text)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.is_string_literal?4(line)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.maximum_line_length?4(physical_line, max_line_length, multiline, noqa)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.missing_whitespace?4(logical_line)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.missing_whitespace_after_import_keyword?4(logical_line)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.missing_whitespace_around_operator?4(logical_line, tokens)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.module_imports_on_top_of_file?4(logical_line, indent_level, checker_state, noqa)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.mute_string?4(text)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.noqa?7
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.normalize_paths?4(value, parent=os.curdir)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.parse_udiff?4(diff, patterns=None, parent='.')
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.process_options?4(arglist=None, parse_argv=False, config_file=None, parser=None)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.python_3000_backticks?4(logical_line)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.python_3000_has_key?4(logical_line, noqa)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.python_3000_not_equal?4(logical_line)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.python_3000_raise_comma?4(logical_line)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.read_config?4(options, args, arglist, parser)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.readlines?4(filename)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.register_check?4(check, codes=None)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.stdin_get_value?4()
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.tabs_obsolete?4(physical_line)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.tabs_or_spaces?4(physical_line, indent_char)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.trailing_blank_lines?4(physical_line, lines, line_number, total_lines)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.trailing_whitespace?4(physical_line)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.update_counts?4(s, counts)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.whitespace_around_comma?4(logical_line)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.whitespace_around_keywords?4(logical_line)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.whitespace_around_named_parameter_equals?4(logical_line, tokens)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.whitespace_around_operator?4(logical_line)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.whitespace_before_comment?4(logical_line, tokens)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.whitespace_before_parameters?4(logical_line, tokens)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.translations._messages?8
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.translations._messages_sample_args?8
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.translations.getTranslatedMessage?4(message)
--- a/APIs/Python3/eric6.bas	Sun Sep 04 16:50:23 2016 +0200
+++ b/APIs/Python3/eric6.bas	Sun Sep 04 17:16:38 2016 +0200
@@ -78,7 +78,7 @@
 CodeMetricsDialog QDialog Ui_CodeMetricsDialog
 CodeStyleCheckerDialog QDialog Ui_CodeStyleCheckerDialog
 CodeStyleCheckerPlugin QObject
-CodeStyleCheckerReport pep8.BaseReport
+CodeStyleCheckerReport pycodestyle.BaseReport
 CodeStyleCodeSelectionDialog QDialog Ui_CodeStyleCodeSelectionDialog
 CodeStyleStatisticsDialog QDialog Ui_CodeStyleStatisticsDialog
 Coding ClbrBase
Binary file Documentation/Help/source.qch has changed
--- a/Documentation/Help/source.qhp	Sun Sep 04 16:50:23 2016 +0200
+++ b/Documentation/Help/source.qhp	Sun Sep 04 17:16:38 2016 +0200
@@ -495,7 +495,7 @@
                 <section title="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html" />
                 <section title="eric6.Plugins.CheckerPlugins.CodeStyleChecker.NamingStyleChecker" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.NamingStyleChecker.html" />
                 <section title="eric6.Plugins.CheckerPlugins.CodeStyleChecker.mccabe" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.mccabe.html" />
-                <section title="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html" />
+                <section title="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html" />
                 <section title="eric6.Plugins.CheckerPlugins.CodeStyleChecker.translations" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.translations.html" />
               </section>
               <section title="eric6.Plugins.CheckerPlugins.SyntaxChecker" ref="index-eric6.Plugins.CheckerPlugins.SyntaxChecker.html">
@@ -1963,19 +1963,19 @@
       <keyword name="BackgroundService.serviceConnect" id="BackgroundService.serviceConnect" ref="eric6.Utilities.BackgroundService.html#BackgroundService.serviceConnect" />
       <keyword name="BackgroundService.serviceDisconnect" id="BackgroundService.serviceDisconnect" ref="eric6.Utilities.BackgroundService.html#BackgroundService.serviceDisconnect" />
       <keyword name="BackgroundService.shutdown" id="BackgroundService.shutdown" ref="eric6.Utilities.BackgroundService.html#BackgroundService.shutdown" />
-      <keyword name="BaseReport" id="BaseReport" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#BaseReport" />
-      <keyword name="BaseReport (Constructor)" id="BaseReport (Constructor)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#BaseReport.__init__" />
-      <keyword name="BaseReport.error" id="BaseReport.error" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#BaseReport.error" />
-      <keyword name="BaseReport.error_args" id="BaseReport.error_args" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#BaseReport.error_args" />
-      <keyword name="BaseReport.get_count" id="BaseReport.get_count" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#BaseReport.get_count" />
-      <keyword name="BaseReport.get_file_results" id="BaseReport.get_file_results" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#BaseReport.get_file_results" />
-      <keyword name="BaseReport.get_statistics" id="BaseReport.get_statistics" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#BaseReport.get_statistics" />
-      <keyword name="BaseReport.increment_logical_line" id="BaseReport.increment_logical_line" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#BaseReport.increment_logical_line" />
-      <keyword name="BaseReport.init_file" id="BaseReport.init_file" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#BaseReport.init_file" />
-      <keyword name="BaseReport.print_benchmark" id="BaseReport.print_benchmark" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#BaseReport.print_benchmark" />
-      <keyword name="BaseReport.print_statistics" id="BaseReport.print_statistics" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#BaseReport.print_statistics" />
-      <keyword name="BaseReport.start" id="BaseReport.start" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#BaseReport.start" />
-      <keyword name="BaseReport.stop" id="BaseReport.stop" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#BaseReport.stop" />
+      <keyword name="BaseReport" id="BaseReport" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#BaseReport" />
+      <keyword name="BaseReport (Constructor)" id="BaseReport (Constructor)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#BaseReport.__init__" />
+      <keyword name="BaseReport.error" id="BaseReport.error" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#BaseReport.error" />
+      <keyword name="BaseReport.error_args" id="BaseReport.error_args" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#BaseReport.error_args" />
+      <keyword name="BaseReport.get_count" id="BaseReport.get_count" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#BaseReport.get_count" />
+      <keyword name="BaseReport.get_file_results" id="BaseReport.get_file_results" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#BaseReport.get_file_results" />
+      <keyword name="BaseReport.get_statistics" id="BaseReport.get_statistics" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#BaseReport.get_statistics" />
+      <keyword name="BaseReport.increment_logical_line" id="BaseReport.increment_logical_line" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#BaseReport.increment_logical_line" />
+      <keyword name="BaseReport.init_file" id="BaseReport.init_file" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#BaseReport.init_file" />
+      <keyword name="BaseReport.print_benchmark" id="BaseReport.print_benchmark" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#BaseReport.print_benchmark" />
+      <keyword name="BaseReport.print_statistics" id="BaseReport.print_statistics" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#BaseReport.print_statistics" />
+      <keyword name="BaseReport.start" id="BaseReport.start" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#BaseReport.start" />
+      <keyword name="BaseReport.stop" id="BaseReport.stop" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#BaseReport.stop" />
       <keyword name="BinaryModel" id="BinaryModel" ref="eric6.UI.NumbersWidget.html#BinaryModel" />
       <keyword name="BinaryModel (Constructor)" id="BinaryModel (Constructor)" ref="eric6.UI.NumbersWidget.html#BinaryModel.__init__" />
       <keyword name="BinaryModel.columnCount" id="BinaryModel.columnCount" ref="eric6.UI.NumbersWidget.html#BinaryModel.columnCount" />
@@ -2599,19 +2599,19 @@
       <keyword name="ChatWidget.on_usersList_customContextMenuRequested" id="ChatWidget.on_usersList_customContextMenuRequested" ref="eric6.Cooperation.ChatWidget.html#ChatWidget.on_usersList_customContextMenuRequested" />
       <keyword name="ChatWidget.preferencesChanged" id="ChatWidget.preferencesChanged" ref="eric6.Cooperation.ChatWidget.html#ChatWidget.preferencesChanged" />
       <keyword name="ChatWidget.shutdown" id="ChatWidget.shutdown" ref="eric6.Cooperation.ChatWidget.html#ChatWidget.shutdown" />
-      <keyword name="Checker" id="Checker" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#Checker" />
-      <keyword name="Checker (Constructor)" id="Checker (Constructor)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#Checker.__init__" />
-      <keyword name="Checker.build_tokens_line" id="Checker.build_tokens_line" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#Checker.build_tokens_line" />
-      <keyword name="Checker.check_all" id="Checker.check_all" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#Checker.check_all" />
-      <keyword name="Checker.check_ast" id="Checker.check_ast" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#Checker.check_ast" />
-      <keyword name="Checker.check_logical" id="Checker.check_logical" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#Checker.check_logical" />
-      <keyword name="Checker.check_physical" id="Checker.check_physical" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#Checker.check_physical" />
-      <keyword name="Checker.generate_tokens" id="Checker.generate_tokens" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#Checker.generate_tokens" />
-      <keyword name="Checker.init_checker_state" id="Checker.init_checker_state" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#Checker.init_checker_state" />
-      <keyword name="Checker.maybe_check_physical" id="Checker.maybe_check_physical" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#Checker.maybe_check_physical" />
-      <keyword name="Checker.readline" id="Checker.readline" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#Checker.readline" />
-      <keyword name="Checker.report_invalid_syntax" id="Checker.report_invalid_syntax" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#Checker.report_invalid_syntax" />
-      <keyword name="Checker.run_check" id="Checker.run_check" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#Checker.run_check" />
+      <keyword name="Checker" id="Checker" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#Checker" />
+      <keyword name="Checker (Constructor)" id="Checker (Constructor)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#Checker.__init__" />
+      <keyword name="Checker.build_tokens_line" id="Checker.build_tokens_line" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#Checker.build_tokens_line" />
+      <keyword name="Checker.check_all" id="Checker.check_all" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#Checker.check_all" />
+      <keyword name="Checker.check_ast" id="Checker.check_ast" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#Checker.check_ast" />
+      <keyword name="Checker.check_logical" id="Checker.check_logical" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#Checker.check_logical" />
+      <keyword name="Checker.check_physical" id="Checker.check_physical" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#Checker.check_physical" />
+      <keyword name="Checker.generate_tokens" id="Checker.generate_tokens" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#Checker.generate_tokens" />
+      <keyword name="Checker.init_checker_state" id="Checker.init_checker_state" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#Checker.init_checker_state" />
+      <keyword name="Checker.maybe_check_physical" id="Checker.maybe_check_physical" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#Checker.maybe_check_physical" />
+      <keyword name="Checker.readline" id="Checker.readline" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#Checker.readline" />
+      <keyword name="Checker.report_invalid_syntax" id="Checker.report_invalid_syntax" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#Checker.report_invalid_syntax" />
+      <keyword name="Checker.run_check" id="Checker.run_check" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#Checker.run_check" />
       <keyword name="CheckerPlugins (Package)" id="CheckerPlugins (Package)" ref="index-eric6.Plugins.CheckerPlugins.html" />
       <keyword name="ChromeImporter" id="ChromeImporter" ref="eric6.Helpviewer.Bookmarks.BookmarksImporters.ChromeImporter.html#ChromeImporter" />
       <keyword name="ChromeImporter" id="ChromeImporter" ref="eric6.WebBrowser.Bookmarks.BookmarksImporters.ChromeImporter.html#ChromeImporter" />
@@ -3924,9 +3924,9 @@
       <keyword name="DiffHighlighter (Constructor)" id="DiffHighlighter (Constructor)" ref="eric6.UI.DiffHighlighter.html#DiffHighlighter.__init__" />
       <keyword name="DiffHighlighter (Module)" id="DiffHighlighter (Module)" ref="eric6.UI.DiffHighlighter.html" />
       <keyword name="DiffHighlighter.generateRules" id="DiffHighlighter.generateRules" ref="eric6.UI.DiffHighlighter.html#DiffHighlighter.generateRules" />
-      <keyword name="DiffReport" id="DiffReport" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#DiffReport" />
-      <keyword name="DiffReport (Constructor)" id="DiffReport (Constructor)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#DiffReport.__init__" />
-      <keyword name="DiffReport.error" id="DiffReport.error" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#DiffReport.error" />
+      <keyword name="DiffReport" id="DiffReport" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#DiffReport" />
+      <keyword name="DiffReport (Constructor)" id="DiffReport (Constructor)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#DiffReport.__init__" />
+      <keyword name="DiffReport.error" id="DiffReport.error" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#DiffReport.error" />
       <keyword name="DiffWindow" id="DiffWindow" ref="eric6.UI.DiffDialog.html#DiffWindow" />
       <keyword name="DiffWindow (Constructor)" id="DiffWindow (Constructor)" ref="eric6.UI.DiffDialog.html#DiffWindow.__init__" />
       <keyword name="DiffWindow.eventFilter" id="DiffWindow.eventFilter" ref="eric6.UI.DiffDialog.html#DiffWindow.eventFilter" />
@@ -5830,7 +5830,7 @@
       <keyword name="FileReply.bytesAvailable" id="FileReply.bytesAvailable" ref="eric6.Helpviewer.Network.FileReply.html#FileReply.bytesAvailable" />
       <keyword name="FileReply.isSequential" id="FileReply.isSequential" ref="eric6.Helpviewer.Network.FileReply.html#FileReply.isSequential" />
       <keyword name="FileReply.readData" id="FileReply.readData" ref="eric6.Helpviewer.Network.FileReply.html#FileReply.readData" />
-      <keyword name="FileReport" id="FileReport" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#FileReport" />
+      <keyword name="FileReport" id="FileReport" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#FileReport" />
       <keyword name="FiletypeAssociationDialog" id="FiletypeAssociationDialog" ref="eric6.Project.FiletypeAssociationDialog.html#FiletypeAssociationDialog" />
       <keyword name="FiletypeAssociationDialog (Constructor)" id="FiletypeAssociationDialog (Constructor)" ref="eric6.Project.FiletypeAssociationDialog.html#FiletypeAssociationDialog.__init__" />
       <keyword name="FiletypeAssociationDialog (Module)" id="FiletypeAssociationDialog (Module)" ref="eric6.Project.FiletypeAssociationDialog.html" />
@@ -12614,12 +12614,12 @@
       <keyword name="StackedWidget.removeWidget" id="StackedWidget.removeWidget" ref="eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.html#StackedWidget.removeWidget" />
       <keyword name="StackedWidget.setCurrentIndex" id="StackedWidget.setCurrentIndex" ref="eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.html#StackedWidget.setCurrentIndex" />
       <keyword name="StackedWidget.setCurrentWidget" id="StackedWidget.setCurrentWidget" ref="eric6.Plugins.ViewManagerPlugins.Listspace.Listspace.html#StackedWidget.setCurrentWidget" />
-      <keyword name="StandardReport" id="StandardReport" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#StandardReport" />
-      <keyword name="StandardReport (Constructor)" id="StandardReport (Constructor)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#StandardReport.__init__" />
-      <keyword name="StandardReport.error" id="StandardReport.error" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#StandardReport.error" />
-      <keyword name="StandardReport.error_args" id="StandardReport.error_args" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#StandardReport.error_args" />
-      <keyword name="StandardReport.get_file_results" id="StandardReport.get_file_results" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#StandardReport.get_file_results" />
-      <keyword name="StandardReport.init_file" id="StandardReport.init_file" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#StandardReport.init_file" />
+      <keyword name="StandardReport" id="StandardReport" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#StandardReport" />
+      <keyword name="StandardReport (Constructor)" id="StandardReport (Constructor)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#StandardReport.__init__" />
+      <keyword name="StandardReport.error" id="StandardReport.error" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#StandardReport.error" />
+      <keyword name="StandardReport.error_args" id="StandardReport.error_args" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#StandardReport.error_args" />
+      <keyword name="StandardReport.get_file_results" id="StandardReport.get_file_results" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#StandardReport.get_file_results" />
+      <keyword name="StandardReport.init_file" id="StandardReport.init_file" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#StandardReport.init_file" />
       <keyword name="StartDialog" id="StartDialog" ref="eric6.Debugger.StartDialog.html#StartDialog" />
       <keyword name="StartDialog (Constructor)" id="StartDialog (Constructor)" ref="eric6.Debugger.StartDialog.html#StartDialog.__init__" />
       <keyword name="StartDialog (Module)" id="StartDialog (Module)" ref="eric6.Debugger.StartDialog.html" />
@@ -12659,15 +12659,15 @@
       <keyword name="StatusMonitorLed.__vcsStateChanged" id="StatusMonitorLed.__vcsStateChanged" ref="eric6.VCS.StatusMonitorLed.html#StatusMonitorLed.__vcsStateChanged" />
       <keyword name="StatusMonitorLed._showContextMenu" id="StatusMonitorLed._showContextMenu" ref="eric6.VCS.StatusMonitorLed.html#StatusMonitorLed._showContextMenu" />
       <keyword name="StatusMonitorThread (Module)" id="StatusMonitorThread (Module)" ref="eric6.VCS.StatusMonitorThread.html" />
-      <keyword name="StyleGuide" id="StyleGuide" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#StyleGuide" />
-      <keyword name="StyleGuide (Constructor)" id="StyleGuide (Constructor)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#StyleGuide.__init__" />
-      <keyword name="StyleGuide.check_files" id="StyleGuide.check_files" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#StyleGuide.check_files" />
-      <keyword name="StyleGuide.excluded" id="StyleGuide.excluded" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#StyleGuide.excluded" />
-      <keyword name="StyleGuide.get_checks" id="StyleGuide.get_checks" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#StyleGuide.get_checks" />
-      <keyword name="StyleGuide.ignore_code" id="StyleGuide.ignore_code" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#StyleGuide.ignore_code" />
-      <keyword name="StyleGuide.init_report" id="StyleGuide.init_report" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#StyleGuide.init_report" />
-      <keyword name="StyleGuide.input_dir" id="StyleGuide.input_dir" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#StyleGuide.input_dir" />
-      <keyword name="StyleGuide.input_file" id="StyleGuide.input_file" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#StyleGuide.input_file" />
+      <keyword name="StyleGuide" id="StyleGuide" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#StyleGuide" />
+      <keyword name="StyleGuide (Constructor)" id="StyleGuide (Constructor)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#StyleGuide.__init__" />
+      <keyword name="StyleGuide.check_files" id="StyleGuide.check_files" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#StyleGuide.check_files" />
+      <keyword name="StyleGuide.excluded" id="StyleGuide.excluded" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#StyleGuide.excluded" />
+      <keyword name="StyleGuide.get_checks" id="StyleGuide.get_checks" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#StyleGuide.get_checks" />
+      <keyword name="StyleGuide.ignore_code" id="StyleGuide.ignore_code" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#StyleGuide.ignore_code" />
+      <keyword name="StyleGuide.init_report" id="StyleGuide.init_report" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#StyleGuide.init_report" />
+      <keyword name="StyleGuide.input_dir" id="StyleGuide.input_dir" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#StyleGuide.input_dir" />
+      <keyword name="StyleGuide.input_file" id="StyleGuide.input_file" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#StyleGuide.input_file" />
       <keyword name="Subversion" id="Subversion" ref="eric6.Plugins.VcsPlugins.vcsPySvn.subversion.html#Subversion" />
       <keyword name="Subversion" id="Subversion" ref="eric6.Plugins.VcsPlugins.vcsSubversion.subversion.html#Subversion" />
       <keyword name="Subversion (Constructor)" id="Subversion (Constructor)" ref="eric6.Plugins.VcsPlugins.vcsPySvn.subversion.html#Subversion.__init__" />
@@ -16010,32 +16010,33 @@
       <keyword name="__setAction" id="__setAction" ref="eric6.Preferences.Shortcuts.html#__setAction" />
       <keyword name="__showwarning" id="__showwarning" ref="eric6.Utilities.__init__.html#__showwarning" />
       <keyword name="__syntaxAndPyflakesCheck" id="__syntaxAndPyflakesCheck" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheck.html#__syntaxAndPyflakesCheck" />
-      <keyword name="_add_check" id="_add_check" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#_add_check" />
+      <keyword name="_add_check" id="_add_check" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#_add_check" />
       <keyword name="_buildChildrenLists" id="_buildChildrenLists" ref="eric6.Graphics.GraphicsUtilities.html#_buildChildrenLists" />
       <keyword name="_debugclient_start_new_thread" id="_debugclient_start_new_thread" ref="eric6.DebugClients.Python2.DebugClientThreads.html#_debugclient_start_new_thread" />
       <keyword name="_debugclient_start_new_thread" id="_debugclient_start_new_thread" ref="eric6.DebugClients.Python3.DebugClientThreads.html#_debugclient_start_new_thread" />
       <keyword name="_encode_base64" id="_encode_base64" ref="eric6.UI.EmailDialog.html#_encode_base64" />
-      <keyword name="_get_parameters" id="_get_parameters" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#_get_parameters" />
+      <keyword name="_get_parameters" id="_get_parameters" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#_get_parameters" />
       <keyword name="_getfullargs" id="_getfullargs" ref="eric6.DebugClients.Python3.DebugUtilities.html#_getfullargs" />
       <keyword name="_indent" id="_indent" ref="eric6.Utilities.ClassBrowsers.pyclbr.html#_indent" />
       <keyword name="_indent" id="_indent" ref="eric6.Utilities.ModuleParser.html#_indent" />
-      <keyword name="_is_eol_token" id="_is_eol_token" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#_is_eol_token" />
-      <keyword name="_is_eol_token_1" id="_is_eol_token_1" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#_is_eol_token_1" />
-      <keyword name="_main" id="_main" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#_main" />
-      <keyword name="_parse_multi_options" id="_parse_multi_options" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#_parse_multi_options" />
+      <keyword name="_is_eol_token" id="_is_eol_token" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#_is_eol_token" />
+      <keyword name="_is_eol_token_1" id="_is_eol_token_1" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#_is_eol_token_1" />
+      <keyword name="_main" id="_main" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#_main" />
+      <keyword name="_parse_multi_options" id="_parse_multi_options" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#_parse_multi_options" />
       <keyword name="_percentReplacementFunc" id="_percentReplacementFunc" ref="eric6.Utilities.__init__.html#_percentReplacementFunc" />
       <keyword name="absolutePath" id="absolutePath" ref="eric6.Utilities.__init__.html#absolutePath" />
       <keyword name="absoluteUniversalPath" id="absoluteUniversalPath" ref="eric6.Utilities.__init__.html#absoluteUniversalPath" />
       <keyword name="addActions" id="addActions" ref="eric6.E5Gui.E5Action.html#addActions" />
       <keyword name="addSearchPath" id="addSearchPath" ref="eric6.UI.PixmapCache.html#addSearchPath" />
+      <keyword name="ambiguous_identifier" id="ambiguous_identifier" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#ambiguous_identifier" />
       <keyword name="amendConfig" id="amendConfig" ref="eric6.Plugins.VcsPlugins.vcsPySvn.SvnUtilities.html#amendConfig" />
       <keyword name="amendConfig" id="amendConfig" ref="eric6.Plugins.VcsPlugins.vcsSubversion.SvnUtilities.html#amendConfig" />
       <keyword name="analyze" id="analyze" ref="eric6.DataViews.CodeMetrics.html#analyze" />
       <keyword name="append_PKCS7_padding" id="append_PKCS7_padding" ref="eric6.Utilities.crypto.py3AES.html#append_PKCS7_padding" />
       <keyword name="batchCheck" id="batchCheck" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#batchCheck" />
       <keyword name="binplistlib (Module)" id="binplistlib (Module)" ref="eric6.Utilities.binplistlib.html" />
-      <keyword name="blank_lines" id="blank_lines" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#blank_lines" />
-      <keyword name="break_around_binary_operator" id="break_around_binary_operator" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#break_around_binary_operator" />
+      <keyword name="blank_lines" id="blank_lines" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#blank_lines" />
+      <keyword name="break_around_binary_operator" id="break_around_binary_operator" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#break_around_binary_operator" />
       <keyword name="changeRememberedMaster" id="changeRememberedMaster" ref="eric6.Utilities.crypto.__init__.html#changeRememberedMaster" />
       <keyword name="check" id="check" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#check" />
       <keyword name="checkBlacklistedVersions" id="checkBlacklistedVersions" ref="eric6.Globals.__init__.html#checkBlacklistedVersions" />
@@ -16049,20 +16050,20 @@
       <keyword name="codeStyleBatchCheck" id="codeStyleBatchCheck" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html#codeStyleBatchCheck" />
       <keyword name="codeStyleCheck" id="codeStyleCheck" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html#codeStyleCheck" />
       <keyword name="compactPath" id="compactPath" ref="eric6.Utilities.__init__.html#compactPath" />
-      <keyword name="comparison_negative" id="comparison_negative" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#comparison_negative" />
-      <keyword name="comparison_to_singleton" id="comparison_to_singleton" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#comparison_to_singleton" />
-      <keyword name="comparison_type" id="comparison_type" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#comparison_type" />
+      <keyword name="comparison_negative" id="comparison_negative" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#comparison_negative" />
+      <keyword name="comparison_to_singleton" id="comparison_to_singleton" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#comparison_to_singleton" />
+      <keyword name="comparison_type" id="comparison_type" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#comparison_type" />
       <keyword name="compatibility_fixes (Module)" id="compatibility_fixes (Module)" ref="eric6.Globals.compatibility_fixes.html" />
       <keyword name="compileUiFiles" id="compileUiFiles" ref="eric6.Utilities.uic.html#compileUiFiles" />
       <keyword name="compileUiFiles" id="compileUiFiles" ref="eric6.compileUiFiles.html#compileUiFiles" />
       <keyword name="compileUiFiles" id="compileUiFiles" ref="eric6.install.html#compileUiFiles" />
       <keyword name="compileUiFiles (Module)" id="compileUiFiles (Module)" ref="eric6.compileUiFiles.html" />
       <keyword name="completeFormData" id="completeFormData" ref="eric6.WebBrowser.Tools.Scripts.html#completeFormData" />
-      <keyword name="compound_statements" id="compound_statements" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#compound_statements" />
+      <keyword name="compound_statements" id="compound_statements" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#compound_statements" />
       <keyword name="containsSpace" id="containsSpace" ref="eric6.WebBrowser.Tools.WebBrowserTools.html#containsSpace" />
       <keyword name="contentSniff" id="contentSniff" ref="eric6.Helpviewer.HelpBrowserWV.html#contentSniff" />
       <keyword name="context_diff" id="context_diff" ref="eric6.UI.DiffDialog.html#context_diff" />
-      <keyword name="continued_indentation" id="continued_indentation" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#continued_indentation" />
+      <keyword name="continued_indentation" id="continued_indentation" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#continued_indentation" />
       <keyword name="convertLineEnds" id="convertLineEnds" ref="eric6.Utilities.__init__.html#convertLineEnds" />
       <keyword name="convertPasswords" id="convertPasswords" ref="eric6.Preferences.__init__.html#convertPasswords" />
       <keyword name="copyDesktopFile" id="copyDesktopFile" ref="eric6.install.html#copyDesktopFile" />
@@ -16228,8 +16229,8 @@
       <keyword name="exit" id="exit" ref="eric6.install.html#exit" />
       <keyword name="exit" id="exit" ref="eric6.uninstall-debugclients.html#exit" />
       <keyword name="exit" id="exit" ref="eric6.uninstall.html#exit" />
-      <keyword name="expand_indent" id="expand_indent" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#expand_indent" />
-      <keyword name="explicit_line_join" id="explicit_line_join" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#explicit_line_join" />
+      <keyword name="expand_indent" id="expand_indent" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#expand_indent" />
+      <keyword name="explicit_line_join" id="explicit_line_join" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#explicit_line_join" />
       <keyword name="exportPreferences" id="exportPreferences" ref="eric6.Preferences.__init__.html#exportPreferences" />
       <keyword name="exportShortcuts" id="exportShortcuts" ref="eric6.Preferences.Shortcuts.html#exportShortcuts" />
       <keyword name="extractFlags" id="extractFlags" ref="eric6.Utilities.__init__.html#extractFlags" />
@@ -16237,11 +16238,11 @@
       <keyword name="extractLineFlags" id="extractLineFlags" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html#extractLineFlags" />
       <keyword name="extractLineFlags" id="extractLineFlags" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheck.html#extractLineFlags" />
       <keyword name="extractLineFlags" id="extractLineFlags" ref="eric6.Utilities.__init__.html#extractLineFlags" />
-      <keyword name="extraneous_whitespace" id="extraneous_whitespace" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#extraneous_whitespace" />
+      <keyword name="extraneous_whitespace" id="extraneous_whitespace" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#extraneous_whitespace" />
       <keyword name="factory" id="factory" ref="eric6.VCS.__init__.html#factory" />
       <keyword name="factory" id="factory" ref="eric6.ViewManager.__init__.html#factory" />
       <keyword name="fetch (Module)" id="fetch (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.FetchExtension.fetch.html" />
-      <keyword name="filename_match" id="filename_match" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#filename_match" />
+      <keyword name="filename_match" id="filename_match" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#filename_match" />
       <keyword name="filterAnsiSequences" id="filterAnsiSequences" ref="eric6.Utilities.__init__.html#filterAnsiSequences" />
       <keyword name="filterCharsFromFilename" id="filterCharsFromFilename" ref="eric6.Helpviewer.HelpUtilities.html#filterCharsFromFilename" />
       <keyword name="filterCharsFromFilename" id="filterCharsFromFilename" ref="eric6.WebBrowser.Tools.WebBrowserTools.html#filterCharsFromFilename" />
@@ -16395,7 +16396,7 @@
       <keyword name="get_class_members" id="get_class_members" ref="eric6.DebugClients.Python3.FlexCompleter.html#get_class_members" />
       <keyword name="get_coding" id="get_coding" ref="eric6.Utilities.__init__.html#get_coding" />
       <keyword name="get_codingBytes" id="get_codingBytes" ref="eric6.Utilities.__init__.html#get_codingBytes" />
-      <keyword name="get_parser" id="get_parser" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#get_parser" />
+      <keyword name="get_parser" id="get_parser" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#get_parser" />
       <keyword name="getargvalues" id="getargvalues" ref="eric6.DebugClients.Python3.DebugUtilities.html#getargvalues" />
       <keyword name="getpass" id="getpass" ref="eric6.DebugClients.Python2.getpass.html#getpass" />
       <keyword name="getpass" id="getpass" ref="eric6.DebugClients.Python3.getpass.html#getpass" />
@@ -16416,8 +16417,8 @@
       <keyword name="idlclbr (Module)" id="idlclbr (Module)" ref="eric6.Utilities.ClassBrowsers.idlclbr.html" />
       <keyword name="importPreferences" id="importPreferences" ref="eric6.Preferences.__init__.html#importPreferences" />
       <keyword name="importShortcuts" id="importShortcuts" ref="eric6.Preferences.Shortcuts.html#importShortcuts" />
-      <keyword name="imports_on_separate_lines" id="imports_on_separate_lines" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#imports_on_separate_lines" />
-      <keyword name="indentation" id="indentation" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#indentation" />
+      <keyword name="imports_on_separate_lines" id="imports_on_separate_lines" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#imports_on_separate_lines" />
+      <keyword name="indentation" id="indentation" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#indentation" />
       <keyword name="information" id="information" ref="eric6.E5Gui.E5MessageBox.html#information" />
       <keyword name="initBatchService" id="initBatchService" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html#initBatchService" />
       <keyword name="initBatchService" id="initBatchService" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheck.html#initBatchService" />
@@ -16437,7 +16438,7 @@
       <keyword name="initService" id="initService" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheck.html#initService" />
       <keyword name="initService" id="initService" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsCheckSyntax.html#initService" />
       <keyword name="initService" id="initService" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#initService" />
-      <keyword name="init_checks_registry" id="init_checks_registry" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#init_checks_registry" />
+      <keyword name="init_checks_registry" id="init_checks_registry" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#init_checks_registry" />
       <keyword name="initializeResourceSearchPath" id="initializeResourceSearchPath" ref="eric6.Toolbox.Startup.html#initializeResourceSearchPath" />
       <keyword name="install (Module)" id="install (Module)" ref="eric6.install.html" />
       <keyword name="install-debugclients (Module)" id="install-debugclients (Module)" ref="eric6.install-debugclients.html" />
@@ -16459,9 +16460,9 @@
       <keyword name="isValidIPv4Address" id="isValidIPv4Address" ref="eric6.E5Network.__init__.html#isValidIPv4Address" />
       <keyword name="isValidIPv6Address" id="isValidIPv6Address" ref="eric6.E5Network.__init__.html#isValidIPv6Address" />
       <keyword name="isWindowsPlatform" id="isWindowsPlatform" ref="eric6.Globals.__init__.html#isWindowsPlatform" />
-      <keyword name="is_binary_operator" id="is_binary_operator" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#is_binary_operator" />
+      <keyword name="is_binary_operator" id="is_binary_operator" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#is_binary_operator" />
       <keyword name="is_stream_binary_plist" id="is_stream_binary_plist" ref="eric6.Utilities.binplistlib.html#is_stream_binary_plist" />
-      <keyword name="is_string_literal" id="is_string_literal" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#is_string_literal" />
+      <keyword name="is_string_literal" id="is_string_literal" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#is_string_literal" />
       <keyword name="isinpath" id="isinpath" ref="eric6.Utilities.__init__.html#isinpath" />
       <keyword name="joinAsUnicode" id="joinAsUnicode" ref="eric6.Globals.compatibility_fixes.html#joinAsUnicode" />
       <keyword name="joinext" id="joinext" ref="eric6.Utilities.__init__.html#joinext" />
@@ -16507,20 +16508,21 @@
       <keyword name="main" id="main" ref="eric6.uninstall-debugclients.html#main" />
       <keyword name="main" id="main" ref="eric6.uninstall.html#main" />
       <keyword name="makeAppInfo" id="makeAppInfo" ref="eric6.Globals.AppInfo.html#makeAppInfo" />
-      <keyword name="maximum_line_length" id="maximum_line_length" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#maximum_line_length" />
+      <keyword name="maximum_line_length" id="maximum_line_length" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#maximum_line_length" />
       <keyword name="mccabe (Module)" id="mccabe (Module)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.mccabe.html" />
       <keyword name="messageHandler" id="messageHandler" ref="eric6.E5Gui.E5ErrorMessage.html#messageHandler" />
       <keyword name="messageHandlerInstalled" id="messageHandlerInstalled" ref="eric6.E5Gui.E5ErrorMessage.html#messageHandlerInstalled" />
       <keyword name="mimeType" id="mimeType" ref="eric6.Utilities.MimeTypes.html#mimeType" />
-      <keyword name="missing_whitespace" id="missing_whitespace" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#missing_whitespace" />
-      <keyword name="missing_whitespace_around_operator" id="missing_whitespace_around_operator" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#missing_whitespace_around_operator" />
-      <keyword name="module_imports_on_top_of_file" id="module_imports_on_top_of_file" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#module_imports_on_top_of_file" />
-      <keyword name="mute_string" id="mute_string" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#mute_string" />
+      <keyword name="missing_whitespace" id="missing_whitespace" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#missing_whitespace" />
+      <keyword name="missing_whitespace_after_import_keyword" id="missing_whitespace_after_import_keyword" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#missing_whitespace_after_import_keyword" />
+      <keyword name="missing_whitespace_around_operator" id="missing_whitespace_around_operator" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#missing_whitespace_around_operator" />
+      <keyword name="module_imports_on_top_of_file" id="module_imports_on_top_of_file" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#module_imports_on_top_of_file" />
+      <keyword name="mute_string" id="mute_string" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#mute_string" />
       <keyword name="normabsjoinpath" id="normabsjoinpath" ref="eric6.Utilities.__init__.html#normabsjoinpath" />
       <keyword name="normabspath" id="normabspath" ref="eric6.Utilities.__init__.html#normabspath" />
       <keyword name="normalizeCode" id="normalizeCode" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheck.html#normalizeCode" />
       <keyword name="normalizeCode" id="normalizeCode" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.jsCheckSyntax.html#normalizeCode" />
-      <keyword name="normalize_paths" id="normalize_paths" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#normalize_paths" />
+      <keyword name="normalize_paths" id="normalize_paths" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#normalize_paths" />
       <keyword name="normalize_ws" id="normalize_ws" ref="eric6.E5Network.E5RFC6266.html#normalize_ws" />
       <keyword name="normcaseabspath" id="normcaseabspath" ref="eric6.Utilities.__init__.html#normcaseabspath" />
       <keyword name="normcasepath" id="normcasepath" ref="eric6.Utilities.__init__.html#normcasepath" />
@@ -16534,10 +16536,9 @@
       <keyword name="parse_ext_value" id="parse_ext_value" ref="eric6.E5Network.E5RFC6266.html#parse_ext_value" />
       <keyword name="parse_headers" id="parse_headers" ref="eric6.E5Network.E5RFC6266.html#parse_headers" />
       <keyword name="parse_headers_1" id="parse_headers_1" ref="eric6.E5Network.E5RFC6266.html#parse_headers_1" />
-      <keyword name="parse_udiff" id="parse_udiff" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#parse_udiff" />
+      <keyword name="parse_udiff" id="parse_udiff" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#parse_udiff" />
       <keyword name="patch_modpython (Module)" id="patch_modpython (Module)" ref="eric6.patch_modpython.html" />
       <keyword name="pbkdf2" id="pbkdf2" ref="eric6.Utilities.crypto.py3PBKDF2.html#pbkdf2" />
-      <keyword name="pep8 (Module)" id="pep8 (Module)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html" />
       <keyword name="pixmapFromByteArray" id="pixmapFromByteArray" ref="eric6.WebBrowser.Tools.WebBrowserTools.html#pixmapFromByteArray" />
       <keyword name="pixmapToByteArray" id="pixmapToByteArray" ref="eric6.WebBrowser.Tools.WebBrowserTools.html#pixmapToByteArray" />
       <keyword name="pixmapToDataUrl" id="pixmapToDataUrl" ref="eric6.WebBrowser.Tools.WebBrowserTools.html#pixmapToDataUrl" />
@@ -16553,7 +16554,7 @@
       <keyword name="previewPix" id="previewPix" ref="eric6.Plugins.PluginVmTabview.html#previewPix" />
       <keyword name="printerr" id="printerr" ref="eric6.DebugClients.Python2.DebugBase.html#printerr" />
       <keyword name="printerr" id="printerr" ref="eric6.DebugClients.Python3.DebugBase.html#printerr" />
-      <keyword name="process_options" id="process_options" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#process_options" />
+      <keyword name="process_options" id="process_options" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#process_options" />
       <keyword name="process_tokens" id="process_tokens" ref="eric6.Plugins.CheckerPlugins.Tabnanny.Tabnanny.html#process_tokens" />
       <keyword name="proxyAuthenticationRequired" id="proxyAuthenticationRequired" ref="eric6.E5Network.E5NetworkProxyFactory.html#proxyAuthenticationRequired" />
       <keyword name="purge (Module)" id="purge (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.PurgeExtension.purge.html" />
@@ -16568,10 +16569,11 @@
       <keyword name="py3AES (Module)" id="py3AES (Module)" ref="eric6.Utilities.crypto.py3AES.html" />
       <keyword name="py3PBKDF2 (Module)" id="py3PBKDF2 (Module)" ref="eric6.Utilities.crypto.py3PBKDF2.html" />
       <keyword name="pyclbr (Module)" id="pyclbr (Module)" ref="eric6.Utilities.ClassBrowsers.pyclbr.html" />
-      <keyword name="python_3000_backticks" id="python_3000_backticks" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#python_3000_backticks" />
-      <keyword name="python_3000_has_key" id="python_3000_has_key" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#python_3000_has_key" />
-      <keyword name="python_3000_not_equal" id="python_3000_not_equal" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#python_3000_not_equal" />
-      <keyword name="python_3000_raise_comma" id="python_3000_raise_comma" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#python_3000_raise_comma" />
+      <keyword name="pycodestyle (Module)" id="pycodestyle (Module)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html" />
+      <keyword name="python_3000_backticks" id="python_3000_backticks" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#python_3000_backticks" />
+      <keyword name="python_3000_has_key" id="python_3000_has_key" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#python_3000_has_key" />
+      <keyword name="python_3000_not_equal" id="python_3000_not_equal" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#python_3000_not_equal" />
+      <keyword name="python_3000_raise_comma" id="python_3000_raise_comma" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#python_3000_raise_comma" />
       <keyword name="qtHandler" id="qtHandler" ref="eric6.E5Gui.E5ErrorMessage.html#qtHandler" />
       <keyword name="question" id="question" ref="eric6.E5Gui.E5MessageBox.html#question" />
       <keyword name="queues (Module)" id="queues (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.html" />
@@ -16588,9 +16590,9 @@
       <keyword name="readShortcuts" id="readShortcuts" ref="eric6.Preferences.Shortcuts.html#readShortcuts" />
       <keyword name="readStringFromStream" id="readStringFromStream" ref="eric6.Utilities.__init__.html#readStringFromStream" />
       <keyword name="readToolGroups" id="readToolGroups" ref="eric6.Preferences.__init__.html#readToolGroups" />
-      <keyword name="read_config" id="read_config" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#read_config" />
-      <keyword name="readlines" id="readlines" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#readlines" />
-      <keyword name="readlines_1" id="readlines_1" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#readlines_1" />
+      <keyword name="read_config" id="read_config" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#read_config" />
+      <keyword name="readlines" id="readlines" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#readlines" />
+      <keyword name="readlines_1" id="readlines_1" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#readlines_1" />
       <keyword name="readmodule" id="readmodule" ref="eric6.Utilities.ClassBrowsers.__init__.html#readmodule" />
       <keyword name="readmodule_ex" id="readmodule_ex" ref="eric6.Utilities.ClassBrowsers.idlclbr.html#readmodule_ex" />
       <keyword name="readmodule_ex" id="readmodule_ex" ref="eric6.Utilities.ClassBrowsers.jsclbr.html#readmodule_ex" />
@@ -16599,7 +16601,7 @@
       <keyword name="rebase (Module)" id="rebase (Module)" ref="eric6.Plugins.VcsPlugins.vcsMercurial.RebaseExtension.rebase.html" />
       <keyword name="registerLexer" id="registerLexer" ref="eric6.QScintilla.Lexers.__init__.html#registerLexer" />
       <keyword name="registerView" id="registerView" ref="eric6.WebBrowser.WebInspector.html#registerView" />
-      <keyword name="register_check" id="register_check" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#register_check" />
+      <keyword name="register_check" id="register_check" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#register_check" />
       <keyword name="rehashPassword" id="rehashPassword" ref="eric6.Utilities.crypto.py3PBKDF2.html#rehashPassword" />
       <keyword name="relativePath" id="relativePath" ref="eric6.Utilities.__init__.html#relativePath" />
       <keyword name="relativeUniversalPath" id="relativeUniversalPath" ref="eric6.Utilities.__init__.html#relativeUniversalPath" />
@@ -16690,7 +16692,7 @@
       <keyword name="startDebugger" id="startDebugger" ref="eric6.DebugClients.Python2.eric6dbgstub.html#startDebugger" />
       <keyword name="startDebugger" id="startDebugger" ref="eric6.DebugClients.Python3.eric6dbgstub.html#startDebugger" />
       <keyword name="startswithPath" id="startswithPath" ref="eric6.Utilities.__init__.html#startswithPath" />
-      <keyword name="stdin_get_value" id="stdin_get_value" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#stdin_get_value" />
+      <keyword name="stdin_get_value" id="stdin_get_value" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#stdin_get_value" />
       <keyword name="strGroup" id="strGroup" ref="eric6.Globals.__init__.html#strGroup" />
       <keyword name="strip_PKCS7_padding" id="strip_PKCS7_padding" ref="eric6.Utilities.crypto.py3AES.html#strip_PKCS7_padding" />
       <keyword name="subversion (Module)" id="subversion (Module)" ref="eric6.Plugins.VcsPlugins.vcsPySvn.subversion.html" />
@@ -16699,8 +16701,8 @@
       <keyword name="syncPreferences" id="syncPreferences" ref="eric6.Preferences.__init__.html#syncPreferences" />
       <keyword name="syntaxAndPyflakesBatchCheck" id="syntaxAndPyflakesBatchCheck" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheck.html#syntaxAndPyflakesBatchCheck" />
       <keyword name="syntaxAndPyflakesCheck" id="syntaxAndPyflakesCheck" ref="eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheck.html#syntaxAndPyflakesCheck" />
-      <keyword name="tabs_obsolete" id="tabs_obsolete" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#tabs_obsolete" />
-      <keyword name="tabs_or_spaces" id="tabs_or_spaces" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#tabs_or_spaces" />
+      <keyword name="tabs_obsolete" id="tabs_obsolete" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#tabs_obsolete" />
+      <keyword name="tabs_or_spaces" id="tabs_or_spaces" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#tabs_or_spaces" />
       <keyword name="timeString" id="timeString" ref="eric6.Helpviewer.Download.DownloadUtilities.html#timeString" />
       <keyword name="timeString" id="timeString" ref="eric6.WebBrowser.Download.DownloadUtilities.html#timeString" />
       <keyword name="toBool" id="toBool" ref="eric6.Globals.__init__.html#toBool" />
@@ -16715,8 +16717,8 @@
       <keyword name="toNativeSeparators" id="toNativeSeparators" ref="eric6.Utilities.__init__.html#toNativeSeparators" />
       <keyword name="toSecondLevelDomain" id="toSecondLevelDomain" ref="eric6.Helpviewer.AdBlock.AdBlockRule.html#toSecondLevelDomain" />
       <keyword name="toSecondLevelDomain" id="toSecondLevelDomain" ref="eric6.WebBrowser.AdBlock.AdBlockRule.html#toSecondLevelDomain" />
-      <keyword name="trailing_blank_lines" id="trailing_blank_lines" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#trailing_blank_lines" />
-      <keyword name="trailing_whitespace" id="trailing_whitespace" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#trailing_whitespace" />
+      <keyword name="trailing_blank_lines" id="trailing_blank_lines" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#trailing_blank_lines" />
+      <keyword name="trailing_whitespace" id="trailing_whitespace" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#trailing_whitespace" />
       <keyword name="translate" id="translate" ref="eric6.Globals.__init__.html#translate" />
       <keyword name="translations (Module)" id="translations (Module)" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.translations.html" />
       <keyword name="uiStartUp" id="uiStartUp" ref="eric6.eric6.html#uiStartUp" />
@@ -16729,6 +16731,7 @@
       <keyword name="uninstallEricDebugClients" id="uninstallEricDebugClients" ref="eric6.uninstall-debugclients.html#uninstallEricDebugClients" />
       <keyword name="unregisterLexer" id="unregisterLexer" ref="eric6.QScintilla.Lexers.__init__.html#unregisterLexer" />
       <keyword name="unregisterView" id="unregisterView" ref="eric6.WebBrowser.WebInspector.html#unregisterView" />
+      <keyword name="update_counts" id="update_counts" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#update_counts" />
       <keyword name="usage" id="usage" ref="eric6.Toolbox.Startup.html#usage" />
       <keyword name="usage" id="usage" ref="eric6.eric6_api.html#usage" />
       <keyword name="usage" id="usage" ref="eric6.eric6_doc.html#usage" />
@@ -16746,12 +16749,12 @@
       <keyword name="version" id="version" ref="eric6.eric6_api.html#version" />
       <keyword name="version" id="version" ref="eric6.eric6_doc.html#version" />
       <keyword name="warning" id="warning" ref="eric6.E5Gui.E5MessageBox.html#warning" />
-      <keyword name="whitespace_around_comma" id="whitespace_around_comma" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#whitespace_around_comma" />
-      <keyword name="whitespace_around_keywords" id="whitespace_around_keywords" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#whitespace_around_keywords" />
-      <keyword name="whitespace_around_named_parameter_equals" id="whitespace_around_named_parameter_equals" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#whitespace_around_named_parameter_equals" />
-      <keyword name="whitespace_around_operator" id="whitespace_around_operator" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#whitespace_around_operator" />
-      <keyword name="whitespace_before_comment" id="whitespace_before_comment" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#whitespace_before_comment" />
-      <keyword name="whitespace_before_parameters" id="whitespace_before_parameters" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html#whitespace_before_parameters" />
+      <keyword name="whitespace_around_comma" id="whitespace_around_comma" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#whitespace_around_comma" />
+      <keyword name="whitespace_around_keywords" id="whitespace_around_keywords" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#whitespace_around_keywords" />
+      <keyword name="whitespace_around_named_parameter_equals" id="whitespace_around_named_parameter_equals" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#whitespace_around_named_parameter_equals" />
+      <keyword name="whitespace_around_operator" id="whitespace_around_operator" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#whitespace_around_operator" />
+      <keyword name="whitespace_before_comment" id="whitespace_before_comment" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#whitespace_before_comment" />
+      <keyword name="whitespace_before_parameters" id="whitespace_before_parameters" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#whitespace_before_parameters" />
       <keyword name="wildcardMatch" id="wildcardMatch" ref="eric6.Helpviewer.GreaseMonkey.GreaseMonkeyUrlMatcher.html#wildcardMatch" />
       <keyword name="win32_GetUserName" id="win32_GetUserName" ref="eric6.Utilities.__init__.html#win32_GetUserName" />
       <keyword name="win32_Kill" id="win32_Kill" ref="eric6.Utilities.__init__.html#win32_Kill" />
@@ -17146,7 +17149,7 @@
       <file>eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html</file>
       <file>eric6.Plugins.CheckerPlugins.CodeStyleChecker.NamingStyleChecker.html</file>
       <file>eric6.Plugins.CheckerPlugins.CodeStyleChecker.mccabe.html</file>
-      <file>eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html</file>
+      <file>eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html</file>
       <file>eric6.Plugins.CheckerPlugins.CodeStyleChecker.translations.html</file>
       <file>eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheck.html</file>
       <file>eric6.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheckService.html</file>
--- a/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html	Sun Sep 04 16:50:23 2016 +0200
+++ b/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html	Sun Sep 04 17:16:38 2016 +0200
@@ -66,7 +66,7 @@
     Class implementing a special report to be used with our dialog.
 </p>
 <h3>Derived from</h3>
-pep8.BaseReport
+pycodestyle.BaseReport
 <h3>Class Attributes</h3>
 <table>
 <tr><td>None</td></tr>
--- a/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleFixer.html	Sun Sep 04 16:50:23 2016 +0200
+++ b/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleFixer.html	Sun Sep 04 17:16:38 2016 +0200
@@ -1644,7 +1644,7 @@
 <td>Private method to build a logical line from a list of tokens.</td>
 </tr><tr>
 <td><a href="#IndentationWrapper.pep8Expected">pep8Expected</a></td>
-<td>Public method to replicate logic in pep8.py, to know what level to indent things to.</td>
+<td>Public method to replicate logic in pycodestyle.py, to know what level to indent things to.</td>
 </tr>
 </table>
 <h3>Static Methods</h3>
@@ -1681,8 +1681,8 @@
 <h4>IndentationWrapper.pep8Expected</h4>
 <b>pep8Expected</b>(<i></i>)
 <p>
-        Public method to replicate logic in pep8.py, to know what level to
-        indent things to.
+        Public method to replicate logic in pycodestyle.py, to know what level
+        to indent things to.
 </p><dl>
 <dt>Returns:</dt>
 <dd>
--- a/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.NamingStyleChecker.html	Sun Sep 04 16:50:23 2016 +0200
+++ b/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.NamingStyleChecker.html	Sun Sep 04 17:16:38 2016 +0200
@@ -58,7 +58,7 @@
 <table>
 <tr>
 <td><a href="#NamingStyleChecker.__init__">NamingStyleChecker</a></td>
-<td>Constructor (according to 'extended' pep8.py API)</td>
+<td>Constructor (according to 'extended' pycodestyle.py API)</td>
 </tr><tr>
 <td><a href="#NamingStyleChecker.__checkClassName">__checkClassName</a></td>
 <td>Private class to check the given node for class name conventions (N801).</td>
@@ -103,7 +103,7 @@
 <td>Private method to scan the given AST tree.</td>
 </tr><tr>
 <td><a href="#NamingStyleChecker.run">run</a></td>
-<td>Public method run by the pep8.py checker.</td>
+<td>Public method run by the pycodestyle.py checker.</td>
 </tr><tr>
 <td><a href="#NamingStyleChecker.unpackArgs">unpackArgs</a></td>
 <td>Local helper function to unpack function argument names.</td>
@@ -117,7 +117,7 @@
 <h4>NamingStyleChecker (Constructor)</h4>
 <b>NamingStyleChecker</b>(<i>tree, filename, options</i>)
 <p>
-        Constructor (according to 'extended' pep8.py API)
+        Constructor (according to 'extended' pycodestyle.py API)
 </p><dl>
 <dt><i>tree</i></dt>
 <dd>
@@ -127,7 +127,7 @@
 name of the source file (string)
 </dd><dt><i>options</i></dt>
 <dd>
-options as parsed by pep8.StyleGuide
+options as parsed by pycodestyle.StyleGuide
 </dd>
 </dl><a NAME="NamingStyleChecker.__checkClassName" ID="NamingStyleChecker.__checkClassName"></a>
 <h4>NamingStyleChecker.__checkClassName</h4>
@@ -389,7 +389,7 @@
 <h4>NamingStyleChecker.run</h4>
 <b>run</b>(<i></i>)
 <p>
-        Public method run by the pep8.py checker.
+        Public method run by the pycodestyle.py checker.
 </p><dl>
 <dt>Returns:</dt>
 <dd>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html	Sun Sep 04 17:16:38 2016 +0200
@@ -0,0 +1,1502 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle</h1>
+
+<h3>Global Attributes</h3>
+<table>
+<tr><td>ARITHMETIC_OP</td></tr><tr><td>BENCHMARK_KEYS</td></tr><tr><td>COMMENT_WITH_NL</td></tr><tr><td>COMPARE_NEGATIVE_REGEX</td></tr><tr><td>COMPARE_SINGLETON_REGEX</td></tr><tr><td>COMPARE_TYPE_REGEX</td></tr><tr><td>DEFAULT_EXCLUDE</td></tr><tr><td>DEFAULT_IGNORE</td></tr><tr><td>DOCSTRING_REGEX</td></tr><tr><td>ERRORCODE_REGEX</td></tr><tr><td>EXTRANEOUS_WHITESPACE_REGEX</td></tr><tr><td>HUNK_REGEX</td></tr><tr><td>INDENT_REGEX</td></tr><tr><td>KEYWORDS</td></tr><tr><td>KEYWORD_REGEX</td></tr><tr><td>LAMBDA_REGEX</td></tr><tr><td>MAX_LINE_LENGTH</td></tr><tr><td>NEWLINE</td></tr><tr><td>OPERATOR_REGEX</td></tr><tr><td>PROJECT_CONFIG</td></tr><tr><td>PyCF_ONLY_AST</td></tr><tr><td>RAISE_COMMA_REGEX</td></tr><tr><td>REPORT_FORMAT</td></tr><tr><td>RERAISE_COMMA_REGEX</td></tr><tr><td>SINGLETONS</td></tr><tr><td>SKIP_COMMENTS</td></tr><tr><td>SKIP_TOKENS</td></tr><tr><td>TESTSUITE_PATH</td></tr><tr><td>UNARY_OPERATORS</td></tr><tr><td>WHITESPACE</td></tr><tr><td>WHITESPACE_AFTER_COMMA_REGEX</td></tr><tr><td>WS_NEEDED_OPERATORS</td></tr><tr><td>WS_OPTIONAL_OPERATORS</td></tr><tr><td>__version__</td></tr><tr><td>_checks</td></tr><tr><td>noqa</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#BaseReport">BaseReport</a></td>
+<td>Collect the results of the checks.</td>
+</tr><tr>
+<td><a href="#Checker">Checker</a></td>
+<td>Load a Python source file, tokenize it, check coding style.</td>
+</tr><tr>
+<td><a href="#DiffReport">DiffReport</a></td>
+<td>Collect and print the results for the changed lines only.</td>
+</tr><tr>
+<td><a href="#FileReport">FileReport</a></td>
+<td>Collect the results of the checks and print only the filenames.</td>
+</tr><tr>
+<td><a href="#StandardReport">StandardReport</a></td>
+<td>Collect and print the results of the checks.</td>
+</tr><tr>
+<td><a href="#StyleGuide">StyleGuide</a></td>
+<td>Initialize a PEP-8 instance with few options.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr>
+<td><a href="#_add_check">_add_check</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#_get_parameters">_get_parameters</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#_is_eol_token">_is_eol_token</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#_is_eol_token_1">_is_eol_token</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#_main">_main</a></td>
+<td>Parse options and run checks on Python source.</td>
+</tr><tr>
+<td><a href="#_parse_multi_options">_parse_multi_options</a></td>
+<td>Split and strip and discard empties.</td>
+</tr><tr>
+<td><a href="#ambiguous_identifier">ambiguous_identifier</a></td>
+<td>Never use the characters 'l', 'O', or 'I' as variable names.</td>
+</tr><tr>
+<td><a href="#blank_lines">blank_lines</a></td>
+<td>Separate top-level function and class definitions with two blank lines.</td>
+</tr><tr>
+<td><a href="#break_around_binary_operator">break_around_binary_operator</a></td>
+<td>Avoid breaks before binary operators.</td>
+</tr><tr>
+<td><a href="#comparison_negative">comparison_negative</a></td>
+<td>Negative comparison should be done using "not in" and "is not".</td>
+</tr><tr>
+<td><a href="#comparison_to_singleton">comparison_to_singleton</a></td>
+<td>Comparison to singletons should use "is" or "is not".</td>
+</tr><tr>
+<td><a href="#comparison_type">comparison_type</a></td>
+<td>Object type comparisons should always use isinstance().</td>
+</tr><tr>
+<td><a href="#compound_statements">compound_statements</a></td>
+<td>Compound statements (on the same line) are generally discouraged.</td>
+</tr><tr>
+<td><a href="#continued_indentation">continued_indentation</a></td>
+<td>Continuation lines indentation.</td>
+</tr><tr>
+<td><a href="#expand_indent">expand_indent</a></td>
+<td>Return the amount of indentation.</td>
+</tr><tr>
+<td><a href="#explicit_line_join">explicit_line_join</a></td>
+<td>Avoid explicit line join between brackets.</td>
+</tr><tr>
+<td><a href="#extraneous_whitespace">extraneous_whitespace</a></td>
+<td>Avoid extraneous whitespace.</td>
+</tr><tr>
+<td><a href="#filename_match">filename_match</a></td>
+<td>Check if patterns contains a pattern that matches filename.</td>
+</tr><tr>
+<td><a href="#get_parser">get_parser</a></td>
+<td>Create the parser for the program.</td>
+</tr><tr>
+<td><a href="#imports_on_separate_lines">imports_on_separate_lines</a></td>
+<td>Place imports on separate lines.</td>
+</tr><tr>
+<td><a href="#indentation">indentation</a></td>
+<td>Use 4 spaces per indentation level.</td>
+</tr><tr>
+<td><a href="#init_checks_registry">init_checks_registry</a></td>
+<td>Register all globally visible functions.</td>
+</tr><tr>
+<td><a href="#is_binary_operator">is_binary_operator</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#is_string_literal">is_string_literal</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#maximum_line_length">maximum_line_length</a></td>
+<td>Limit all lines to a maximum of 79 characters.</td>
+</tr><tr>
+<td><a href="#missing_whitespace">missing_whitespace</a></td>
+<td>Each comma, semicolon or colon should be followed by whitespace.</td>
+</tr><tr>
+<td><a href="#missing_whitespace_after_import_keyword">missing_whitespace_after_import_keyword</a></td>
+<td>Multiple imports in form from x import (a, b, c) should have space between import statement and parenthesised name list.</td>
+</tr><tr>
+<td><a href="#missing_whitespace_around_operator">missing_whitespace_around_operator</a></td>
+<td>Surround operators with a single space on either side.</td>
+</tr><tr>
+<td><a href="#module_imports_on_top_of_file">module_imports_on_top_of_file</a></td>
+<td>Place imports at the top of the file.</td>
+</tr><tr>
+<td><a href="#mute_string">mute_string</a></td>
+<td>Replace contents with 'xxx' to prevent syntax matching.</td>
+</tr><tr>
+<td><a href="#normalize_paths">normalize_paths</a></td>
+<td>Parse a comma-separated list of paths.</td>
+</tr><tr>
+<td><a href="#parse_udiff">parse_udiff</a></td>
+<td>Return a dictionary of matching lines.</td>
+</tr><tr>
+<td><a href="#process_options">process_options</a></td>
+<td>Process options passed either via arglist or via command line args.</td>
+</tr><tr>
+<td><a href="#python_3000_backticks">python_3000_backticks</a></td>
+<td>Use repr() instead of backticks in Python 3.</td>
+</tr><tr>
+<td><a href="#python_3000_has_key">python_3000_has_key</a></td>
+<td>The {}.has_key() method is removed in Python 3: use the 'in' operator.</td>
+</tr><tr>
+<td><a href="#python_3000_not_equal">python_3000_not_equal</a></td>
+<td>New code should always use != instead of <>.</td>
+</tr><tr>
+<td><a href="#python_3000_raise_comma">python_3000_raise_comma</a></td>
+<td>When raising an exception, use "raise ValueError('message')".</td>
+</tr><tr>
+<td><a href="#read_config">read_config</a></td>
+<td>Read and parse configurations</td>
+</tr><tr>
+<td><a href="#readlines">readlines</a></td>
+<td>Read the source code.</td>
+</tr><tr>
+<td><a href="#readlines_1">readlines</a></td>
+<td>Read the source code.</td>
+</tr><tr>
+<td><a href="#register_check">register_check</a></td>
+<td>Register a new check object.</td>
+</tr><tr>
+<td><a href="#stdin_get_value">stdin_get_value</a></td>
+<td>Read the value from stdin.</td>
+</tr><tr>
+<td><a href="#tabs_obsolete">tabs_obsolete</a></td>
+<td>For new projects, spaces-only are strongly recommended over tabs.</td>
+</tr><tr>
+<td><a href="#tabs_or_spaces">tabs_or_spaces</a></td>
+<td>Never mix tabs and spaces.</td>
+</tr><tr>
+<td><a href="#trailing_blank_lines">trailing_blank_lines</a></td>
+<td>Trailing blank lines are superfluous.</td>
+</tr><tr>
+<td><a href="#trailing_whitespace">trailing_whitespace</a></td>
+<td>Trailing whitespace is superfluous.</td>
+</tr><tr>
+<td><a href="#update_counts">update_counts</a></td>
+<td>Adds one to the counts of each appearance of characters in s, for characters in counts</td>
+</tr><tr>
+<td><a href="#whitespace_around_comma">whitespace_around_comma</a></td>
+<td>Avoid extraneous whitespace after a comma or a colon.</td>
+</tr><tr>
+<td><a href="#whitespace_around_keywords">whitespace_around_keywords</a></td>
+<td>Avoid extraneous whitespace around keywords.</td>
+</tr><tr>
+<td><a href="#whitespace_around_named_parameter_equals">whitespace_around_named_parameter_equals</a></td>
+<td>Don't use spaces around the '=' sign in function arguments.</td>
+</tr><tr>
+<td><a href="#whitespace_around_operator">whitespace_around_operator</a></td>
+<td>Avoid extraneous whitespace around an operator.</td>
+</tr><tr>
+<td><a href="#whitespace_before_comment">whitespace_before_comment</a></td>
+<td>Separate inline comments by at least two spaces.</td>
+</tr><tr>
+<td><a href="#whitespace_before_parameters">whitespace_before_parameters</a></td>
+<td>Avoid extraneous whitespace.</td>
+</tr>
+</table>
+<hr /><hr />
+<a NAME="BaseReport" ID="BaseReport"></a>
+<h2>BaseReport</h2>
+<p>
+Collect the results of the checks.
+</p>
+<h3>Derived from</h3>
+object
+<h3>Class Attributes</h3>
+<table>
+<tr><td>print_filename</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#BaseReport.__init__">BaseReport</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#BaseReport.error">error</a></td>
+<td>Report an error, according to options.</td>
+</tr><tr>
+<td><a href="#BaseReport.error_args">error_args</a></td>
+<td>Report an error, according to options.</td>
+</tr><tr>
+<td><a href="#BaseReport.get_count">get_count</a></td>
+<td>Return the total count of errors and warnings.</td>
+</tr><tr>
+<td><a href="#BaseReport.get_file_results">get_file_results</a></td>
+<td>Return the count of errors and warnings for this file.</td>
+</tr><tr>
+<td><a href="#BaseReport.get_statistics">get_statistics</a></td>
+<td>Get statistics for message codes that start with the prefix.</td>
+</tr><tr>
+<td><a href="#BaseReport.increment_logical_line">increment_logical_line</a></td>
+<td>Signal a new logical line.</td>
+</tr><tr>
+<td><a href="#BaseReport.init_file">init_file</a></td>
+<td>Signal a new file.</td>
+</tr><tr>
+<td><a href="#BaseReport.print_benchmark">print_benchmark</a></td>
+<td>Print benchmark numbers.</td>
+</tr><tr>
+<td><a href="#BaseReport.print_statistics">print_statistics</a></td>
+<td>Print overall statistics (number of errors and warnings).</td>
+</tr><tr>
+<td><a href="#BaseReport.start">start</a></td>
+<td>Start the timer.</td>
+</tr><tr>
+<td><a href="#BaseReport.stop">stop</a></td>
+<td>Stop the timer.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="BaseReport.__init__" ID="BaseReport.__init__"></a>
+<h4>BaseReport (Constructor)</h4>
+<b>BaseReport</b>(<i>options</i>)
+<a NAME="BaseReport.error" ID="BaseReport.error"></a>
+<h4>BaseReport.error</h4>
+<b>error</b>(<i>line_number, offset, text, check</i>)
+<p>
+Report an error, according to options.
+</p><a NAME="BaseReport.error_args" ID="BaseReport.error_args"></a>
+<h4>BaseReport.error_args</h4>
+<b>error_args</b>(<i>line_number, offset, text, check, *args</i>)
+<p>
+Report an error, according to options.
+</p><a NAME="BaseReport.get_count" ID="BaseReport.get_count"></a>
+<h4>BaseReport.get_count</h4>
+<b>get_count</b>(<i>prefix=''</i>)
+<p>
+Return the total count of errors and warnings.
+</p><a NAME="BaseReport.get_file_results" ID="BaseReport.get_file_results"></a>
+<h4>BaseReport.get_file_results</h4>
+<b>get_file_results</b>(<i></i>)
+<p>
+Return the count of errors and warnings for this file.
+</p><a NAME="BaseReport.get_statistics" ID="BaseReport.get_statistics"></a>
+<h4>BaseReport.get_statistics</h4>
+<b>get_statistics</b>(<i>prefix=''</i>)
+<p>
+Get statistics for message codes that start with the prefix.
+</p><p>
+        prefix='' matches all errors and warnings
+        prefix='E' matches all errors
+        prefix='W' matches all warnings
+        prefix='E4' matches all errors that have to do with imports
+</p><a NAME="BaseReport.increment_logical_line" ID="BaseReport.increment_logical_line"></a>
+<h4>BaseReport.increment_logical_line</h4>
+<b>increment_logical_line</b>(<i></i>)
+<p>
+Signal a new logical line.
+</p><a NAME="BaseReport.init_file" ID="BaseReport.init_file"></a>
+<h4>BaseReport.init_file</h4>
+<b>init_file</b>(<i>filename, lines, expected, line_offset</i>)
+<p>
+Signal a new file.
+</p><a NAME="BaseReport.print_benchmark" ID="BaseReport.print_benchmark"></a>
+<h4>BaseReport.print_benchmark</h4>
+<b>print_benchmark</b>(<i></i>)
+<p>
+Print benchmark numbers.
+</p><a NAME="BaseReport.print_statistics" ID="BaseReport.print_statistics"></a>
+<h4>BaseReport.print_statistics</h4>
+<b>print_statistics</b>(<i>prefix=''</i>)
+<p>
+Print overall statistics (number of errors and warnings).
+</p><a NAME="BaseReport.start" ID="BaseReport.start"></a>
+<h4>BaseReport.start</h4>
+<b>start</b>(<i></i>)
+<p>
+Start the timer.
+</p><a NAME="BaseReport.stop" ID="BaseReport.stop"></a>
+<h4>BaseReport.stop</h4>
+<b>stop</b>(<i></i>)
+<p>
+Stop the timer.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="Checker" ID="Checker"></a>
+<h2>Checker</h2>
+<p>
+Load a Python source file, tokenize it, check coding style.
+</p>
+<h3>Derived from</h3>
+object
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#Checker.__init__">Checker</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#Checker.build_tokens_line">build_tokens_line</a></td>
+<td>Build a logical line from tokens.</td>
+</tr><tr>
+<td><a href="#Checker.check_all">check_all</a></td>
+<td>Run all checks on the input file.</td>
+</tr><tr>
+<td><a href="#Checker.check_ast">check_ast</a></td>
+<td>Build the file's AST and run all AST checks.</td>
+</tr><tr>
+<td><a href="#Checker.check_logical">check_logical</a></td>
+<td>Build a line from tokens and run all logical checks on it.</td>
+</tr><tr>
+<td><a href="#Checker.check_physical">check_physical</a></td>
+<td>Run all physical checks on a raw input line.</td>
+</tr><tr>
+<td><a href="#Checker.generate_tokens">generate_tokens</a></td>
+<td>Tokenize the file, run physical line checks and yield tokens.</td>
+</tr><tr>
+<td><a href="#Checker.init_checker_state">init_checker_state</a></td>
+<td>Prepare custom state for the specific checker plugin.</td>
+</tr><tr>
+<td><a href="#Checker.maybe_check_physical">maybe_check_physical</a></td>
+<td>If appropriate (based on token), check current physical line(s).</td>
+</tr><tr>
+<td><a href="#Checker.readline">readline</a></td>
+<td>Get the next line from the input buffer.</td>
+</tr><tr>
+<td><a href="#Checker.report_invalid_syntax">report_invalid_syntax</a></td>
+<td>Check if the syntax is valid.</td>
+</tr><tr>
+<td><a href="#Checker.run_check">run_check</a></td>
+<td>Run a check plugin.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="Checker.__init__" ID="Checker.__init__"></a>
+<h4>Checker (Constructor)</h4>
+<b>Checker</b>(<i>filename=None, lines=None, options=None, report=None, **kwargs</i>)
+<a NAME="Checker.build_tokens_line" ID="Checker.build_tokens_line"></a>
+<h4>Checker.build_tokens_line</h4>
+<b>build_tokens_line</b>(<i></i>)
+<p>
+Build a logical line from tokens.
+</p><a NAME="Checker.check_all" ID="Checker.check_all"></a>
+<h4>Checker.check_all</h4>
+<b>check_all</b>(<i>expected=None, line_offset=0</i>)
+<p>
+Run all checks on the input file.
+</p><a NAME="Checker.check_ast" ID="Checker.check_ast"></a>
+<h4>Checker.check_ast</h4>
+<b>check_ast</b>(<i></i>)
+<p>
+Build the file's AST and run all AST checks.
+</p><a NAME="Checker.check_logical" ID="Checker.check_logical"></a>
+<h4>Checker.check_logical</h4>
+<b>check_logical</b>(<i></i>)
+<p>
+Build a line from tokens and run all logical checks on it.
+</p><a NAME="Checker.check_physical" ID="Checker.check_physical"></a>
+<h4>Checker.check_physical</h4>
+<b>check_physical</b>(<i>line</i>)
+<p>
+Run all physical checks on a raw input line.
+</p><a NAME="Checker.generate_tokens" ID="Checker.generate_tokens"></a>
+<h4>Checker.generate_tokens</h4>
+<b>generate_tokens</b>(<i></i>)
+<p>
+Tokenize the file, run physical line checks and yield tokens.
+</p><a NAME="Checker.init_checker_state" ID="Checker.init_checker_state"></a>
+<h4>Checker.init_checker_state</h4>
+<b>init_checker_state</b>(<i>name, argument_names</i>)
+<p>
+ Prepare custom state for the specific checker plugin.
+</p><a NAME="Checker.maybe_check_physical" ID="Checker.maybe_check_physical"></a>
+<h4>Checker.maybe_check_physical</h4>
+<b>maybe_check_physical</b>(<i>token</i>)
+<p>
+If appropriate (based on token), check current physical line(s).
+</p><a NAME="Checker.readline" ID="Checker.readline"></a>
+<h4>Checker.readline</h4>
+<b>readline</b>(<i></i>)
+<p>
+Get the next line from the input buffer.
+</p><a NAME="Checker.report_invalid_syntax" ID="Checker.report_invalid_syntax"></a>
+<h4>Checker.report_invalid_syntax</h4>
+<b>report_invalid_syntax</b>(<i></i>)
+<p>
+Check if the syntax is valid.
+</p><a NAME="Checker.run_check" ID="Checker.run_check"></a>
+<h4>Checker.run_check</h4>
+<b>run_check</b>(<i>check, argument_names</i>)
+<p>
+Run a check plugin.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="DiffReport" ID="DiffReport"></a>
+<h2>DiffReport</h2>
+<p>
+Collect and print the results for the changed lines only.
+</p>
+<h3>Derived from</h3>
+StandardReport
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#DiffReport.__init__">DiffReport</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#DiffReport.error">error</a></td>
+<td></td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="DiffReport.__init__" ID="DiffReport.__init__"></a>
+<h4>DiffReport (Constructor)</h4>
+<b>DiffReport</b>(<i>options</i>)
+<a NAME="DiffReport.error" ID="DiffReport.error"></a>
+<h4>DiffReport.error</h4>
+<b>error</b>(<i>line_number, offset, text, check</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="FileReport" ID="FileReport"></a>
+<h2>FileReport</h2>
+<p>
+Collect the results of the checks and print only the filenames.
+</p>
+<h3>Derived from</h3>
+BaseReport
+<h3>Class Attributes</h3>
+<table>
+<tr><td>print_filename</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="StandardReport" ID="StandardReport"></a>
+<h2>StandardReport</h2>
+<p>
+Collect and print the results of the checks.
+</p>
+<h3>Derived from</h3>
+BaseReport
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#StandardReport.__init__">StandardReport</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#StandardReport.error">error</a></td>
+<td>Report an error, according to options.</td>
+</tr><tr>
+<td><a href="#StandardReport.error_args">error_args</a></td>
+<td>Report an error, according to options.</td>
+</tr><tr>
+<td><a href="#StandardReport.get_file_results">get_file_results</a></td>
+<td>Print the result and return the overall count for this file.</td>
+</tr><tr>
+<td><a href="#StandardReport.init_file">init_file</a></td>
+<td>Signal a new file.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="StandardReport.__init__" ID="StandardReport.__init__"></a>
+<h4>StandardReport (Constructor)</h4>
+<b>StandardReport</b>(<i>options</i>)
+<a NAME="StandardReport.error" ID="StandardReport.error"></a>
+<h4>StandardReport.error</h4>
+<b>error</b>(<i>line_number, offset, text, check</i>)
+<p>
+Report an error, according to options.
+</p><a NAME="StandardReport.error_args" ID="StandardReport.error_args"></a>
+<h4>StandardReport.error_args</h4>
+<b>error_args</b>(<i>line_number, offset, code, check, *args</i>)
+<p>
+Report an error, according to options.
+</p><a NAME="StandardReport.get_file_results" ID="StandardReport.get_file_results"></a>
+<h4>StandardReport.get_file_results</h4>
+<b>get_file_results</b>(<i></i>)
+<p>
+Print the result and return the overall count for this file.
+</p><a NAME="StandardReport.init_file" ID="StandardReport.init_file"></a>
+<h4>StandardReport.init_file</h4>
+<b>init_file</b>(<i>filename, lines, expected, line_offset</i>)
+<p>
+Signal a new file.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="StyleGuide" ID="StyleGuide"></a>
+<h2>StyleGuide</h2>
+<p>
+Initialize a PEP-8 instance with few options.
+</p>
+<h3>Derived from</h3>
+object
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#StyleGuide.__init__">StyleGuide</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#StyleGuide.check_files">check_files</a></td>
+<td>Run all checks on the paths.</td>
+</tr><tr>
+<td><a href="#StyleGuide.excluded">excluded</a></td>
+<td>Check if the file should be excluded.</td>
+</tr><tr>
+<td><a href="#StyleGuide.get_checks">get_checks</a></td>
+<td>Get all the checks for this category.</td>
+</tr><tr>
+<td><a href="#StyleGuide.ignore_code">ignore_code</a></td>
+<td>Check if the error code should be ignored.</td>
+</tr><tr>
+<td><a href="#StyleGuide.init_report">init_report</a></td>
+<td>Initialize the report instance.</td>
+</tr><tr>
+<td><a href="#StyleGuide.input_dir">input_dir</a></td>
+<td>Check all files in this directory and all subdirectories.</td>
+</tr><tr>
+<td><a href="#StyleGuide.input_file">input_file</a></td>
+<td>Run all checks on a Python source file.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="StyleGuide.__init__" ID="StyleGuide.__init__"></a>
+<h4>StyleGuide (Constructor)</h4>
+<b>StyleGuide</b>(<i>*args, **kwargs</i>)
+<a NAME="StyleGuide.check_files" ID="StyleGuide.check_files"></a>
+<h4>StyleGuide.check_files</h4>
+<b>check_files</b>(<i>paths=None</i>)
+<p>
+Run all checks on the paths.
+</p><a NAME="StyleGuide.excluded" ID="StyleGuide.excluded"></a>
+<h4>StyleGuide.excluded</h4>
+<b>excluded</b>(<i>filename, parent=None</i>)
+<p>
+Check if the file should be excluded.
+</p><p>
+        Check if 'options.exclude' contains a pattern that matches filename.
+</p><a NAME="StyleGuide.get_checks" ID="StyleGuide.get_checks"></a>
+<h4>StyleGuide.get_checks</h4>
+<b>get_checks</b>(<i>argument_name</i>)
+<p>
+Get all the checks for this category.
+</p><p>
+        Find all globally visible functions where the first argument name
+        starts with argument_name and which contain selected tests.
+</p><a NAME="StyleGuide.ignore_code" ID="StyleGuide.ignore_code"></a>
+<h4>StyleGuide.ignore_code</h4>
+<b>ignore_code</b>(<i>code</i>)
+<p>
+Check if the error code should be ignored.
+</p><p>
+        If 'options.select' contains a prefix of the error code,
+        return False.  Else, if 'options.ignore' contains a prefix of
+        the error code, return True.
+</p><a NAME="StyleGuide.init_report" ID="StyleGuide.init_report"></a>
+<h4>StyleGuide.init_report</h4>
+<b>init_report</b>(<i>reporter=None</i>)
+<p>
+Initialize the report instance.
+</p><a NAME="StyleGuide.input_dir" ID="StyleGuide.input_dir"></a>
+<h4>StyleGuide.input_dir</h4>
+<b>input_dir</b>(<i>dirname</i>)
+<p>
+Check all files in this directory and all subdirectories.
+</p><a NAME="StyleGuide.input_file" ID="StyleGuide.input_file"></a>
+<h4>StyleGuide.input_file</h4>
+<b>input_file</b>(<i>filename, lines=None, expected=None, line_offset=0</i>)
+<p>
+Run all checks on a Python source file.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="_add_check" ID="_add_check"></a>
+<h2>_add_check</h2>
+<b>_add_check</b>(<i>check, kind, codes, args</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="_get_parameters" ID="_get_parameters"></a>
+<h2>_get_parameters</h2>
+<b>_get_parameters</b>(<i>function</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="_is_eol_token" ID="_is_eol_token"></a>
+<h2>_is_eol_token</h2>
+<b>_is_eol_token</b>(<i>token</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="_is_eol_token_1" ID="_is_eol_token_1"></a>
+<h2>_is_eol_token</h2>
+<b>_is_eol_token</b>(<i>token, _eol_token=_is_eol_token</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="_main" ID="_main"></a>
+<h2>_main</h2>
+<b>_main</b>(<i></i>)
+<p>
+Parse options and run checks on Python source.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="_parse_multi_options" ID="_parse_multi_options"></a>
+<h2>_parse_multi_options</h2>
+<b>_parse_multi_options</b>(<i>options, split_token=', '</i>)
+<p>
+Split and strip and discard empties.
+</p><p>
+    Turns the following:
+</p><p>
+    A,
+    B,
+</p><p>
+    into ["A", "B"]
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="ambiguous_identifier" ID="ambiguous_identifier"></a>
+<h2>ambiguous_identifier</h2>
+<b>ambiguous_identifier</b>(<i>logical_line, tokens</i>)
+<p>
+Never use the characters 'l', 'O', or 'I' as variable names.
+</p><p>
+    In some fonts, these characters are indistinguishable from the numerals
+    one and zero. When tempted to use 'l', use 'L' instead.
+</p><p>
+    Okay: L = 0
+    Okay: o = 123
+    Okay: i = 42
+    E741: l = 0
+    E741: O = 123
+    E741: I = 42
+</p><p>
+    Variables can be bound in several other contexts, including class and
+    function definitions, 'global' and 'nonlocal' statements, exception
+    handlers, and 'with' statements.
+</p><p>
+    Okay: except AttributeError as o:
+    Okay: with lock as L:
+    E741: except AttributeError as O:
+    E741: with lock as l:
+    E741: global I
+    E741: nonlocal l
+    E742: class I(object):
+    E743: def l(x):
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="blank_lines" ID="blank_lines"></a>
+<h2>blank_lines</h2>
+<b>blank_lines</b>(<i>logical_line, blank_lines, indent_level, line_number, blank_before, previous_logical, previous_unindented_logical_line, previous_indent_level, lines</i>)
+<p>
+Separate top-level function and class definitions with two blank lines.
+</p><p>
+    Method definitions inside a class are separated by a single blank line.
+</p><p>
+    Extra blank lines may be used (sparingly) to separate groups of related
+    functions.  Blank lines may be omitted between a bunch of related
+    one-liners (e.g. a set of dummy implementations).
+</p><p>
+    Use blank lines in functions, sparingly, to indicate logical sections.
+</p><p>
+    Okay: def a():\n    pass\n\n\ndef b():\n    pass
+    Okay: def a():\n    pass\n\n\nasync def b():\n    pass
+    Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
+</p><p>
+    E301: class Foo:\n    b = 0\n    def bar():\n        pass
+    E302: def a():\n    pass\n\ndef b(n):\n    pass
+    E302: def a():\n    pass\n\nasync def b(n):\n    pass
+    E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
+    E303: def a():\n\n\n\n    pass
+    E304: @decorator\n\ndef a():\n    pass
+    E305: def a():\n    pass\na()
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="break_around_binary_operator" ID="break_around_binary_operator"></a>
+<h2>break_around_binary_operator</h2>
+<b>break_around_binary_operator</b>(<i>logical_line, tokens</i>)
+<p>
+    Avoid breaks before binary operators.
+</p><p>
+    The preferred place to break around a binary operator is after the
+    operator, not before it.
+</p><p>
+    W503: (width == 0\n + height == 0)
+    W503: (width == 0\n and height == 0)
+</p><p>
+    Okay: (width == 0 +\n height == 0)
+    Okay: foo(\n    -x)
+    Okay: foo(x\n    [])
+    Okay: x = '''\n''' + ''
+    Okay: foo(x,\n    -y)
+    Okay: foo(x,  # comment\n    -y)
+    Okay: var = (1 &\n       ~2)
+    Okay: var = (1 /\n       -2)
+    Okay: var = (1 +\n       -1 +\n       -2)
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="comparison_negative" ID="comparison_negative"></a>
+<h2>comparison_negative</h2>
+<b>comparison_negative</b>(<i>logical_line</i>)
+<p>
+Negative comparison should be done using "not in" and "is not".
+</p><p>
+    Okay: if x not in y:\n    pass
+    Okay: assert (X in Y or X is Z)
+    Okay: if not (X in Y):\n    pass
+    Okay: zz = x is not y
+    E713: Z = not X in Y
+    E713: if not X.B in Y:\n    pass
+    E714: if not X is Y:\n    pass
+    E714: Z = not X.B is Y
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="comparison_to_singleton" ID="comparison_to_singleton"></a>
+<h2>comparison_to_singleton</h2>
+<b>comparison_to_singleton</b>(<i>logical_line, noqa</i>)
+<p>
+Comparison to singletons should use "is" or "is not".
+</p><p>
+    Comparisons to singletons like None should always be done
+    with "is" or "is not", never the equality operators.
+</p><p>
+    Okay: if arg is not None:
+    E711: if arg != None:
+    E711: if None == arg:
+    E712: if arg == True:
+    E712: if False == arg:
+</p><p>
+    Also, beware of writing if x when you really mean if x is not None --
+    e.g. when testing whether a variable or argument that defaults to None was
+    set to some other value.  The other value might have a type (such as a
+    container) that could be false in a boolean context!
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="comparison_type" ID="comparison_type"></a>
+<h2>comparison_type</h2>
+<b>comparison_type</b>(<i>logical_line, noqa</i>)
+<p>
+Object type comparisons should always use isinstance().
+</p><p>
+    Do not compare types directly.
+</p><p>
+    Okay: if isinstance(obj, int):
+    E721: if type(obj) is type(1):
+</p><p>
+    When checking if an object is a string, keep in mind that it might be a
+    unicode string too! In Python 2.3, str and unicode have a common base
+    class, basestring, so you can do:
+</p><p>
+    Okay: if isinstance(obj, basestring):
+    Okay: if type(a1) is type(b1):
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="compound_statements" ID="compound_statements"></a>
+<h2>compound_statements</h2>
+<b>compound_statements</b>(<i>logical_line</i>)
+<p>
+Compound statements (on the same line) are generally discouraged.
+</p><p>
+    While sometimes it's okay to put an if/for/while with a small body
+    on the same line, never do this for multi-clause statements.
+    Also avoid folding such long lines!
+</p><p>
+    Always use a def statement instead of an assignment statement that
+    binds a lambda expression directly to a name.
+</p><p>
+    Okay: if foo == 'blah':\n    do_blah_thing()
+    Okay: do_one()
+    Okay: do_two()
+    Okay: do_three()
+</p><p>
+    E701: if foo == 'blah': do_blah_thing()
+    E701: for x in lst: total += x
+    E701: while t < 10: t = delay()
+    E701: if foo == 'blah': do_blah_thing()
+    E701: else: do_non_blah_thing()
+    E701: try: something()
+    E701: finally: cleanup()
+    E701: if foo == 'blah': one(); two(); three()
+    E702: do_one(); do_two(); do_three()
+    E703: do_four();  # useless semicolon
+    E704: def f(x): return 2*x
+    E705: async def f(x): return 2*x
+    E731: f = lambda x: 2*x
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="continued_indentation" ID="continued_indentation"></a>
+<h2>continued_indentation</h2>
+<b>continued_indentation</b>(<i>logical_line, tokens, indent_level, hang_closing, indent_char, noqa, verbose</i>)
+<p>
+Continuation lines indentation.
+</p><p>
+    Continuation lines should align wrapped elements either vertically
+    using Python's implicit line joining inside parentheses, brackets
+    and braces, or using a hanging indent.
+</p><p>
+    When using a hanging indent these considerations should be applied:
+    - there should be no arguments on the first line, and
+    - further indentation should be used to clearly distinguish itself as a
+      continuation line.
+</p><p>
+    Okay: a = (\n)
+    E123: a = (\n    )
+</p><p>
+    Okay: a = (\n    42)
+    E121: a = (\n   42)
+    E122: a = (\n42)
+    E123: a = (\n    42\n    )
+    E124: a = (24,\n     42\n)
+    E125: if (\n    b):\n    pass
+    E126: a = (\n        42)
+    E127: a = (24,\n      42)
+    E128: a = (24,\n    42)
+    E129: if (a or\n    b):\n    pass
+    E131: a = (\n    42\n 24)
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="expand_indent" ID="expand_indent"></a>
+<h2>expand_indent</h2>
+<b>expand_indent</b>(<i>line</i>)
+<p>
+Return the amount of indentation.
+</p><p>
+    Tabs are expanded to the next multiple of 8.
+</p><p>
+    >>> expand_indent('    ')
+    4
+    >>> expand_indent('\t')
+    8
+    >>> expand_indent('       \t')
+    8
+    >>> expand_indent('        \t')
+    16
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="explicit_line_join" ID="explicit_line_join"></a>
+<h2>explicit_line_join</h2>
+<b>explicit_line_join</b>(<i>logical_line, tokens</i>)
+<p>
+Avoid explicit line join between brackets.
+</p><p>
+    The preferred way of wrapping long lines is by using Python's implied line
+    continuation inside parentheses, brackets and braces.  Long lines can be
+    broken over multiple lines by wrapping expressions in parentheses.  These
+    should be used in preference to using a backslash for line continuation.
+</p><p>
+    E502: aaa = [123, \\n       123]
+    E502: aaa = ("bbb " \\n       "ccc")
+</p><p>
+    Okay: aaa = [123,\n       123]
+    Okay: aaa = ("bbb "\n       "ccc")
+    Okay: aaa = "bbb " \\n    "ccc"
+    Okay: aaa = 123  # \\
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="extraneous_whitespace" ID="extraneous_whitespace"></a>
+<h2>extraneous_whitespace</h2>
+<b>extraneous_whitespace</b>(<i>logical_line</i>)
+<p>
+Avoid extraneous whitespace.
+</p><p>
+    Avoid extraneous whitespace in these situations:
+    - Immediately inside parentheses, brackets or braces.
+    - Immediately before a comma, semicolon, or colon.
+</p><p>
+    Okay: spam(ham[1], {eggs: 2})
+    E201: spam( ham[1], {eggs: 2})
+    E201: spam(ham[ 1], {eggs: 2})
+    E201: spam(ham[1], { eggs: 2})
+    E202: spam(ham[1], {eggs: 2} )
+    E202: spam(ham[1 ], {eggs: 2})
+    E202: spam(ham[1], {eggs: 2 })
+</p><p>
+    E203: if x == 4: print x, y; x, y = y , x
+    E203: if x == 4: print x, y ; x, y = y, x
+    E203: if x == 4 : print x, y; x, y = y, x
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="filename_match" ID="filename_match"></a>
+<h2>filename_match</h2>
+<b>filename_match</b>(<i>filename, patterns, default=True</i>)
+<p>
+Check if patterns contains a pattern that matches filename.
+</p><p>
+    If patterns is unspecified, this always returns True.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="get_parser" ID="get_parser"></a>
+<h2>get_parser</h2>
+<b>get_parser</b>(<i>prog='pycodestyle', version=__version__</i>)
+<p>
+Create the parser for the program.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="imports_on_separate_lines" ID="imports_on_separate_lines"></a>
+<h2>imports_on_separate_lines</h2>
+<b>imports_on_separate_lines</b>(<i>logical_line</i>)
+<p>
+Place imports on separate lines.
+</p><p>
+    Okay: import os\nimport sys
+    E401: import sys, os
+</p><p>
+    Okay: from subprocess import Popen, PIPE
+    Okay: from myclas import MyClass
+    Okay: from foo.bar.yourclass import YourClass
+    Okay: import myclass
+    Okay: import foo.bar.yourclass
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="indentation" ID="indentation"></a>
+<h2>indentation</h2>
+<b>indentation</b>(<i>logical_line, previous_logical, indent_char, indent_level, previous_indent_level</i>)
+<p>
+Use 4 spaces per indentation level.
+</p><p>
+    For really old code that you don't want to mess up, you can continue to
+    use 8-space tabs.
+</p><p>
+    Okay: a = 1
+    Okay: if a == 0:\n    a = 1
+    E111:   a = 1
+    E114:   # a = 1
+</p><p>
+    Okay: for item in items:\n    pass
+    E112: for item in items:\npass
+    E115: for item in items:\n# Hi\n    pass
+</p><p>
+    Okay: a = 1\nb = 2
+    E113: a = 1\n    b = 2
+    E116: a = 1\n    # b = 2
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="init_checks_registry" ID="init_checks_registry"></a>
+<h2>init_checks_registry</h2>
+<b>init_checks_registry</b>(<i></i>)
+<p>
+Register all globally visible functions.
+</p><p>
+    The first argument name is either 'physical_line' or 'logical_line'.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="is_binary_operator" ID="is_binary_operator"></a>
+<h2>is_binary_operator</h2>
+<b>is_binary_operator</b>(<i>token_type, text</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="is_string_literal" ID="is_string_literal"></a>
+<h2>is_string_literal</h2>
+<b>is_string_literal</b>(<i>line</i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="maximum_line_length" ID="maximum_line_length"></a>
+<h2>maximum_line_length</h2>
+<b>maximum_line_length</b>(<i>physical_line, max_line_length, multiline, noqa</i>)
+<p>
+Limit all lines to a maximum of 79 characters.
+</p><p>
+    There are still many devices around that are limited to 80 character
+    lines; plus, limiting windows to 80 characters makes it possible to have
+    several windows side-by-side.  The default wrapping on such devices looks
+    ugly.  Therefore, please limit all lines to a maximum of 79 characters.
+    For flowing long blocks of text (docstrings or comments), limiting the
+    length to 72 characters is recommended.
+</p><p>
+    Reports error E501.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="missing_whitespace" ID="missing_whitespace"></a>
+<h2>missing_whitespace</h2>
+<b>missing_whitespace</b>(<i>logical_line</i>)
+<p>
+Each comma, semicolon or colon should be followed by whitespace.
+</p><p>
+    Okay: [a, b]
+    Okay: (3,)
+    Okay: a[1:4]
+    Okay: a[:4]
+    Okay: a[1:]
+    Okay: a[1:4:2]
+    E231: ['a','b']
+    E231: foo(bar,baz)
+    E231: [{'a':'b'}]
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="missing_whitespace_after_import_keyword" ID="missing_whitespace_after_import_keyword"></a>
+<h2>missing_whitespace_after_import_keyword</h2>
+<b>missing_whitespace_after_import_keyword</b>(<i>logical_line</i>)
+<p>
+Multiple imports in form from x import (a, b, c) should have space
+    between import statement and parenthesised name list.
+</p><p>
+    Okay: from foo import (bar, baz)
+    E275: from foo import(bar, baz)
+    E275: from importable.module import(bar, baz)
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="missing_whitespace_around_operator" ID="missing_whitespace_around_operator"></a>
+<h2>missing_whitespace_around_operator</h2>
+<b>missing_whitespace_around_operator</b>(<i>logical_line, tokens</i>)
+<p>
+Surround operators with a single space on either side.
+</p><p>
+    - Always surround these binary operators with a single space on
+      either side: assignment (=), augmented assignment (+=, -= etc.),
+      comparisons (==, <, >, !=, <=, >=, in, not in, is, is not),
+      Booleans (and, or, not).
+</p><p>
+    - If operators with different priorities are used, consider adding
+      whitespace around the operators with the lowest priorities.
+</p><p>
+    Okay: i = i + 1
+    Okay: submitted += 1
+    Okay: x = x * 2 - 1
+    Okay: hypot2 = x * x + y * y
+    Okay: c = (a + b) * (a - b)
+    Okay: foo(bar, key='word', *args, **kwargs)
+    Okay: alpha[:-i]
+</p><p>
+    E225: i=i+1
+    E225: submitted +=1
+    E225: x = x /2 - 1
+    E225: z = x **y
+    E226: c = (a+b) * (a-b)
+    E226: hypot2 = x*x + y*y
+    E227: c = a|b
+    E228: msg = fmt%(errno, errmsg)
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="module_imports_on_top_of_file" ID="module_imports_on_top_of_file"></a>
+<h2>module_imports_on_top_of_file</h2>
+<b>module_imports_on_top_of_file</b>(<i>logical_line, indent_level, checker_state, noqa</i>)
+<p>
+Place imports at the top of the file.
+</p><p>
+    Always put imports at the top of the file, just after any module comments
+    and docstrings, and before module globals and constants.
+</p><p>
+    Okay: import os
+    Okay: # this is a comment\nimport os
+    Okay: '''this is a module docstring'''\nimport os
+    Okay: r'''this is a module docstring'''\nimport os
+    Okay: try:\n    import x\nexcept:\n    pass\nelse:\n    pass\nimport y
+    Okay: try:\n    import x\nexcept:\n    pass\nfinally:\n    pass\nimport y
+    E402: a=1\nimport os
+    E402: 'One string'\n"Two string"\nimport os
+    E402: a=1\nfrom sys import x
+</p><p>
+    Okay: if x:\n    import os
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="mute_string" ID="mute_string"></a>
+<h2>mute_string</h2>
+<b>mute_string</b>(<i>text</i>)
+<p>
+Replace contents with 'xxx' to prevent syntax matching.
+</p><p>
+    >>> mute_string('"abc"')
+    '"xxx"'
+    >>> mute_string("'''abc'''")
+    "'''xxx'''"
+    >>> mute_string("r'abc'")
+    "r'xxx'"
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="normalize_paths" ID="normalize_paths"></a>
+<h2>normalize_paths</h2>
+<b>normalize_paths</b>(<i>value, parent=os.curdir</i>)
+<p>
+Parse a comma-separated list of paths.
+</p><p>
+    Return a list of absolute paths.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="parse_udiff" ID="parse_udiff"></a>
+<h2>parse_udiff</h2>
+<b>parse_udiff</b>(<i>diff, patterns=None, parent='.'</i>)
+<p>
+Return a dictionary of matching lines.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="process_options" ID="process_options"></a>
+<h2>process_options</h2>
+<b>process_options</b>(<i>arglist=None, parse_argv=False, config_file=None, parser=None</i>)
+<p>
+Process options passed either via arglist or via command line args.
+</p><p>
+    Passing in the ``config_file`` parameter allows other tools, such as flake8
+    to specify their own options to be processed in pycodestyle.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="python_3000_backticks" ID="python_3000_backticks"></a>
+<h2>python_3000_backticks</h2>
+<b>python_3000_backticks</b>(<i>logical_line</i>)
+<p>
+Use repr() instead of backticks in Python 3.
+</p><p>
+    Okay: val = repr(1 + 2)
+    W604: val = `1 + 2`
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="python_3000_has_key" ID="python_3000_has_key"></a>
+<h2>python_3000_has_key</h2>
+<b>python_3000_has_key</b>(<i>logical_line, noqa</i>)
+<p>
+The {}.has_key() method is removed in Python 3: use the 'in' operator.
+</p><p>
+    Okay: if "alph" in d:\n    print d["alph"]
+    W601: assert d.has_key('alph')
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="python_3000_not_equal" ID="python_3000_not_equal"></a>
+<h2>python_3000_not_equal</h2>
+<b>python_3000_not_equal</b>(<i>logical_line</i>)
+<p>
+New code should always use != instead of <>.
+</p><p>
+    The older syntax is removed in Python 3.
+</p><p>
+    Okay: if a != 'no':
+    W603: if a <> 'no':
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="python_3000_raise_comma" ID="python_3000_raise_comma"></a>
+<h2>python_3000_raise_comma</h2>
+<b>python_3000_raise_comma</b>(<i>logical_line</i>)
+<p>
+When raising an exception, use "raise ValueError('message')".
+</p><p>
+    The older form is removed in Python 3.
+</p><p>
+    Okay: raise DummyError("Message")
+    W602: raise DummyError, "Message"
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="read_config" ID="read_config"></a>
+<h2>read_config</h2>
+<b>read_config</b>(<i>options, args, arglist, parser</i>)
+<p>
+Read and parse configurations
+</p><p>
+    If a config file is specified on the command line with the "--config"
+    option, then only it is used for configuration.
+</p><p>
+    Otherwise, the user configuration (~/.config/pycodestyle) and any local
+    configurations in the current directory or above will be merged together
+    (in that order) using the read method of ConfigParser.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="readlines" ID="readlines"></a>
+<h2>readlines</h2>
+<b>readlines</b>(<i>filename</i>)
+<p>
+Read the source code.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="readlines_1" ID="readlines_1"></a>
+<h2>readlines</h2>
+<b>readlines</b>(<i>filename</i>)
+<p>
+Read the source code.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="register_check" ID="register_check"></a>
+<h2>register_check</h2>
+<b>register_check</b>(<i>check, codes=None</i>)
+<p>
+Register a new check object.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="stdin_get_value" ID="stdin_get_value"></a>
+<h2>stdin_get_value</h2>
+<b>stdin_get_value</b>(<i></i>)
+<p>
+Read the value from stdin.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="tabs_obsolete" ID="tabs_obsolete"></a>
+<h2>tabs_obsolete</h2>
+<b>tabs_obsolete</b>(<i>physical_line</i>)
+<p>
+For new projects, spaces-only are strongly recommended over tabs.
+</p><p>
+    Okay: if True:\n    return
+    W191: if True:\n\treturn
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="tabs_or_spaces" ID="tabs_or_spaces"></a>
+<h2>tabs_or_spaces</h2>
+<b>tabs_or_spaces</b>(<i>physical_line, indent_char</i>)
+<p>
+Never mix tabs and spaces.
+</p><p>
+    The most popular way of indenting Python is with spaces only.  The
+    second-most popular way is with tabs only.  Code indented with a mixture
+    of tabs and spaces should be converted to using spaces exclusively.  When
+    invoking the Python command line interpreter with the -t option, it issues
+    warnings about code that illegally mixes tabs and spaces.  When using -tt
+    these warnings become errors.  These options are highly recommended!
+</p><p>
+    Okay: if a == 0:\n        a = 1\n        b = 1
+    E101: if a == 0:\n        a = 1\n\tb = 1
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="trailing_blank_lines" ID="trailing_blank_lines"></a>
+<h2>trailing_blank_lines</h2>
+<b>trailing_blank_lines</b>(<i>physical_line, lines, line_number, total_lines</i>)
+<p>
+Trailing blank lines are superfluous.
+</p><p>
+    Okay: spam(1)
+    W391: spam(1)\n
+</p><p>
+    However the last line should end with a new line (warning W292).
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="trailing_whitespace" ID="trailing_whitespace"></a>
+<h2>trailing_whitespace</h2>
+<b>trailing_whitespace</b>(<i>physical_line</i>)
+<p>
+Trailing whitespace is superfluous.
+</p><p>
+    The warning returned varies on whether the line itself is blank, for easier
+    filtering for those who want to indent their blank lines.
+</p><p>
+    Okay: spam(1)\n#
+    W291: spam(1) \n#
+    W293: class Foo(object):\n    \n    bang = 12
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="update_counts" ID="update_counts"></a>
+<h2>update_counts</h2>
+<b>update_counts</b>(<i>s, counts</i>)
+<p>
+Adds one to the counts of each appearance of characters in s,
+        for characters in counts
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="whitespace_around_comma" ID="whitespace_around_comma"></a>
+<h2>whitespace_around_comma</h2>
+<b>whitespace_around_comma</b>(<i>logical_line</i>)
+<p>
+Avoid extraneous whitespace after a comma or a colon.
+</p><p>
+    Note: these checks are disabled by default
+</p><p>
+    Okay: a = (1, 2)
+    E241: a = (1,  2)
+    E242: a = (1,\t2)
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="whitespace_around_keywords" ID="whitespace_around_keywords"></a>
+<h2>whitespace_around_keywords</h2>
+<b>whitespace_around_keywords</b>(<i>logical_line</i>)
+<p>
+Avoid extraneous whitespace around keywords.
+</p><p>
+    Okay: True and False
+    E271: True and  False
+    E272: True  and False
+    E273: True and\tFalse
+    E274: True\tand False
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="whitespace_around_named_parameter_equals" ID="whitespace_around_named_parameter_equals"></a>
+<h2>whitespace_around_named_parameter_equals</h2>
+<b>whitespace_around_named_parameter_equals</b>(<i>logical_line, tokens</i>)
+<p>
+Don't use spaces around the '=' sign in function arguments.
+</p><p>
+    Don't use spaces around the '=' sign when used to indicate a
+    keyword argument or a default parameter value.
+</p><p>
+    Okay: def complex(real, imag=0.0):
+    Okay: return magic(r=real, i=imag)
+    Okay: boolean(a == b)
+    Okay: boolean(a != b)
+    Okay: boolean(a <= b)
+    Okay: boolean(a >= b)
+    Okay: def foo(arg: int = 42):
+    Okay: async def foo(arg: int = 42):
+</p><p>
+    E251: def complex(real, imag = 0.0):
+    E251: return magic(r = real, i = imag)
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="whitespace_around_operator" ID="whitespace_around_operator"></a>
+<h2>whitespace_around_operator</h2>
+<b>whitespace_around_operator</b>(<i>logical_line</i>)
+<p>
+Avoid extraneous whitespace around an operator.
+</p><p>
+    Okay: a = 12 + 3
+    E221: a = 4  + 5
+    E222: a = 4 +  5
+    E223: a = 4\t+ 5
+    E224: a = 4 +\t5
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="whitespace_before_comment" ID="whitespace_before_comment"></a>
+<h2>whitespace_before_comment</h2>
+<b>whitespace_before_comment</b>(<i>logical_line, tokens</i>)
+<p>
+Separate inline comments by at least two spaces.
+</p><p>
+    An inline comment is a comment on the same line as a statement.  Inline
+    comments should be separated by at least two spaces from the statement.
+    They should start with a # and a single space.
+</p><p>
+    Each line of a block comment starts with a # and a single space
+    (unless it is indented text inside the comment).
+</p><p>
+    Okay: x = x + 1  # Increment x
+    Okay: x = x + 1    # Increment x
+    Okay: # Block comment
+    E261: x = x + 1 # Increment x
+    E262: x = x + 1  #Increment x
+    E262: x = x + 1  #  Increment x
+    E265: #Block comment
+    E266: ### Block comment
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="whitespace_before_parameters" ID="whitespace_before_parameters"></a>
+<h2>whitespace_before_parameters</h2>
+<b>whitespace_before_parameters</b>(<i>logical_line, tokens</i>)
+<p>
+Avoid extraneous whitespace.
+</p><p>
+    Avoid extraneous whitespace in the following situations:
+    - before the open parenthesis that starts the argument list of a
+      function call.
+    - before the open parenthesis that starts an indexing or slicing.
+</p><p>
+    Okay: spam(1)
+    E211: spam (1)
+</p><p>
+    Okay: dict['key'] = list[index]
+    E211: dict ['key'] = list[index]
+    E211: dict['key'] = list [index]
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/Documentation/Source/index-eric6.Plugins.CheckerPlugins.CodeStyleChecker.html	Sun Sep 04 16:50:23 2016 +0200
+++ b/Documentation/Source/index-eric6.Plugins.CheckerPlugins.CodeStyleChecker.html	Sun Sep 04 17:16:38 2016 +0200
@@ -58,7 +58,7 @@
 <td><a href="eric6.Plugins.CheckerPlugins.CodeStyleChecker.mccabe.html">mccabe</a></td>
 <td></td>
 </tr><tr>
-<td><a href="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pep8.html">pep8</a></td>
+<td><a href="eric6.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html">pycodestyle</a></td>
 <td></td>
 </tr><tr>
 <td><a href="eric6.Plugins.CheckerPlugins.CodeStyleChecker.translations.html">translations</a></td>
--- a/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleChecker.py	Sun Sep 04 16:50:23 2016 +0200
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleChecker.py	Sun Sep 04 17:16:38 2016 +0200
@@ -10,11 +10,11 @@
 import sys
 import multiprocessing
 
-import pep8
+import pycodestyle
 from NamingStyleChecker import NamingStyleChecker
 
 # register the name checker
-pep8.register_check(NamingStyleChecker, NamingStyleChecker.Codes)
+pycodestyle.register_check(NamingStyleChecker, NamingStyleChecker.Codes)
 
 from DocStyleChecker import DocStyleChecker
 from MiscellaneousChecker import MiscellaneousChecker
@@ -39,7 +39,7 @@
     return codeStyleBatchCheck
 
 
-class CodeStyleCheckerReport(pep8.BaseReport):
+class CodeStyleCheckerReport(pycodestyle.BaseReport):
     """
     Class implementing a special report to be used with our dialog.
     """
@@ -224,7 +224,7 @@
             ignore = []
         
         # check coding style
-        styleGuide = pep8.StyleGuide(
+        styleGuide = pycodestyle.StyleGuide(
             reporter=CodeStyleCheckerReport,
             repeat=repeatMessages,
             select=select,
--- a/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py	Sun Sep 04 16:50:23 2016 +0200
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py	Sun Sep 04 17:16:38 2016 +0200
@@ -25,7 +25,7 @@
 import Preferences
 import Utilities
 
-from . import pep8
+from . import pycodestyle
 
 try:
     basestring          # __IGNORE_WARNING__
@@ -294,14 +294,14 @@
             # initialize the data structure
             self.__data = {
                 "ExcludeFiles": "",
-                "ExcludeMessages": pep8.DEFAULT_IGNORE,
+                "ExcludeMessages": pycodestyle.DEFAULT_IGNORE,
                 "IncludeMessages": "",
                 "RepeatMessages": False,
                 "FixCodes": "",
                 "FixIssues": False,
             }
         if "MaxLineLength" not in self.__data:
-            self.__data["MaxLineLength"] = pep8.MAX_LINE_LENGTH
+            self.__data["MaxLineLength"] = pycodestyle.MAX_LINE_LENGTH
         if "HangClosing" not in self.__data:
             self.__data["HangClosing"] = False
         if "NoFixCodes" not in self.__data:
@@ -892,7 +892,7 @@
         self.excludeFilesEdit.setText(Preferences.Prefs.settings.value(
             "PEP8/ExcludeFilePatterns", ""))
         self.excludeMessagesEdit.setText(Preferences.Prefs.settings.value(
-            "PEP8/ExcludeMessages", pep8.DEFAULT_IGNORE))
+            "PEP8/ExcludeMessages", pycodestyle.DEFAULT_IGNORE))
         self.includeMessagesEdit.setText(Preferences.Prefs.settings.value(
             "PEP8/IncludeMessages", ""))
         self.repeatCheckBox.setChecked(Preferences.toBool(
@@ -906,7 +906,7 @@
         self.ignoredCheckBox.setChecked(Preferences.toBool(
             Preferences.Prefs.settings.value("PEP8/ShowIgnored", False)))
         self.lineLengthSpinBox.setValue(int(Preferences.Prefs.settings.value(
-            "PEP8/MaxLineLength", pep8.MAX_LINE_LENGTH)))
+            "PEP8/MaxLineLength", pycodestyle.MAX_LINE_LENGTH)))
         self.hangClosingCheckBox.setChecked(Preferences.toBool(
             Preferences.Prefs.settings.value("PEP8/HangClosing", False)))
         self.docTypeComboBox.setCurrentIndex(self.docTypeComboBox.findData(
@@ -969,7 +969,7 @@
         """
         Preferences.Prefs.settings.setValue("PEP8/ExcludeFilePatterns", "")
         Preferences.Prefs.settings.setValue(
-            "PEP8/ExcludeMessages", pep8.DEFAULT_IGNORE)
+            "PEP8/ExcludeMessages", pycodestyle.DEFAULT_IGNORE)
         Preferences.Prefs.settings.setValue("PEP8/IncludeMessages", "")
         Preferences.Prefs.settings.setValue("PEP8/RepeatMessages", False)
         Preferences.Prefs.settings.setValue("PEP8/FixCodes", "")
@@ -977,7 +977,7 @@
         Preferences.Prefs.settings.setValue("PEP8/FixIssues", False)
         Preferences.Prefs.settings.setValue("PEP8/ShowIgnored", False)
         Preferences.Prefs.settings.setValue(
-            "PEP8/MaxLineLength", pep8.MAX_LINE_LENGTH)
+            "PEP8/MaxLineLength", pycodestyle.MAX_LINE_LENGTH)
         Preferences.Prefs.settings.setValue("PEP8/HangClosing", False)
         Preferences.Prefs.settings.setValue("PEP8/DocstringType", "pep257")
         Preferences.Prefs.settings.setValue("PEP8/MaxCodeComplexity", 10)
--- a/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleFixer.py	Sun Sep 04 16:50:23 2016 +0200
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleFixer.py	Sun Sep 04 17:16:38 2016 +0200
@@ -21,7 +21,7 @@
 # CodeStyleCheckerDialog tries to import FixableCodeStyleIssues what fail under
 # Python3. So ignore it.
 try:
-    import pep8
+    import pycodestyle
 except ImportError:
     pass
 
@@ -1292,8 +1292,8 @@
         line = line - 1
         text = self.__source[line]
         
-        # This is necessary since pep8 sometimes reports columns that goes
-        # past the end of the physical line. This happens in cases like,
+        # This is necessary since pycodestyle sometimes reports columns that
+        # goes past the end of the physical line. This happens in cases like,
         # foo(bar\n=None)
         col = min(pos, len(text) - 1)
         if text[col].strip():
@@ -1491,7 +1491,7 @@
             if not text.lstrip().startswith("import"):
                 return (0, "", 0)
             
-            # pep8 (1.3.1) reports false positive if there is an import
+            # pycodestyle (1.3.1) reports false positive if there is an import
             # statement followed by a semicolon and some unrelated
             # statement with commas in it.
             if ';' in text:
@@ -2094,7 +2094,7 @@
         @param tokens list of tokens as generated by tokenize.generate_tokens
         @return logical line (string)
         """
-        # from pep8.py with minor modifications
+        # from pycodestyle.py with minor modifications
         logical = []
         previous = None
         for t in tokens:
@@ -2121,16 +2121,16 @@
 
     def pep8Expected(self):
         """
-        Public method to replicate logic in pep8.py, to know what level to
-        indent things to.
+        Public method to replicate logic in pycodestyle.py, to know what level
+        to indent things to.
 
         @return list of lists, where each list represents valid indent levels
         for the line in question, relative from the initial indent. However,
         the first entry is the indent level which was expected.
         """
         # What follows is an adjusted version of
-        # pep8.py:continuation_line_indentation. All of the comments have been
-        # stripped and the 'yield' statements replaced with 'pass'.
+        # pycodestyle.py:continuation_line_indentation. All of the comments
+        # have been stripped and the 'yield' statements replaced with 'pass'.
         if not self.tokens:
             return
 
@@ -2233,10 +2233,11 @@
                 valid_indents[row] = vi
 
                 # Returning to original continuation_line_indentation() from
-                # pep8.
+                # pycodestyle.
                 visual_indent = indent_chances.get(start[1])
                 last_indent = start
-                rel_indent[row] = pep8.expand_indent(line) - indent_level
+                rel_indent[row] = \
+                    pycodestyle.expand_indent(line) - indent_level
                 hang = rel_indent[row] - rel_indent[open_row]
 
                 if token_type == tokenize.OP and text in ']})':
--- a/Plugins/CheckerPlugins/CodeStyleChecker/NamingStyleChecker.py	Sun Sep 04 16:50:23 2016 +0200
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/NamingStyleChecker.py	Sun Sep 04 17:16:38 2016 +0200
@@ -35,11 +35,11 @@
     
     def __init__(self, tree, filename, options):
         """
-        Constructor (according to 'extended' pep8.py API)
+        Constructor (according to 'extended' pycodestyle.py API)
         
         @param tree AST tree of the source file
         @param filename name of the source file (string)
-        @param options options as parsed by pep8.StyleGuide
+        @param options options as parsed by pycodestyle.StyleGuide
         """
         self.__parents = collections.deque()
         self.__tree = tree
@@ -79,7 +79,7 @@
 
     def run(self):
         """
-        Public method run by the pep8.py checker.
+        Public method run by the pycodestyle.py checker.
         
         @return tuple giving line number, offset within line, code and
             checker function
--- a/Plugins/CheckerPlugins/CodeStyleChecker/pep8.py	Sun Sep 04 16:50:23 2016 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2339 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-# pycodestyle.py - Check Python source code formatting, according to PEP 8
-# Copyright (C) 2006-2009 Johann C. Rocholl <johann@rocholl.net>
-# Copyright (C) 2009-2014 Florent Xicluna <florent.xicluna@gmail.com>
-# Copyright (C) 2014-2016 Ian Lee <ianlee1521@gmail.com>
-#
-# Permission is hereby granted, free of charge, to any person
-# obtaining a copy of this software and associated documentation files
-# (the "Software"), to deal in the Software without restriction,
-# including without limitation the rights to use, copy, modify, merge,
-# publish, distribute, sublicense, and/or sell copies of the Software,
-# and to permit persons to whom the Software is furnished to do so,
-# subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be
-# included in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
-# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-r"""
-Check Python source code formatting, according to PEP 8.
-
-For usage and a list of options, try this:
-$ python pycodestyle.py -h
-
-This program and its regression test suite live here:
-https://github.com/pycqa/pycodestyle
-
-Groups of errors and warnings:
-E errors
-W warnings
-100 indentation
-200 whitespace
-300 blank lines
-400 imports
-500 line length
-600 deprecation
-700 statements
-900 syntax error
-"""
-from __future__ import with_statement
-
-#
-# This is a modified version to make the original pep8.py better suitable
-# for being called from within the eric6 IDE. The modifications are as
-# follows:
-#
-# - made messages translatable via Qt
-# - added code for eric6 integration
-#
-# Copyright (c) 2011 - 2016 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-import inspect
-import keyword
-import os
-import re
-import sys
-import time
-import tokenize
-##import ast
-from fnmatch import fnmatch
-from optparse import OptionParser
-try:
-    from configparser import RawConfigParser
-    from io import TextIOWrapper
-except ImportError:
-    from ConfigParser import RawConfigParser            # __IGNORE_WARNING__
-
-__version__ = '2.1.0.dev0'
-
-DEFAULT_EXCLUDE = '.svn,CVS,.bzr,.hg,.git,__pycache__,.tox'
-DEFAULT_IGNORE = 'E121,E123,E126,E226,E24,E704,W503'
-try:
-    if sys.platform == 'win32':
-        USER_CONFIG = os.path.expanduser(r'~\.pycodestyle')
-    else:
-        USER_CONFIG = os.path.join(
-            os.getenv('XDG_CONFIG_HOME') or os.path.expanduser('~/.config'),
-            'pycodestyle'
-        )
-except ImportError:
-    USER_CONFIG = None
-
-PROJECT_CONFIG = ('setup.cfg', 'tox.ini')
-TESTSUITE_PATH = os.path.join(os.path.dirname(__file__), 'testsuite')
-MAX_LINE_LENGTH = 79
-REPORT_FORMAT = {
-    'default': '%(path)s:%(row)d:%(col)d: %(code)s %(text)s',
-    'pylint': '%(path)s:%(row)d: [%(code)s] %(text)s',
-}
-
-PyCF_ONLY_AST = 1024
-SINGLETONS = frozenset(['False', 'None', 'True'])
-KEYWORDS = frozenset(keyword.kwlist + ['print']) - SINGLETONS
-UNARY_OPERATORS = frozenset(['>>', '**', '*', '+', '-'])
-ARITHMETIC_OP = frozenset(['**', '*', '/', '//', '+', '-'])
-WS_OPTIONAL_OPERATORS = ARITHMETIC_OP.union(['^', '&', '|', '<<', '>>', '%'])
-WS_NEEDED_OPERATORS = frozenset([
-    '**=', '*=', '/=', '//=', '+=', '-=', '!=', '<>', '<', '>',
-    '%=', '^=', '&=', '|=', '==', '<=', '>=', '<<=', '>>=', '='])
-WHITESPACE = frozenset(' \t')
-NEWLINE = frozenset([tokenize.NL, tokenize.NEWLINE])
-SKIP_TOKENS = NEWLINE.union([tokenize.INDENT, tokenize.DEDENT])
-# ERRORTOKEN is triggered by backticks in Python 3
-SKIP_COMMENTS = SKIP_TOKENS.union([tokenize.COMMENT, tokenize.ERRORTOKEN])
-BENCHMARK_KEYS = ['directories', 'files', 'logical lines', 'physical lines']
-
-INDENT_REGEX = re.compile(r'([ \t]*)')
-RAISE_COMMA_REGEX = re.compile(r'raise\s+\w+\s*,')
-RERAISE_COMMA_REGEX = re.compile(r'raise\s+\w+\s*,.*,\s*\w+\s*$')
-ERRORCODE_REGEX = re.compile(r'\b[A-Z]\d{3}\b')
-DOCSTRING_REGEX = re.compile(r'u?r?["\']')
-EXTRANEOUS_WHITESPACE_REGEX = re.compile(r'[[({] | []}),;:]')
-WHITESPACE_AFTER_COMMA_REGEX = re.compile(r'[,;:]\s*(?:  |\t)')
-COMPARE_SINGLETON_REGEX = re.compile(r'(\bNone|\bFalse|\bTrue)?\s*([=!]=)'
-                                     r'\s*(?(1)|(None|False|True))\b')
-COMPARE_NEGATIVE_REGEX = re.compile(r'\b(not)\s+[^][)(}{ ]+\s+(in|is)\s')
-COMPARE_TYPE_REGEX = re.compile(r'(?:[=!]=|is(?:\s+not)?)\s*type(?:s.\w+Type'
-                                r'|\s*\(\s*([^)]*[^ )])\s*\))')
-KEYWORD_REGEX = re.compile(r'(\s*)\b(?:%s)\b(\s*)' % r'|'.join(KEYWORDS))
-OPERATOR_REGEX = re.compile(r'(?:[^,\s])(\s*)(?:[-+*/|!<=>%&^]+)(\s*)')
-LAMBDA_REGEX = re.compile(r'\blambda\b')
-HUNK_REGEX = re.compile(r'^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@.*$')
-
-# Work around Python < 2.6 behaviour, which does not generate NL after
-# a comment which is on a line by itself.
-COMMENT_WITH_NL = tokenize.generate_tokens(['#\n'].pop).send(None)[1] == '#\n'
-
-
-##############################################################################
-# Plugins (check functions) for physical lines
-##############################################################################
-
-
-def tabs_or_spaces(physical_line, indent_char):
-    r"""Never mix tabs and spaces.
-
-    The most popular way of indenting Python is with spaces only.  The
-    second-most popular way is with tabs only.  Code indented with a mixture
-    of tabs and spaces should be converted to using spaces exclusively.  When
-    invoking the Python command line interpreter with the -t option, it issues
-    warnings about code that illegally mixes tabs and spaces.  When using -tt
-    these warnings become errors.  These options are highly recommended!
-
-    Okay: if a == 0:\n        a = 1\n        b = 1
-    E101: if a == 0:\n        a = 1\n\tb = 1
-    """
-    indent = INDENT_REGEX.match(physical_line).group(1)
-    for offset, char in enumerate(indent):
-        if char != indent_char:
-            return offset, "E101 indentation contains mixed spaces and tabs"
-
-
-def tabs_obsolete(physical_line):
-    r"""For new projects, spaces-only are strongly recommended over tabs.
-
-    Okay: if True:\n    return
-    W191: if True:\n\treturn
-    """
-    indent = INDENT_REGEX.match(physical_line).group(1)
-    if '\t' in indent:
-        return indent.index('\t'), "W191 indentation contains tabs"
-
-
-def trailing_whitespace(physical_line):
-    r"""Trailing whitespace is superfluous.
-
-    The warning returned varies on whether the line itself is blank, for easier
-    filtering for those who want to indent their blank lines.
-
-    Okay: spam(1)\n#
-    W291: spam(1) \n#
-    W293: class Foo(object):\n    \n    bang = 12
-    """
-    physical_line = physical_line.rstrip('\n')    # chr(10), newline
-    physical_line = physical_line.rstrip('\r')    # chr(13), carriage return
-    physical_line = physical_line.rstrip('\x0c')  # chr(12), form feed, ^L
-    stripped = physical_line.rstrip(' \t\v')
-    if physical_line != stripped:
-        if stripped:
-            return len(stripped), "W291 trailing whitespace"
-        else:
-            return 0, "W293 blank line contains whitespace"
-
-
-def trailing_blank_lines(physical_line, lines, line_number, total_lines):
-    r"""Trailing blank lines are superfluous.
-
-    Okay: spam(1)
-    W391: spam(1)\n
-
-    However the last line should end with a new line (warning W292).
-    """
-    if line_number == total_lines:
-        stripped_last_line = physical_line.rstrip()
-        if not stripped_last_line:
-            return 0, "W391 blank line at end of file"
-        if stripped_last_line == physical_line:
-            return len(physical_line), "W292 no newline at end of file"
-
-
-def maximum_line_length(physical_line, max_line_length, multiline, noqa):
-    r"""Limit all lines to a maximum of 79 characters.
-
-    There are still many devices around that are limited to 80 character
-    lines; plus, limiting windows to 80 characters makes it possible to have
-    several windows side-by-side.  The default wrapping on such devices looks
-    ugly.  Therefore, please limit all lines to a maximum of 79 characters.
-    For flowing long blocks of text (docstrings or comments), limiting the
-    length to 72 characters is recommended.
-
-    Reports error E501.
-    """
-    line = physical_line.rstrip()
-    length = len(line)
-    if length > max_line_length and not noqa:
-        # Special case for long URLs in multi-line docstrings or comments,
-        # but still report the error when the 72 first chars are whitespaces.
-        chunks = line.split()
-        if ((len(chunks) == 1 and multiline) or
-            (len(chunks) == 2 and chunks[0] == '#')) and \
-                len(line) - len(chunks[-1]) < max_line_length - 7:
-            return
-        if hasattr(line, 'decode'):   # Python 2
-            # The line could contain multi-byte characters
-            try:
-                length = len(line.decode('utf-8'))
-            except UnicodeError:
-                pass
-        if length > max_line_length:
-            return (max_line_length, "E501 line too long "
-                    "(%d > %d characters)" % (length, max_line_length),
-                    length, max_line_length)
-
-
-##############################################################################
-# Plugins (check functions) for logical lines
-##############################################################################
-
-
-def blank_lines(logical_line, blank_lines, indent_level, line_number,
-                blank_before, previous_logical,
-                previous_unindented_logical_line, previous_indent_level,
-                lines):
-    r"""Separate top-level function and class definitions with two blank lines.
-
-    Method definitions inside a class are separated by a single blank line.
-
-    Extra blank lines may be used (sparingly) to separate groups of related
-    functions.  Blank lines may be omitted between a bunch of related
-    one-liners (e.g. a set of dummy implementations).
-
-    Use blank lines in functions, sparingly, to indicate logical sections.
-
-    Okay: def a():\n    pass\n\n\ndef b():\n    pass
-    Okay: def a():\n    pass\n\n\nasync def b():\n    pass
-    Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
-
-    E301: class Foo:\n    b = 0\n    def bar():\n        pass
-    E302: def a():\n    pass\n\ndef b(n):\n    pass
-    E302: def a():\n    pass\n\nasync def b(n):\n    pass
-    E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
-    E303: def a():\n\n\n\n    pass
-    E304: @decorator\n\ndef a():\n    pass
-    E305: def a():\n    pass\na()
-    """
-    if line_number < 3 and not previous_logical:
-        return  # Don't expect blank lines before the first line
-    if previous_logical.startswith('@'):
-        if blank_lines:
-            yield 0, "E304 blank lines found after function decorator"
-    elif blank_lines > 2 or (indent_level and blank_lines == 2):
-        yield 0, "E303 too many blank lines (%d)", blank_lines
-    elif logical_line.startswith(('def ', 'async def ', 'class ', '@')):
-        if indent_level:
-            if not (blank_before or previous_indent_level < indent_level or
-                    DOCSTRING_REGEX.match(previous_logical)):
-                ancestor_level = indent_level
-                nested = False
-                # Search backwards for a def ancestor or tree root (top level).
-                for line in lines[line_number - 2::-1]:
-                    if line.strip() and expand_indent(line) < ancestor_level:
-                        ancestor_level = expand_indent(line)
-                        nested = line.lstrip().startswith('def ')
-                        if nested or ancestor_level == 0:
-                            break
-                if nested:
-                    yield 0, "E306 expected 1 blank line before a " \
-                        "nested definition, found 0"
-                else:
-                    yield 0, "E301 expected 1 blank line, found 0"
-        elif blank_before != 2:
-            yield 0, "E302 expected 2 blank lines, found %d", blank_before
-    elif (logical_line and not indent_level and blank_before != 2 and
-          previous_unindented_logical_line.startswith(('def', 'class'))):
-        yield 0, "E305 expected 2 blank lines after " \
-            "class or function definition, found %d", blank_before
-
-
-def extraneous_whitespace(logical_line):
-    r"""Avoid extraneous whitespace.
-
-    Avoid extraneous whitespace in these situations:
-    - Immediately inside parentheses, brackets or braces.
-    - Immediately before a comma, semicolon, or colon.
-
-    Okay: spam(ham[1], {eggs: 2})
-    E201: spam( ham[1], {eggs: 2})
-    E201: spam(ham[ 1], {eggs: 2})
-    E201: spam(ham[1], { eggs: 2})
-    E202: spam(ham[1], {eggs: 2} )
-    E202: spam(ham[1 ], {eggs: 2})
-    E202: spam(ham[1], {eggs: 2 })
-
-    E203: if x == 4: print x, y; x, y = y , x
-    E203: if x == 4: print x, y ; x, y = y, x
-    E203: if x == 4 : print x, y; x, y = y, x
-    """
-    line = logical_line
-    for match in EXTRANEOUS_WHITESPACE_REGEX.finditer(line):
-        text = match.group()
-        char = text.strip()
-        found = match.start()
-        if text == char + ' ':
-            # assert char in '([{'
-            yield found + 1, "E201 whitespace after '%s'", char
-        elif line[found - 1] != ',':
-            code = ('E202' if char in '}])' else 'E203')  # if char in ',;:'
-            yield found, "%s whitespace before '%s'" % (code, char), char
-
-
-def whitespace_around_keywords(logical_line):
-    r"""Avoid extraneous whitespace around keywords.
-
-    Okay: True and False
-    E271: True and  False
-    E272: True  and False
-    E273: True and\tFalse
-    E274: True\tand False
-    """
-    for match in KEYWORD_REGEX.finditer(logical_line):
-        before, after = match.groups()
-
-        if '\t' in before:
-            yield match.start(1), "E274 tab before keyword"
-        elif len(before) > 1:
-            yield match.start(1), "E272 multiple spaces before keyword"
-
-        if '\t' in after:
-            yield match.start(2), "E273 tab after keyword"
-        elif len(after) > 1:
-            yield match.start(2), "E271 multiple spaces after keyword"
-
-
-def missing_whitespace_after_import_keyword(logical_line):
-    r"""Multiple imports in form from x import (a, b, c) should have space
-    between import statement and parenthesised name list.
-
-    Okay: from foo import (bar, baz)
-    E275: from foo import(bar, baz)
-    E275: from importable.module import(bar, baz)
-    """
-    line = logical_line
-    indicator = ' import('
-    if line.startswith('from '):
-        found = line.find(indicator)
-        if -1 < found:
-            pos = found + len(indicator) - 1
-            yield pos, "E275 missing whitespace after keyword"
-
-
-def missing_whitespace(logical_line):
-    r"""Each comma, semicolon or colon should be followed by whitespace.
-
-    Okay: [a, b]
-    Okay: (3,)
-    Okay: a[1:4]
-    Okay: a[:4]
-    Okay: a[1:]
-    Okay: a[1:4:2]
-    E231: ['a','b']
-    E231: foo(bar,baz)
-    E231: [{'a':'b'}]
-    """
-    line = logical_line
-    for index in range(len(line) - 1):
-        char = line[index]
-        if char in ',;:' and line[index + 1] not in WHITESPACE:
-            before = line[:index]
-            if char == ':' and before.count('[') > before.count(']') and \
-                    before.rfind('{') < before.rfind('['):
-                continue  # Slice syntax, no space required
-            if char == ',' and line[index + 1] == ')':
-                continue  # Allow tuple with only one element: (3,)
-            yield index, "E231 missing whitespace after '%s'", char
-
-
-def indentation(logical_line, previous_logical, indent_char,
-                indent_level, previous_indent_level):
-    r"""Use 4 spaces per indentation level.
-
-    For really old code that you don't want to mess up, you can continue to
-    use 8-space tabs.
-
-    Okay: a = 1
-    Okay: if a == 0:\n    a = 1
-    E111:   a = 1
-    E114:   # a = 1
-
-    Okay: for item in items:\n    pass
-    E112: for item in items:\npass
-    E115: for item in items:\n# Hi\n    pass
-
-    Okay: a = 1\nb = 2
-    E113: a = 1\n    b = 2
-    E116: a = 1\n    # b = 2
-    """
-    c = 0 if logical_line else 3
-    tmpl = "E11%d %s" if logical_line else "E11%d %s (comment)"
-    if indent_level % 4:
-        yield 0, tmpl % (1 + c, "indentation is not a multiple of four")
-    indent_expect = previous_logical.endswith(':')
-    if indent_expect and indent_level <= previous_indent_level:
-        yield 0, tmpl % (2 + c, "expected an indented block")
-    elif not indent_expect and indent_level > previous_indent_level:
-        yield 0, tmpl % (3 + c, "unexpected indentation")
-
-
-def continued_indentation(logical_line, tokens, indent_level, hang_closing,
-                          indent_char, noqa, verbose):
-    r"""Continuation lines indentation.
-
-    Continuation lines should align wrapped elements either vertically
-    using Python's implicit line joining inside parentheses, brackets
-    and braces, or using a hanging indent.
-
-    When using a hanging indent these considerations should be applied:
-    - there should be no arguments on the first line, and
-    - further indentation should be used to clearly distinguish itself as a
-      continuation line.
-
-    Okay: a = (\n)
-    E123: a = (\n    )
-
-    Okay: a = (\n    42)
-    E121: a = (\n   42)
-    E122: a = (\n42)
-    E123: a = (\n    42\n    )
-    E124: a = (24,\n     42\n)
-    E125: if (\n    b):\n    pass
-    E126: a = (\n        42)
-    E127: a = (24,\n      42)
-    E128: a = (24,\n    42)
-    E129: if (a or\n    b):\n    pass
-    E131: a = (\n    42\n 24)
-    """
-    first_row = tokens[0][2][0]
-    nrows = 1 + tokens[-1][2][0] - first_row
-    if noqa or nrows == 1:
-        return
-
-    # indent_next tells us whether the next block is indented; assuming
-    # that it is indented by 4 spaces, then we should not allow 4-space
-    # indents on the final continuation line; in turn, some other
-    # indents are allowed to have an extra 4 spaces.
-    indent_next = logical_line.endswith(':')
-
-    row = depth = 0
-    valid_hangs = (4,) if indent_char != '\t' else (4, 8)
-    # remember how many brackets were opened on each line
-    parens = [0] * nrows
-    # relative indents of physical lines
-    rel_indent = [0] * nrows
-    # for each depth, collect a list of opening rows
-    open_rows = [[0]]
-    # for each depth, memorize the hanging indentation
-    hangs = [None]
-    # visual indents
-    indent_chances = {}
-    last_indent = tokens[0][2]
-    visual_indent = None
-    last_token_multiline = False
-    # for each depth, memorize the visual indent column
-    indent = [last_indent[1]]
-    if verbose >= 3:
-        print(">>> " + tokens[0][4].rstrip())
-
-    for token_type, text, start, end, line in tokens:
-
-        newline = row < start[0] - first_row
-        if newline:
-            row = start[0] - first_row
-            newline = not last_token_multiline and token_type not in NEWLINE
-
-        if newline:
-            # this is the beginning of a continuation line.
-            last_indent = start
-            if verbose >= 3:
-                print("... " + line.rstrip())
-
-            # record the initial indent.
-            rel_indent[row] = expand_indent(line) - indent_level
-
-            # identify closing bracket
-            close_bracket = (token_type == tokenize.OP and text in ']})')
-
-            # is the indent relative to an opening bracket line?
-            for open_row in reversed(open_rows[depth]):
-                hang = rel_indent[row] - rel_indent[open_row]
-                hanging_indent = hang in valid_hangs
-                if hanging_indent:
-                    break
-            if hangs[depth]:
-                hanging_indent = (hang == hangs[depth])
-            # is there any chance of visual indent?
-            visual_indent = (not close_bracket and hang > 0 and
-                             indent_chances.get(start[1]))
-
-            if close_bracket and indent[depth]:
-                # closing bracket for visual indent
-                if start[1] != indent[depth]:
-                    yield (start, "E124 closing bracket does not match "
-                           "visual indentation")
-            elif close_bracket and not hang:
-                # closing bracket matches indentation of opening bracket's line
-                if hang_closing:
-                    yield start, "E133 closing bracket is missing indentation"
-            elif indent[depth] and start[1] < indent[depth]:
-                if visual_indent is not True:
-                    # visual indent is broken
-                    yield (start, "E128 continuation line "
-                           "under-indented for visual indent")
-            elif hanging_indent or (indent_next and rel_indent[row] == 8):
-                # hanging indent is verified
-                if close_bracket and not hang_closing:
-                    yield (start, "E123 closing bracket does not match "
-                           "indentation of opening bracket's line")
-                hangs[depth] = hang
-            elif visual_indent is True:
-                # visual indent is verified
-                indent[depth] = start[1]
-            elif visual_indent in (text, str):
-                # ignore token lined up with matching one from a previous line
-                pass
-            else:
-                # indent is broken
-                if hang <= 0:
-                    error = "E122", "missing indentation or outdented"
-                elif indent[depth]:
-                    error = "E127", "over-indented for visual indent"
-                elif not close_bracket and hangs[depth]:
-                    error = "E131", "unaligned for hanging indent"
-                else:
-                    hangs[depth] = hang
-                    if hang > 4:
-                        error = "E126", "over-indented for hanging indent"
-                    else:
-                        error = "E121", "under-indented for hanging indent"
-                yield start, "%s continuation line %s" % error
-
-        # look for visual indenting
-        if (parens[row] and
-                token_type not in (tokenize.NL, tokenize.COMMENT) and
-                not indent[depth]):
-            indent[depth] = start[1]
-            indent_chances[start[1]] = True
-            if verbose >= 4:
-                print("bracket depth %s indent to %s" % (depth, start[1]))
-        # deal with implicit string concatenation
-        elif (token_type in (tokenize.STRING, tokenize.COMMENT) or
-              text in ('u', 'ur', 'b', 'br')):
-            indent_chances[start[1]] = str
-        # special case for the "if" statement because len("if (") == 4
-        elif not indent_chances and not row and not depth and text == 'if':
-            indent_chances[end[1] + 1] = True
-        elif text == ':' and line[end[1]:].isspace():
-            open_rows[depth].append(row)
-
-        # keep track of bracket depth
-        if token_type == tokenize.OP:
-            if text in '([{':
-                depth += 1
-                indent.append(0)
-                hangs.append(None)
-                if len(open_rows) == depth:
-                    open_rows.append([])
-                open_rows[depth].append(row)
-                parens[row] += 1
-                if verbose >= 4:
-                    print("bracket depth %s seen, col %s, visual min = %s" %
-                          (depth, start[1], indent[depth]))
-            elif text in ')]}' and depth > 0:
-                # parent indents should not be more than this one
-                prev_indent = indent.pop() or last_indent[1]
-                hangs.pop()
-                for d in range(depth):
-                    if indent[d] > prev_indent:
-                        indent[d] = 0
-                for ind in list(indent_chances):
-                    if ind >= prev_indent:
-                        del indent_chances[ind]
-                del open_rows[depth + 1:]
-                depth -= 1
-                if depth:
-                    indent_chances[indent[depth]] = True
-                for idx in range(row, -1, -1):
-                    if parens[idx]:
-                        parens[idx] -= 1
-                        break
-            assert len(indent) == depth + 1
-            if start[1] not in indent_chances:
-                # allow lining up tokens
-                indent_chances[start[1]] = text
-
-        last_token_multiline = (start[0] != end[0])
-        if last_token_multiline:
-            rel_indent[end[0] - first_row] = rel_indent[row]
-
-    if indent_next and expand_indent(line) == indent_level + 4:
-        pos = (start[0], indent[0] + 4)
-        if visual_indent:
-            code = "E129 visually indented line"
-        else:
-            code = "E125 continuation line"
-        yield pos, "%s with same indent as next logical line" % code
-
-
-def whitespace_before_parameters(logical_line, tokens):
-    r"""Avoid extraneous whitespace.
-
-    Avoid extraneous whitespace in the following situations:
-    - before the open parenthesis that starts the argument list of a
-      function call.
-    - before the open parenthesis that starts an indexing or slicing.
-
-    Okay: spam(1)
-    E211: spam (1)
-
-    Okay: dict['key'] = list[index]
-    E211: dict ['key'] = list[index]
-    E211: dict['key'] = list [index]
-    """
-    prev_type, prev_text, __, prev_end, __ = tokens[0]
-    for index in range(1, len(tokens)):
-        token_type, text, start, end, __ = tokens[index]
-        if (token_type == tokenize.OP and
-            text in '([' and
-            start != prev_end and
-            (prev_type == tokenize.NAME or prev_text in '}])') and
-            # Syntax "class A (B):" is allowed, but avoid it
-            (index < 2 or tokens[index - 2][1] != 'class') and
-                # Allow "return (a.foo for a in range(5))"
-                not keyword.iskeyword(prev_text)):
-            yield prev_end, "E211 whitespace before '%s'", text
-        prev_type = token_type
-        prev_text = text
-        prev_end = end
-
-
-def whitespace_around_operator(logical_line):
-    r"""Avoid extraneous whitespace around an operator.
-
-    Okay: a = 12 + 3
-    E221: a = 4  + 5
-    E222: a = 4 +  5
-    E223: a = 4\t+ 5
-    E224: a = 4 +\t5
-    """
-    for match in OPERATOR_REGEX.finditer(logical_line):
-        before, after = match.groups()
-
-        if '\t' in before:
-            yield match.start(1), "E223 tab before operator"
-        elif len(before) > 1:
-            yield match.start(1), "E221 multiple spaces before operator"
-
-        if '\t' in after:
-            yield match.start(2), "E224 tab after operator"
-        elif len(after) > 1:
-            yield match.start(2), "E222 multiple spaces after operator"
-
-
-def missing_whitespace_around_operator(logical_line, tokens):
-    r"""Surround operators with a single space on either side.
-
-    - Always surround these binary operators with a single space on
-      either side: assignment (=), augmented assignment (+=, -= etc.),
-      comparisons (==, <, >, !=, <=, >=, in, not in, is, is not),
-      Booleans (and, or, not).
-
-    - If operators with different priorities are used, consider adding
-      whitespace around the operators with the lowest priorities.
-
-    Okay: i = i + 1
-    Okay: submitted += 1
-    Okay: x = x * 2 - 1
-    Okay: hypot2 = x * x + y * y
-    Okay: c = (a + b) * (a - b)
-    Okay: foo(bar, key='word', *args, **kwargs)
-    Okay: alpha[:-i]
-
-    E225: i=i+1
-    E225: submitted +=1
-    E225: x = x /2 - 1
-    E225: z = x **y
-    E226: c = (a+b) * (a-b)
-    E226: hypot2 = x*x + y*y
-    E227: c = a|b
-    E228: msg = fmt%(errno, errmsg)
-    """
-    parens = 0
-    need_space = False
-    prev_type = tokenize.OP
-    prev_text = prev_end = None
-    for token_type, text, start, end, line in tokens:
-        if token_type in SKIP_COMMENTS:
-            continue
-        if text in ('(', 'lambda'):
-            parens += 1
-        elif text == ')':
-            parens -= 1
-        if need_space:
-            if start != prev_end:
-                # Found a (probably) needed space
-                if need_space is not True and not need_space[1]:
-                    yield (need_space[0],
-                           "E225 missing whitespace around operator")
-                need_space = False
-            elif text == '>' and prev_text in ('<', '-'):
-                # Tolerate the "<>" operator, even if running Python 3
-                # Deal with Python 3's annotated return value "->"
-                pass
-            else:
-                if need_space is True or need_space[1]:
-                    # A needed trailing space was not found
-                    yield prev_end, "E225 missing whitespace around operator"
-                elif prev_text != '**':
-                    code, optype = 'E226', 'arithmetic'
-                    if prev_text == '%':
-                        code, optype = 'E228', 'modulo'
-                    elif prev_text not in ARITHMETIC_OP:
-                        code, optype = 'E227', 'bitwise or shift'
-                    yield (need_space[0], "%s missing whitespace "
-                           "around %s operator" % (code, optype))
-                need_space = False
-        elif token_type == tokenize.OP and prev_end is not None:
-            if text == '=' and parens:
-                # Allow keyword args or defaults: foo(bar=None).
-                pass
-            elif text in WS_NEEDED_OPERATORS:
-                need_space = True
-            elif text in UNARY_OPERATORS:
-                # Check if the operator is being used as a binary operator
-                # Allow unary operators: -123, -x, +1.
-                # Allow argument unpacking: foo(*args, **kwargs).
-                if (prev_text in '}])' if prev_type == tokenize.OP
-                        else prev_text not in KEYWORDS):
-                    need_space = None
-            elif text in WS_OPTIONAL_OPERATORS:
-                need_space = None
-
-            if need_space is None:
-                # Surrounding space is optional, but ensure that
-                # trailing space matches opening space
-                need_space = (prev_end, start != prev_end)
-            elif need_space and start == prev_end:
-                # A needed opening space was not found
-                yield prev_end, "E225 missing whitespace around operator"
-                need_space = False
-        prev_type = token_type
-        prev_text = text
-        prev_end = end
-
-
-def whitespace_around_comma(logical_line):
-    r"""Avoid extraneous whitespace after a comma or a colon.
-
-    Note: these checks are disabled by default
-
-    Okay: a = (1, 2)
-    E241: a = (1,  2)
-    E242: a = (1,\t2)
-    """
-    line = logical_line
-    for m in WHITESPACE_AFTER_COMMA_REGEX.finditer(line):
-        found = m.start() + 1
-        if '\t' in m.group():
-            yield found, "E242 tab after '%s'", m.group()[0]
-        else:
-            yield found, "E241 multiple spaces after '%s'", m.group()[0]
-
-
-def whitespace_around_named_parameter_equals(logical_line, tokens):
-    r"""Don't use spaces around the '=' sign in function arguments.
-
-    Don't use spaces around the '=' sign when used to indicate a
-    keyword argument or a default parameter value.
-
-    Okay: def complex(real, imag=0.0):
-    Okay: return magic(r=real, i=imag)
-    Okay: boolean(a == b)
-    Okay: boolean(a != b)
-    Okay: boolean(a <= b)
-    Okay: boolean(a >= b)
-    Okay: def foo(arg: int = 42):
-    Okay: async def foo(arg: int = 42):
-
-    E251: def complex(real, imag = 0.0):
-    E251: return magic(r = real, i = imag)
-    """
-    parens = 0
-    no_space = False
-    prev_end = None
-    annotated_func_arg = False
-    in_def = logical_line.startswith(('def', 'async def'))
-    message = "E251 unexpected spaces around keyword / parameter equals"
-    for token_type, text, start, end, line in tokens:
-        if token_type == tokenize.NL:
-            continue
-        if no_space:
-            no_space = False
-            if start != prev_end:
-                yield (prev_end, message)
-        if token_type == tokenize.OP:
-            if text in '([':
-                parens += 1
-            elif text in ')]':
-                parens -= 1
-            elif in_def and text == ':' and parens == 1:
-                annotated_func_arg = True
-            elif parens and text == ',' and parens == 1:
-                annotated_func_arg = False
-            elif parens and text == '=' and not annotated_func_arg:
-                no_space = True
-                if start != prev_end:
-                    yield (prev_end, message)
-            if not parens:
-                annotated_func_arg = False
-
-        prev_end = end
-
-
-def whitespace_before_comment(logical_line, tokens):
-    r"""Separate inline comments by at least two spaces.
-
-    An inline comment is a comment on the same line as a statement.  Inline
-    comments should be separated by at least two spaces from the statement.
-    They should start with a # and a single space.
-
-    Each line of a block comment starts with a # and a single space
-    (unless it is indented text inside the comment).
-
-    Okay: x = x + 1  # Increment x
-    Okay: x = x + 1    # Increment x
-    Okay: # Block comment
-    E261: x = x + 1 # Increment x
-    E262: x = x + 1  #Increment x
-    E262: x = x + 1  #  Increment x
-    E265: #Block comment
-    E266: ### Block comment
-    """
-    prev_end = (0, 0)
-    for token_type, text, start, end, line in tokens:
-        if token_type == tokenize.COMMENT:
-            inline_comment = line[:start[1]].strip()
-            if inline_comment:
-                if prev_end[0] == start[0] and start[1] < prev_end[1] + 2:
-                    yield (prev_end,
-                           "E261 at least two spaces before inline comment")
-            symbol, sp, comment = text.partition(' ')
-            bad_prefix = symbol not in '#:' and (symbol.lstrip('#')[:1] or '#')
-            if inline_comment:
-                if bad_prefix or comment[:1] in WHITESPACE:
-                    yield start, "E262 inline comment should start with '# '"
-            elif bad_prefix and (bad_prefix != '!' or start[0] > 1):
-                if bad_prefix != '#':
-                    yield start, "E265 block comment should start with '# '"
-                elif comment:
-                    yield start, "E266 too many leading '#' for block comment"
-        elif token_type != tokenize.NL:
-            prev_end = end
-
-
-def imports_on_separate_lines(logical_line):
-    r"""Place imports on separate lines.
-
-    Okay: import os\nimport sys
-    E401: import sys, os
-
-    Okay: from subprocess import Popen, PIPE
-    Okay: from myclas import MyClass
-    Okay: from foo.bar.yourclass import YourClass
-    Okay: import myclass
-    Okay: import foo.bar.yourclass
-    """
-    line = logical_line
-    if line.startswith('import '):
-        found = line.find(',')
-        if -1 < found and ';' not in line[:found]:
-            yield found, "E401 multiple imports on one line"
-
-
-def module_imports_on_top_of_file(
-        logical_line, indent_level, checker_state, noqa):
-    r"""Place imports at the top of the file.
-
-    Always put imports at the top of the file, just after any module comments
-    and docstrings, and before module globals and constants.
-
-    Okay: import os
-    Okay: # this is a comment\nimport os
-    Okay: '''this is a module docstring'''\nimport os
-    Okay: r'''this is a module docstring'''\nimport os
-    Okay: try:\n    import x\nexcept:\n    pass\nelse:\n    pass\nimport y
-    Okay: try:\n    import x\nexcept:\n    pass\nfinally:\n    pass\nimport y
-    E402: a=1\nimport os
-    E402: 'One string'\n"Two string"\nimport os
-    E402: a=1\nfrom sys import x
-
-    Okay: if x:\n    import os
-    """
-    def is_string_literal(line):
-        if line[0] in 'uUbB':
-            line = line[1:]
-        if line and line[0] in 'rR':
-            line = line[1:]
-        return line and (line[0] == '"' or line[0] == "'")
-
-    allowed_try_keywords = ('try', 'except', 'else', 'finally')
-
-    if indent_level:  # Allow imports in conditional statements or functions
-        return
-    if not logical_line:  # Allow empty lines or comments
-        return
-    if noqa:
-        return
-    line = logical_line
-    if line.startswith('import ') or line.startswith('from '):
-        if checker_state.get('seen_non_imports', False):
-            yield 0, "E402 module level import not at top of file"
-    elif any(line.startswith(kw) for kw in allowed_try_keywords):
-        # Allow try, except, else, finally keywords intermixed with imports in
-        # order to support conditional importing
-        return
-    elif is_string_literal(line):
-        # The first literal is a docstring, allow it. Otherwise, report error.
-        if checker_state.get('seen_docstring', False):
-            checker_state['seen_non_imports'] = True
-        else:
-            checker_state['seen_docstring'] = True
-    else:
-        checker_state['seen_non_imports'] = True
-
-
-def compound_statements(logical_line):
-    r"""Compound statements (on the same line) are generally discouraged.
-
-    While sometimes it's okay to put an if/for/while with a small body
-    on the same line, never do this for multi-clause statements.
-    Also avoid folding such long lines!
-
-    Always use a def statement instead of an assignment statement that
-    binds a lambda expression directly to a name.
-
-    Okay: if foo == 'blah':\n    do_blah_thing()
-    Okay: do_one()
-    Okay: do_two()
-    Okay: do_three()
-
-    E701: if foo == 'blah': do_blah_thing()
-    E701: for x in lst: total += x
-    E701: while t < 10: t = delay()
-    E701: if foo == 'blah': do_blah_thing()
-    E701: else: do_non_blah_thing()
-    E701: try: something()
-    E701: finally: cleanup()
-    E701: if foo == 'blah': one(); two(); three()
-    E702: do_one(); do_two(); do_three()
-    E703: do_four();  # useless semicolon
-    E704: def f(x): return 2*x
-    E705: async def f(x): return 2*x
-    E731: f = lambda x: 2*x
-    """
-    line = logical_line
-    last_char = len(line) - 1
-    found = line.find(':')
-    prev_found = 0
-    counts = dict((char, 0) for char in '{}[]()')
-    while -1 < found < last_char:
-        update_counts(line[prev_found:found], counts)
-        if ((counts['{'] <= counts['}'] and   # {'a': 1} (dict)
-             counts['['] <= counts[']'] and   # [1:2] (slice)
-             counts['('] <= counts[')'])):    # (annotation)
-            lambda_kw = LAMBDA_REGEX.search(line, 0, found)
-            if lambda_kw:
-                before = line[:lambda_kw.start()].rstrip()
-                if before[-1:] == '=' and isidentifier(before[:-1].strip()):
-                    yield 0, ("E731 do not assign a lambda expression, use a "
-                              "def")
-                break
-            if line.startswith('def '):
-                yield 0, "E704 multiple statements on one line (def)"
-            elif line.startswith('async def '):
-                yield 0, "E705 multiple statements on one line (async def)"
-            else:
-                yield found, "E701 multiple statements on one line (colon)"
-        prev_found = found
-        found = line.find(':', found + 1)
-    found = line.find(';')
-    while -1 < found:
-        if found < last_char:
-            yield found, "E702 multiple statements on one line (semicolon)"
-        else:
-            yield found, "E703 statement ends with a semicolon"
-        found = line.find(';', found + 1)
-
-
-def explicit_line_join(logical_line, tokens):
-    r"""Avoid explicit line join between brackets.
-
-    The preferred way of wrapping long lines is by using Python's implied line
-    continuation inside parentheses, brackets and braces.  Long lines can be
-    broken over multiple lines by wrapping expressions in parentheses.  These
-    should be used in preference to using a backslash for line continuation.
-
-    E502: aaa = [123, \\n       123]
-    E502: aaa = ("bbb " \\n       "ccc")
-
-    Okay: aaa = [123,\n       123]
-    Okay: aaa = ("bbb "\n       "ccc")
-    Okay: aaa = "bbb " \\n    "ccc"
-    Okay: aaa = 123  # \\
-    """
-    prev_start = prev_end = parens = 0
-    comment = False
-    backslash = None
-    for token_type, text, start, end, line in tokens:
-        if token_type == tokenize.COMMENT:
-            comment = True
-        if start[0] != prev_start and parens and backslash and not comment:
-            yield backslash, "E502 the backslash is redundant between brackets"
-        if end[0] != prev_end:
-            if line.rstrip('\r\n').endswith('\\'):
-                backslash = (end[0], len(line.splitlines()[-1]) - 1)
-            else:
-                backslash = None
-            prev_start = prev_end = end[0]
-        else:
-            prev_start = start[0]
-        if token_type == tokenize.OP:
-            if text in '([{':
-                parens += 1
-            elif text in ')]}':
-                parens -= 1
-
-
-def break_around_binary_operator(logical_line, tokens):
-    r"""
-    Avoid breaks before binary operators.
-
-    The preferred place to break around a binary operator is after the
-    operator, not before it.
-
-    W503: (width == 0\n + height == 0)
-    W503: (width == 0\n and height == 0)
-
-    Okay: (width == 0 +\n height == 0)
-    Okay: foo(\n    -x)
-    Okay: foo(x\n    [])
-    Okay: x = '''\n''' + ''
-    Okay: foo(x,\n    -y)
-    Okay: foo(x,  # comment\n    -y)
-    Okay: var = (1 &\n       ~2)
-    Okay: var = (1 /\n       -2)
-    Okay: var = (1 +\n       -1 +\n       -2)
-    """
-    def is_binary_operator(token_type, text):
-        # The % character is strictly speaking a binary operator, but the
-        # common usage seems to be to put it next to the format parameters,
-        # after a line break.
-        return ((token_type == tokenize.OP or text in ['and', 'or']) and
-                text not in "()[]{},:.;@=%~")
-
-    line_break = False
-    unary_context = True
-    # Previous non-newline token types and text
-    previous_token_type = None
-    previous_text = None
-    for token_type, text, start, end, line in tokens:
-        if token_type == tokenize.COMMENT:
-            continue
-        if ('\n' in text or '\r' in text) and token_type != tokenize.STRING:
-            line_break = True
-        else:
-            if (is_binary_operator(token_type, text) and line_break and
-                    not unary_context and
-                    not is_binary_operator(previous_token_type,
-                                           previous_text)):
-                yield start, "W503 line break before binary operator"
-            unary_context = text in '([{,;'
-            line_break = False
-            previous_token_type = token_type
-            previous_text = text
-
-
-def comparison_to_singleton(logical_line, noqa):
-    r"""Comparison to singletons should use "is" or "is not".
-
-    Comparisons to singletons like None should always be done
-    with "is" or "is not", never the equality operators.
-
-    Okay: if arg is not None:
-    E711: if arg != None:
-    E711: if None == arg:
-    E712: if arg == True:
-    E712: if False == arg:
-
-    Also, beware of writing if x when you really mean if x is not None --
-    e.g. when testing whether a variable or argument that defaults to None was
-    set to some other value.  The other value might have a type (such as a
-    container) that could be false in a boolean context!
-    """
-    match = not noqa and COMPARE_SINGLETON_REGEX.search(logical_line)
-    if match:
-        singleton = match.group(1) or match.group(3)
-        same = (match.group(2) == '==')
-
-        msg = "'if cond is %s:'" % (('' if same else 'not ') + singleton)
-        if singleton in ('None',):
-            code = 'E711'
-        else:
-            code = 'E712'
-            nonzero = ((singleton == 'True' and same) or
-                       (singleton == 'False' and not same))
-            msg += " or 'if %scond:'" % ('' if nonzero else 'not ')
-        yield (match.start(2), ("%s comparison to %s should be %s" %
-                                (code, singleton, msg)), singleton, msg)
-
-
-def comparison_negative(logical_line):
-    r"""Negative comparison should be done using "not in" and "is not".
-
-    Okay: if x not in y:\n    pass
-    Okay: assert (X in Y or X is Z)
-    Okay: if not (X in Y):\n    pass
-    Okay: zz = x is not y
-    E713: Z = not X in Y
-    E713: if not X.B in Y:\n    pass
-    E714: if not X is Y:\n    pass
-    E714: Z = not X.B is Y
-    """
-    match = COMPARE_NEGATIVE_REGEX.search(logical_line)
-    if match:
-        pos = match.start(1)
-        if match.group(2) == 'in':
-            yield pos, "E713 test for membership should be 'not in'"
-        else:
-            yield pos, "E714 test for object identity should be 'is not'"
-
-
-def comparison_type(logical_line, noqa):
-    r"""Object type comparisons should always use isinstance().
-
-    Do not compare types directly.
-
-    Okay: if isinstance(obj, int):
-    E721: if type(obj) is type(1):
-
-    When checking if an object is a string, keep in mind that it might be a
-    unicode string too! In Python 2.3, str and unicode have a common base
-    class, basestring, so you can do:
-
-    Okay: if isinstance(obj, basestring):
-    Okay: if type(a1) is type(b1):
-    """
-    match = COMPARE_TYPE_REGEX.search(logical_line)
-    if match and not noqa:
-        inst = match.group(1)
-        if inst and isidentifier(inst) and inst not in SINGLETONS:
-            return  # Allow comparison for types which are not obvious
-        yield match.start(), "E721 do not compare types, use 'isinstance()'"
-
-
-def ambiguous_identifier(logical_line, tokens):
-    r"""Never use the characters 'l', 'O', or 'I' as variable names.
-
-    In some fonts, these characters are indistinguishable from the numerals
-    one and zero. When tempted to use 'l', use 'L' instead.
-
-    Okay: L = 0
-    Okay: o = 123
-    Okay: i = 42
-    E741: l = 0
-    E741: O = 123
-    E741: I = 42
-
-    Variables can be bound in several other contexts, including class and
-    function definitions, 'global' and 'nonlocal' statements, exception
-    handlers, and 'with' statements.
-
-    Okay: except AttributeError as o:
-    Okay: with lock as L:
-    E741: except AttributeError as O:
-    E741: with lock as l:
-    E741: global I
-    E741: nonlocal l
-    E742: class I(object):
-    E743: def l(x):
-    """
-    idents_to_avoid = ('l', 'O', 'I')
-    prev_type, prev_text, prev_start, prev_end, __ = tokens[0]
-    for token_type, text, start, end, line in tokens[1:]:
-        ident = pos = None
-        # identifiers on the lhs of an assignment operator
-        if token_type == tokenize.OP and '=' in text:
-            if prev_text in idents_to_avoid:
-                ident = prev_text
-                pos = prev_start
-        # identifiers bound to a value with 'as', 'global', or 'nonlocal'
-        if prev_text in ('as', 'global', 'nonlocal'):
-            if text in idents_to_avoid:
-                ident = text
-                pos = start
-        if prev_text == 'class':
-            if text in idents_to_avoid:
-                yield start, "E742 ambiguous class definition '%s'", text
-        if prev_text == 'def':
-            if text in idents_to_avoid:
-                yield start, "E743 ambiguous function definition '%s'", text
-        if ident:
-            yield pos, "E741 ambiguous variable name '%s'", ident
-        prev_text = text
-        prev_start = start
-
-
-def python_3000_has_key(logical_line, noqa):
-    r"""The {}.has_key() method is removed in Python 3: use the 'in' operator.
-
-    Okay: if "alph" in d:\n    print d["alph"]
-    W601: assert d.has_key('alph')
-    """
-    pos = logical_line.find('.has_key(')
-    if pos > -1 and not noqa:
-        yield pos, "W601 .has_key() is deprecated, use 'in'"
-
-
-def python_3000_raise_comma(logical_line):
-    r"""When raising an exception, use "raise ValueError('message')".
-
-    The older form is removed in Python 3.
-
-    Okay: raise DummyError("Message")
-    W602: raise DummyError, "Message"
-    """
-    match = RAISE_COMMA_REGEX.match(logical_line)
-    if match and not RERAISE_COMMA_REGEX.match(logical_line):
-        yield match.end() - 1, "W602 deprecated form of raising exception"
-
-
-def python_3000_not_equal(logical_line):
-    r"""New code should always use != instead of <>.
-
-    The older syntax is removed in Python 3.
-
-    Okay: if a != 'no':
-    W603: if a <> 'no':
-    """
-    pos = logical_line.find('<>')
-    if pos > -1:
-        yield pos, "W603 '<>' is deprecated, use '!='"
-
-
-def python_3000_backticks(logical_line):
-    r"""Use repr() instead of backticks in Python 3.
-
-    Okay: val = repr(1 + 2)
-    W604: val = `1 + 2`
-    """
-    pos = logical_line.find('`')
-    if pos > -1:
-        yield pos, "W604 backticks are deprecated, use 'repr()'"
-
-
-##############################################################################
-# Helper functions
-##############################################################################
-
-
-if sys.version_info < (3,):
-    # Python 2: implicit encoding.
-    def readlines(filename):
-        """Read the source code."""
-        with open(filename, 'rU') as f:
-            return f.readlines()
-    isidentifier = re.compile(r'[a-zA-Z_]\w*$').match
-    stdin_get_value = sys.stdin.read
-else:
-    # Python 3
-    def readlines(filename):
-        """Read the source code."""
-        try:
-            with open(filename, 'rb') as f:
-                (coding, lines) = tokenize.detect_encoding(f.readline)
-                f = TextIOWrapper(f, coding, line_buffering=True)
-                return [line.decode(coding) for line in lines] + f.readlines()
-        except (LookupError, SyntaxError, UnicodeError):
-            # Fall back if file encoding is improperly declared
-            with open(filename, encoding='latin-1') as f:
-                return f.readlines()
-    isidentifier = str.isidentifier
-
-    def stdin_get_value():
-        """Read the value from stdin."""
-        return TextIOWrapper(sys.stdin.buffer, errors='ignore').read()
-
-noqa = re.compile(r'# no(?:qa|pep8)\b', re.I).search
-
-
-def expand_indent(line):
-    r"""Return the amount of indentation.
-
-    Tabs are expanded to the next multiple of 8.
-
-    >>> expand_indent('    ')
-    4
-    >>> expand_indent('\t')
-    8
-    >>> expand_indent('       \t')
-    8
-    >>> expand_indent('        \t')
-    16
-    """
-    if '\t' not in line:
-        return len(line) - len(line.lstrip())
-    result = 0
-    for char in line:
-        if char == '\t':
-            result = result // 8 * 8 + 8
-        elif char == ' ':
-            result += 1
-        else:
-            break
-    return result
-
-
-def mute_string(text):
-    """Replace contents with 'xxx' to prevent syntax matching.
-
-    >>> mute_string('"abc"')
-    '"xxx"'
-    >>> mute_string("'''abc'''")
-    "'''xxx'''"
-    >>> mute_string("r'abc'")
-    "r'xxx'"
-    """
-    # String modifiers (e.g. u or r)
-    start = text.index(text[-1]) + 1
-    end = len(text) - 1
-    # Triple quotes
-    if text[-3:] in ('"""', "'''"):
-        start += 2
-        end -= 2
-    return text[:start] + 'x' * (end - start) + text[end:]
-
-
-def parse_udiff(diff, patterns=None, parent='.'):
-    """Return a dictionary of matching lines."""
-    # For each file of the diff, the entry key is the filename,
-    # and the value is a set of row numbers to consider.
-    rv = {}
-    path = nrows = None
-    for line in diff.splitlines():
-        if nrows:
-            if line[:1] != '-':
-                nrows -= 1
-            continue
-        if line[:3] == '@@ ':
-            hunk_match = HUNK_REGEX.match(line)
-            (row, nrows) = [int(g or '1') for g in hunk_match.groups()]
-            rv[path].update(range(row, row + nrows))
-        elif line[:3] == '+++':
-            path = line[4:].split('\t', 1)[0]
-            if path[:2] == 'b/':
-                path = path[2:]
-            rv[path] = set()
-    return dict([(os.path.join(parent, path), rows)
-                 for (path, rows) in rv.items()
-                 if rows and filename_match(path, patterns)])
-
-
-def normalize_paths(value, parent=os.curdir):
-    """Parse a comma-separated list of paths.
-
-    Return a list of absolute paths.
-    """
-    if not value:
-        return []
-    if isinstance(value, list):
-        return value
-    paths = []
-    for path in value.split(','):
-        path = path.strip()
-        if '/' in path:
-            path = os.path.abspath(os.path.join(parent, path))
-        paths.append(path.rstrip('/'))
-    return paths
-
-
-def filename_match(filename, patterns, default=True):
-    """Check if patterns contains a pattern that matches filename.
-
-    If patterns is unspecified, this always returns True.
-    """
-    if not patterns:
-        return default
-    return any(fnmatch(filename, pattern) for pattern in patterns)
-
-
-def update_counts(s, counts):
-    r"""Adds one to the counts of each appearance of characters in s,
-        for characters in counts"""
-    for char in s:
-        if char in counts:
-            counts[char] += 1
-
-
-def _is_eol_token(token):
-    return token[0] in NEWLINE or token[4][token[3][1]:].lstrip() == '\\\n'
-
-
-if COMMENT_WITH_NL:
-    def _is_eol_token(token, _eol_token=_is_eol_token):
-        return _eol_token(token) or (token[0] == tokenize.COMMENT and
-                                     token[1] == token[4])
-
-##############################################################################
-# Framework to run all checks
-##############################################################################
-
-
-_checks = {'physical_line': {}, 'logical_line': {}, 'tree': {}}
-
-
-def _get_parameters(function):
-    if sys.version_info >= (3, 3):
-        return [parameter.name
-                for parameter
-                in inspect.signature(function).parameters.values()
-                if parameter.kind == parameter.POSITIONAL_OR_KEYWORD]
-    else:
-        return inspect.getargspec(function)[0]
-
-
-def register_check(check, codes=None):
-    """Register a new check object."""
-    def _add_check(check, kind, codes, args):
-        if check in _checks[kind]:
-            _checks[kind][check][0].extend(codes or [])
-        else:
-            _checks[kind][check] = (codes or [''], args)
-    if inspect.isfunction(check):
-        args = _get_parameters(check)
-        if args and args[0] in ('physical_line', 'logical_line'):
-            if codes is None:
-                codes = ERRORCODE_REGEX.findall(check.__doc__ or '')
-            _add_check(check, args[0], codes, args)
-    elif inspect.isclass(check):
-        if _get_parameters(check.__init__)[:2] == ['self', 'tree']:
-            _add_check(check, 'tree', codes, None)
-
-
-def init_checks_registry():
-    """Register all globally visible functions.
-
-    The first argument name is either 'physical_line' or 'logical_line'.
-    """
-    mod = inspect.getmodule(register_check)
-    for (name, function) in inspect.getmembers(mod, inspect.isfunction):
-        register_check(function)
-
-
-init_checks_registry()
-
-
-class Checker(object):
-    """Load a Python source file, tokenize it, check coding style."""
-
-    def __init__(self, filename=None, lines=None,
-                 options=None, report=None, **kwargs):
-        if options is None:
-            options = StyleGuide(kwargs).options
-        else:
-            assert not kwargs
-        self._io_error = None
-        self._physical_checks = options.physical_checks
-        self._logical_checks = options.logical_checks
-        self._ast_checks = options.ast_checks
-        self.max_line_length = options.max_line_length
-        self.multiline = False  # in a multiline string?
-        self.hang_closing = options.hang_closing
-        self.verbose = options.verbose
-        self.filename = filename
-        # Dictionary where a checker can store its custom state.
-        self._checker_states = {}
-        if filename is None:
-            self.filename = 'stdin'
-            self.lines = lines or []
-        elif filename == '-':
-            self.filename = 'stdin'
-            self.lines = stdin_get_value().splitlines(True)
-        elif lines is None:
-            try:
-                self.lines = readlines(filename)
-            except IOError:
-                (exc_type, exc) = sys.exc_info()[:2]
-                self._io_error = '%s: %s' % (exc_type.__name__, exc)
-                self.lines = []
-        else:
-            self.lines = lines
-        if self.lines:
-            ord0 = ord(self.lines[0][0])
-            if ord0 in (0xef, 0xfeff):  # Strip the UTF-8 BOM
-                if ord0 == 0xfeff:
-                    self.lines[0] = self.lines[0][1:]
-                elif self.lines[0][:3] == '\xef\xbb\xbf':
-                    self.lines[0] = self.lines[0][3:]
-        self.report = report or options.report
-        self.report_error = self.report.error
-        self.report_error_args = self.report.error_args
-        self.noqa = False
-        
-        # added for eric6 integration
-        self.options = options
-
-    def report_invalid_syntax(self):
-        """Check if the syntax is valid."""
-        (exc_type, exc) = sys.exc_info()[:2]
-        if len(exc.args) > 1:
-            offset = exc.args[1]
-            if len(offset) > 2:
-                offset = offset[1:3]
-        else:
-            offset = (1, 0)
-        self.report_error_args(offset[0], offset[1] or 0,
-                          'E901', self.report_invalid_syntax,
-                          exc_type.__name__, exc.args[0])
-
-    def readline(self):
-        """Get the next line from the input buffer."""
-        if self.line_number >= self.total_lines:
-            return ''
-        line = self.lines[self.line_number]
-        self.line_number += 1
-        if self.indent_char is None and line[:1] in WHITESPACE:
-            self.indent_char = line[0]
-        return line
-
-    def run_check(self, check, argument_names):
-        """Run a check plugin."""
-        arguments = []
-        for name in argument_names:
-            arguments.append(getattr(self, name))
-        return check(*arguments)
-
-    def init_checker_state(self, name, argument_names):
-        """ Prepare custom state for the specific checker plugin."""
-        if 'checker_state' in argument_names:
-            self.checker_state = self._checker_states.setdefault(name, {})
-
-    def check_physical(self, line):
-        """Run all physical checks on a raw input line."""
-        self.physical_line = line
-        for name, check, argument_names in self._physical_checks:
-            self.init_checker_state(name, argument_names)
-            result = self.run_check(check, argument_names)
-            if result is not None:
-                (offset, text) = result[:2]
-                args = result[2:]
-                self.report_error_args(
-                    self.line_number, offset, text, check, *args)
-                if text[:4] == 'E101':
-                    self.indent_char = line[0]
-
-    def build_tokens_line(self):
-        """Build a logical line from tokens."""
-        logical = []
-        comments = []
-        length = 0
-        prev_row = prev_col = mapping = None
-        for token_type, text, start, end, line in self.tokens:
-            if token_type in SKIP_TOKENS:
-                continue
-            if not mapping:
-                mapping = [(0, start)]
-            if token_type == tokenize.COMMENT:
-                comments.append(text)
-                continue
-            if token_type == tokenize.STRING:
-                text = mute_string(text)
-            if prev_row:
-                (start_row, start_col) = start
-                if prev_row != start_row:    # different row
-                    prev_text = self.lines[prev_row - 1][prev_col - 1]
-                    if prev_text == ',' or (prev_text not in '{[(' and
-                                            text not in '}])'):
-                        text = ' ' + text
-                elif prev_col != start_col:  # different column
-                    text = line[prev_col:start_col] + text
-            logical.append(text)
-            length += len(text)
-            mapping.append((length, end))
-            (prev_row, prev_col) = end
-        self.logical_line = ''.join(logical)
-        self.noqa = comments and noqa(''.join(comments))
-        return mapping
-
-    def check_logical(self):
-        """Build a line from tokens and run all logical checks on it."""
-        self.report.increment_logical_line()
-        mapping = self.build_tokens_line()
-
-        if not mapping:
-            return
-
-        (start_row, start_col) = mapping[0][1]
-        start_line = self.lines[start_row - 1]
-        self.indent_level = expand_indent(start_line[:start_col])
-        if self.blank_before < self.blank_lines:
-            self.blank_before = self.blank_lines
-        if self.verbose >= 2:
-            print(self.logical_line[:80].rstrip())
-        for name, check, argument_names in self._logical_checks:
-            if self.verbose >= 4:
-                print('   ' + name)
-            self.init_checker_state(name, argument_names)
-            for result in self.run_check(check, argument_names) or ():
-                offset, text = result[:2]
-                args = result[2:]
-                if not isinstance(offset, tuple):
-                    for token_offset, pos in mapping:
-                        if offset <= token_offset:
-                            break
-                    offset = (pos[0], pos[1] + offset - token_offset)
-                self.report_error_args(
-                    offset[0], offset[1], text, check, *args)
-        if self.logical_line:
-            self.previous_indent_level = self.indent_level
-            self.previous_logical = self.logical_line
-            if not self.indent_level:
-                self.previous_unindented_logical_line = self.logical_line
-        self.blank_lines = 0
-        self.tokens = []
-
-    def check_ast(self):
-        """Build the file's AST and run all AST checks."""
-        try:
-            tree = compile(''.join(self.lines), '', 'exec', PyCF_ONLY_AST)
-        except (ValueError, SyntaxError, TypeError):
-            return self.report_invalid_syntax()
-        for name, cls, __ in self._ast_checks:
-            # extended API for eric6 integration
-            checker = cls(tree, self.filename, self.options)
-            for args in checker.run():
-                lineno = args[0]
-                if not self.lines or not noqa(self.lines[lineno - 1]):
-                    self.report_error_args(lineno, *args[1:])
-
-    def generate_tokens(self):
-        """Tokenize the file, run physical line checks and yield tokens."""
-        if self._io_error:
-            self.report_error_args(1, 0, 'E902', self._io_error, readlines)
-        tokengen = tokenize.generate_tokens(self.readline)
-        try:
-            for token in tokengen:
-                if token[2][0] > self.total_lines:
-                    return
-                self.noqa = token[4] and noqa(token[4])
-                self.maybe_check_physical(token)
-                yield token
-        except (SyntaxError, tokenize.TokenError):
-            self.report_invalid_syntax()
-
-    def maybe_check_physical(self, token):
-        """If appropriate (based on token), check current physical line(s)."""
-        # Called after every token, but act only on end of line.
-        if _is_eol_token(token):
-            # Obviously, a newline token ends a single physical line.
-            self.check_physical(token[4])
-        elif token[0] == tokenize.STRING and '\n' in token[1]:
-            # Less obviously, a string that contains newlines is a
-            # multiline string, either triple-quoted or with internal
-            # newlines backslash-escaped. Check every physical line in the
-            # string *except* for the last one: its newline is outside of
-            # the multiline string, so we consider it a regular physical
-            # line, and will check it like any other physical line.
-            #
-            # Subtleties:
-            # - we don't *completely* ignore the last line; if it contains
-            #   the magical "# noqa" comment, we disable all physical
-            #   checks for the entire multiline string
-            # - have to wind self.line_number back because initially it
-            #   points to the last line of the string, and we want
-            #   check_physical() to give accurate feedback
-            if noqa(token[4]):
-                return
-            self.multiline = True
-            self.line_number = token[2][0]
-            for line in token[1].split('\n')[:-1]:
-                self.check_physical(line + '\n')
-                self.line_number += 1
-            self.multiline = False
-
-    def check_all(self, expected=None, line_offset=0):
-        """Run all checks on the input file."""
-        self.report.init_file(self.filename, self.lines, expected, line_offset)
-        self.total_lines = len(self.lines)
-        if self._ast_checks:
-            self.check_ast()
-        self.line_number = 0
-        self.indent_char = None
-        self.indent_level = self.previous_indent_level = 0
-        self.previous_logical = ''
-        self.previous_unindented_logical_line = ''
-        self.tokens = []
-        self.blank_lines = self.blank_before = 0
-        parens = 0
-        for token in self.generate_tokens():
-            self.tokens.append(token)
-            token_type, text = token[0:2]
-            if self.verbose >= 3:
-                if token[2][0] == token[3][0]:
-                    pos = '[%s:%s]' % (token[2][1] or '', token[3][1])
-                else:
-                    pos = 'l.%s' % token[3][0]
-                print('l.%s\t%s\t%s\t%r' %
-                      (token[2][0], pos, tokenize.tok_name[token[0]], text))
-            if token_type == tokenize.OP:
-                if text in '([{':
-                    parens += 1
-                elif text in '}])':
-                    parens -= 1
-            elif not parens:
-                if token_type in NEWLINE:
-                    if token_type == tokenize.NEWLINE:
-                        self.check_logical()
-                        self.blank_before = 0
-                    elif len(self.tokens) == 1:
-                        # The physical line contains only this token.
-                        self.blank_lines += 1
-                        del self.tokens[0]
-                    else:
-                        self.check_logical()
-                elif COMMENT_WITH_NL and token_type == tokenize.COMMENT:
-                    if len(self.tokens) == 1:
-                        # The comment also ends a physical line
-                        token = list(token)
-                        token[1] = text.rstrip('\r\n')
-                        token[3] = (token[2][0], token[2][1] + len(token[1]))
-                        self.tokens = [tuple(token)]
-                        self.check_logical()
-        if self.tokens:
-            self.check_physical(self.lines[-1])
-            self.check_logical()
-        return self.report.get_file_results()
-
-
-class BaseReport(object):
-    """Collect the results of the checks."""
-
-    print_filename = False
-
-    def __init__(self, options):
-        self._benchmark_keys = options.benchmark_keys
-        self._ignore_code = options.ignore_code
-        # Results
-        self.elapsed = 0
-        self.total_errors = 0
-        self.counters = dict.fromkeys(self._benchmark_keys, 0)
-        self.messages = {}
-
-    def start(self):
-        """Start the timer."""
-        self._start_time = time.time()
-
-    def stop(self):
-        """Stop the timer."""
-        self.elapsed = time.time() - self._start_time
-
-    def init_file(self, filename, lines, expected, line_offset):
-        """Signal a new file."""
-        self.filename = filename
-        self.lines = lines
-        self.expected = expected or ()
-        self.line_offset = line_offset
-        self.file_errors = 0
-        self.counters['files'] += 1
-        self.counters['physical lines'] += len(lines)
-
-    def increment_logical_line(self):
-        """Signal a new logical line."""
-        self.counters['logical lines'] += 1
-
-    def error(self, line_number, offset, text, check):
-        """Report an error, according to options."""
-        code = text[:4]
-        if self._ignore_code(code):
-            return
-        if code in self.counters:
-            self.counters[code] += 1
-        else:
-            self.counters[code] = 1
-            self.messages[code] = []
-        # Don't care about expected errors or warnings
-        if code in self.expected:
-            return
-        if self.print_filename and not self.file_errors:
-            print(self.filename)
-        self.file_errors += 1
-        self.total_errors += 1
-        return code
-
-    def error_args(self, line_number, offset, text, check, *args):
-        """Report an error, according to options."""
-        code = text[:4]
-        if self._ignore_code(code):
-            return
-        if code in self.counters:
-            self.counters[code] += 1
-        else:
-            self.counters[code] = 1
-            self.messages[code] = args
-        # Don't care about expected errors or warnings
-        if code in self.expected:
-            return
-        if self.print_filename and not self.file_errors:
-            print(self.filename)
-        self.file_errors += 1
-        self.total_errors += 1
-        return code
-
-    def get_file_results(self):
-        """Return the count of errors and warnings for this file."""
-        return self.file_errors
-
-    def get_count(self, prefix=''):
-        """Return the total count of errors and warnings."""
-        return sum([self.counters[key]
-                    for key in self.messages if key.startswith(prefix)])
-
-    def get_statistics(self, prefix=''):
-        """Get statistics for message codes that start with the prefix.
-
-        prefix='' matches all errors and warnings
-        prefix='E' matches all errors
-        prefix='W' matches all warnings
-        prefix='E4' matches all errors that have to do with imports
-        """
-        return ['%-7s %s %s' % (self.counters[key], key, self.messages[key])
-                for key in sorted(self.messages) if key.startswith(prefix)]
-
-    def print_statistics(self, prefix=''):
-        """Print overall statistics (number of errors and warnings)."""
-        for line in self.get_statistics(prefix):
-            print(line)
-
-    def print_benchmark(self):
-        """Print benchmark numbers."""
-        print('%-7.2f %s' % (self.elapsed, 'seconds elapsed'))
-        if self.elapsed:
-            for key in self._benchmark_keys:
-                print('%-7d %s per second (%d total)' %
-                      (self.counters[key] / self.elapsed, key,
-                       self.counters[key]))
-
-
-class FileReport(BaseReport):
-    """Collect the results of the checks and print only the filenames."""
-    print_filename = True
-
-
-class StandardReport(BaseReport):
-    """Collect and print the results of the checks."""
-
-    def __init__(self, options):
-        super(StandardReport, self).__init__(options)
-        self._fmt = REPORT_FORMAT.get(options.format.lower(),
-                                      options.format)
-        self._repeat = options.repeat
-        self._show_source = options.show_source
-        self._show_pep8 = options.show_pep8
-
-    def init_file(self, filename, lines, expected, line_offset):
-        """Signal a new file."""
-        self._deferred_print = []
-        return super(StandardReport, self).init_file(
-            filename, lines, expected, line_offset)
-
-    def error(self, line_number, offset, text, check):
-        """Report an error, according to options."""
-        code = super(StandardReport, self).error(line_number, offset,
-                                                 text, check)
-        if code and (self.counters[code] == 1 or self._repeat):
-            self._deferred_print.append(
-                (line_number, offset, code, text[5:], check.__doc__))
-        return code
-
-    def error_args(self, line_number, offset, code, check, *args):
-        """Report an error, according to options."""
-        code = super(StandardReport, self).error_args(line_number, offset,
-                                                      code, check, *args)
-        if code and (self.counters[code] == 1 or self._repeat):
-            self._deferred_print.append(
-                (line_number, offset, code, args, check.__doc__))
-        return code
-
-    def get_file_results(self):
-        """Print the result and return the overall count for this file."""
-        self._deferred_print.sort()
-        for line_number, offset, code, text, doc in self._deferred_print:
-            print(self._fmt % {
-                'path': self.filename,
-                'row': self.line_offset + line_number, 'col': offset + 1,
-                'code': code, 'text': text,
-            })
-            if self._show_source:
-                if line_number > len(self.lines):
-                    line = ''
-                else:
-                    line = self.lines[line_number - 1]
-                print(line.rstrip())
-                print(re.sub(r'\S', ' ', line[:offset]) + '^')
-            if self._show_pep8 and doc:
-                print('    ' + doc.strip())
-
-            # stdout is block buffered when not stdout.isatty().
-            # line can be broken where buffer boundary since other processes
-            # write to same file.
-            # flush() after print() to avoid buffer boundary.
-            # Typical buffer size is 8192. line written safely when
-            # len(line) < 8192.
-            sys.stdout.flush()
-        return self.file_errors
-
-
-class DiffReport(StandardReport):
-    """Collect and print the results for the changed lines only."""
-
-    def __init__(self, options):
-        super(DiffReport, self).__init__(options)
-        self._selected = options.selected_lines
-
-    def error(self, line_number, offset, text, check):
-        if line_number not in self._selected[self.filename]:
-            return
-        return super(DiffReport, self).error(line_number, offset, text, check)
-
-
-class StyleGuide(object):
-    """Initialize a PEP-8 instance with few options."""
-
-    def __init__(self, *args, **kwargs):
-        # build options from the command line
-        self.checker_class = kwargs.pop('checker_class', Checker)
-        parse_argv = kwargs.pop('parse_argv', False)
-        config_file = kwargs.pop('config_file', False)
-        parser = kwargs.pop('parser', None)
-        # build options from dict
-        options_dict = dict(*args, **kwargs)
-        arglist = None if parse_argv else options_dict.get('paths', None)
-        options, self.paths = process_options(
-            arglist, parse_argv, config_file, parser)
-        if options_dict:
-            options.__dict__.update(options_dict)
-            if 'paths' in options_dict:
-                self.paths = options_dict['paths']
-
-        self.runner = self.input_file
-        self.options = options
-
-        if not options.reporter:
-            options.reporter = BaseReport if options.quiet else StandardReport
-
-        options.select = tuple(options.select or ())
-#        if not (options.select or options.ignore or
-#                options.testsuite or options.doctest) and DEFAULT_IGNORE:
-#            # The default choice: ignore controversial checks
-#            options.ignore = tuple(DEFAULT_IGNORE.split(','))
-#        else:
-#            # Ignore all checks which are not explicitly selected or all if no
-#            options.ignore = ('',) if options.select else tuple(options.ignore)
-
-        # check is ignored or explicitly selected
-        options.ignore = ('',) if options.select else tuple(options.ignore)
-        options.benchmark_keys = BENCHMARK_KEYS[:]
-        options.ignore_code = self.ignore_code
-        options.physical_checks = self.get_checks('physical_line')
-        options.logical_checks = self.get_checks('logical_line')
-        options.ast_checks = self.get_checks('tree')
-        self.init_report()
-
-    def init_report(self, reporter=None):
-        """Initialize the report instance."""
-        self.options.report = (reporter or self.options.reporter)(self.options)
-        return self.options.report
-
-    def check_files(self, paths=None):
-        """Run all checks on the paths."""
-        if paths is None:
-            paths = self.paths
-        report = self.options.report
-        runner = self.runner
-        report.start()
-        try:
-            for path in paths:
-                if os.path.isdir(path):
-                    self.input_dir(path)
-                elif not self.excluded(path):
-                    runner(path)
-        except KeyboardInterrupt:
-            print('... stopped')
-        report.stop()
-        return report
-
-    def input_file(self, filename, lines=None, expected=None, line_offset=0):
-        """Run all checks on a Python source file."""
-        if self.options.verbose:
-            print('checking %s' % filename)
-        fchecker = self.checker_class(
-            filename, lines=lines, options=self.options)
-        return fchecker.check_all(expected=expected, line_offset=line_offset)
-
-    def input_dir(self, dirname):
-        """Check all files in this directory and all subdirectories."""
-        dirname = dirname.rstrip('/')
-        if self.excluded(dirname):
-            return 0
-        counters = self.options.report.counters
-        verbose = self.options.verbose
-        filepatterns = self.options.filename
-        runner = self.runner
-        for root, dirs, files in os.walk(dirname):
-            if verbose:
-                print('directory ' + root)
-            counters['directories'] += 1
-            for subdir in sorted(dirs):
-                if self.excluded(subdir, root):
-                    dirs.remove(subdir)
-            for filename in sorted(files):
-                # contain a pattern that matches?
-                if ((filename_match(filename, filepatterns) and
-                     not self.excluded(filename, root))):
-                    runner(os.path.join(root, filename))
-
-    def excluded(self, filename, parent=None):
-        """Check if the file should be excluded.
-
-        Check if 'options.exclude' contains a pattern that matches filename.
-        """
-        if not self.options.exclude:
-            return False
-        basename = os.path.basename(filename)
-        if filename_match(basename, self.options.exclude):
-            return True
-        if parent:
-            filename = os.path.join(parent, filename)
-        filename = os.path.abspath(filename)
-        return filename_match(filename, self.options.exclude)
-
-    def ignore_code(self, code):
-        """Check if the error code should be ignored.
-
-        If 'options.select' contains a prefix of the error code,
-        return False.  Else, if 'options.ignore' contains a prefix of
-        the error code, return True.
-        """
-        if len(code) < 4 and any(s.startswith(code)
-                                 for s in self.options.select):
-            return False
-        return (code.startswith(self.options.ignore) and
-                not code.startswith(self.options.select))
-
-    def get_checks(self, argument_name):
-        """Get all the checks for this category.
-
-        Find all globally visible functions where the first argument name
-        starts with argument_name and which contain selected tests.
-        """
-        checks = []
-        for check, attrs in _checks[argument_name].items():
-            (codes, args) = attrs
-            if any(not (code and self.ignore_code(code)) for code in codes):
-                checks.append((check.__name__, check, args))
-        return sorted(checks)
-
-
-def get_parser(prog='pycodestyle', version=__version__):
-    """Create the parser for the program."""
-    parser = OptionParser(prog=prog, version=version,
-                          usage="%prog [options] input ...")
-    parser.config_options = [
-        'exclude', 'filename', 'select', 'ignore', 'max-line-length',
-        'hang-closing', 'count', 'format', 'quiet', 'show-pep8',
-        'show-source', 'statistics', 'verbose']
-    parser.add_option('-v', '--verbose', default=0, action='count',
-                      help="print status messages, or debug with -vv")
-    parser.add_option('-q', '--quiet', default=0, action='count',
-                      help="report only file names, or nothing with -qq")
-    parser.add_option('-r', '--repeat', default=True, action='store_true',
-                      help="(obsolete) show all occurrences of the same error")
-    parser.add_option('--first', action='store_false', dest='repeat',
-                      help="show first occurrence of each error")
-    parser.add_option('--exclude', metavar='patterns', default=DEFAULT_EXCLUDE,
-                      help="exclude files or directories which match these "
-                           "comma separated patterns (default: %default)")
-    parser.add_option('--filename', metavar='patterns', default='*.py',
-                      help="when parsing directories, only check filenames "
-                           "matching these comma separated patterns "
-                           "(default: %default)")
-    parser.add_option('--select', metavar='errors', default='',
-                      help="select errors and warnings (e.g. E,W6)")
-    parser.add_option('--ignore', metavar='errors', default='',
-                      help="skip errors and warnings (e.g. E4,W) "
-                           "(default: %s)" % DEFAULT_IGNORE)
-    parser.add_option('--show-source', action='store_true',
-                      help="show source code for each error")
-    parser.add_option('--show-pep8', action='store_true',
-                      help="show text of PEP 8 for each error "
-                           "(implies --first)")
-    parser.add_option('--statistics', action='store_true',
-                      help="count errors and warnings")
-    parser.add_option('--count', action='store_true',
-                      help="print total number of errors and warnings "
-                           "to standard error and set exit code to 1 if "
-                           "total is not null")
-    parser.add_option('--max-line-length', type='int', metavar='n',
-                      default=MAX_LINE_LENGTH,
-                      help="set maximum allowed line length "
-                           "(default: %default)")
-    parser.add_option('--hang-closing', action='store_true',
-                      help="hang closing bracket instead of matching "
-                           "indentation of opening bracket's line")
-    parser.add_option('--format', metavar='format', default='default',
-                      help="set the error format [default|pylint|<custom>]")
-    parser.add_option('--diff', action='store_true',
-                      help="report changes only within line number ranges in "
-                           "the unified diff received on STDIN")
-    group = parser.add_option_group("Testing Options")
-    if os.path.exists(TESTSUITE_PATH):
-        group.add_option('--testsuite', metavar='dir',
-                         help="run regression tests from dir")
-        group.add_option('--doctest', action='store_true',
-                         help="run doctest on myself")
-    group.add_option('--benchmark', action='store_true',
-                     help="measure processing speed")
-    return parser
-
-
-def read_config(options, args, arglist, parser):
-    """Read and parse configurations
-
-    If a config file is specified on the command line with the "--config"
-    option, then only it is used for configuration.
-
-    Otherwise, the user configuration (~/.config/pycodestyle) and any local
-    configurations in the current directory or above will be merged together
-    (in that order) using the read method of ConfigParser.
-    """
-    config = RawConfigParser()
-
-    cli_conf = options.config
-
-    local_dir = os.curdir
-
-    if USER_CONFIG and os.path.isfile(USER_CONFIG):
-        if options.verbose:
-            print('user configuration: %s' % USER_CONFIG)
-        config.read(USER_CONFIG)
-
-    parent = tail = args and os.path.abspath(os.path.commonprefix(args))
-    while tail:
-        if config.read(os.path.join(parent, fn) for fn in PROJECT_CONFIG):
-            local_dir = parent
-            if options.verbose:
-                print('local configuration: in %s' % parent)
-            break
-        (parent, tail) = os.path.split(parent)
-
-    if cli_conf and os.path.isfile(cli_conf):
-        if options.verbose:
-            print('cli configuration: %s' % cli_conf)
-        config.read(cli_conf)
-
-    pep8_section = parser.prog
-    if config.has_section(pep8_section):
-        option_list = dict([(o.dest, o.type or o.action)
-                            for o in parser.option_list])
-
-        # First, read the default values
-        (new_options, __) = parser.parse_args([])
-
-        # Second, parse the configuration
-        for opt in config.options(pep8_section):
-            if opt.replace('_', '-') not in parser.config_options:
-                print("  unknown option '%s' ignored" % opt)
-                continue
-            if options.verbose > 1:
-                print("  %s = %s" % (opt, config.get(pep8_section, opt)))
-            normalized_opt = opt.replace('-', '_')
-            opt_type = option_list[normalized_opt]
-            if opt_type in ('int', 'count'):
-                value = config.getint(pep8_section, opt)
-            elif opt_type in ('store_true', 'store_false'):
-                value = config.getboolean(pep8_section, opt)
-            else:
-                value = config.get(pep8_section, opt)
-                if normalized_opt == 'exclude':
-                    value = normalize_paths(value, local_dir)
-            setattr(new_options, normalized_opt, value)
-
-        # Third, overwrite with the command-line options
-        (options, __) = parser.parse_args(arglist, values=new_options)
-    options.doctest = options.testsuite = False
-    return options
-
-
-def process_options(arglist=None, parse_argv=False, config_file=None,
-                    parser=None):
-    """Process options passed either via arglist or via command line args.
-
-    Passing in the ``config_file`` parameter allows other tools, such as flake8
-    to specify their own options to be processed in pycodestyle.
-    """
-    if not parser:
-        parser = get_parser()
-    if not parser.has_option('--config'):
-        group = parser.add_option_group("Configuration", description=(
-            "The project options are read from the [%s] section of the "
-            "tox.ini file or the setup.cfg file located in any parent folder "
-            "of the path(s) being processed.  Allowed options are: %s." %
-            (parser.prog, ', '.join(parser.config_options))))
-        group.add_option('--config', metavar='path', default=config_file,
-                         help="user config file location")
-    # Don't read the command line if the module is used as a library.
-    if not arglist and not parse_argv:
-        arglist = []
-    # If parse_argv is True and arglist is None, arguments are
-    # parsed from the command line (sys.argv)
-    (options, args) = parser.parse_args(arglist)
-    options.reporter = None
-
-    if options.ensure_value('testsuite', False):
-        args.append(options.testsuite)
-    elif not options.ensure_value('doctest', False):
-        if parse_argv and not args:
-            if options.diff or any(os.path.exists(name)
-                                   for name in PROJECT_CONFIG):
-                args = ['.']
-            else:
-                parser.error('input not specified')
-        options = read_config(options, args, arglist, parser)
-        options.reporter = parse_argv and options.quiet == 1 and FileReport
-
-    options.filename = _parse_multi_options(options.filename)
-    options.exclude = normalize_paths(options.exclude)
-    options.select = _parse_multi_options(options.select)
-    options.ignore = _parse_multi_options(options.ignore)
-
-    if options.diff:
-        options.reporter = DiffReport
-        stdin = stdin_get_value()
-        options.selected_lines = parse_udiff(stdin, options.filename, args[0])
-        args = sorted(options.selected_lines)
-
-    return options, args
-
-
-def _parse_multi_options(options, split_token=','):
-    r"""Split and strip and discard empties.
-
-    Turns the following:
-
-    A,
-    B,
-
-    into ["A", "B"]
-    """
-    if options:
-        return [o.strip() for o in options.split(split_token) if o.strip()]
-    else:
-        return options
-
-
-def _main():
-    """Parse options and run checks on Python source."""
-    import signal
-
-    # Handle "Broken pipe" gracefully
-    try:
-        signal.signal(signal.SIGPIPE, lambda signum, frame: sys.exit(1))
-    except AttributeError:
-        pass    # not supported on Windows
-
-    style_guide = StyleGuide(parse_argv=True)
-    options = style_guide.options
-
-    if options.doctest or options.testsuite:
-        from testsuite.support import run_tests
-        report = run_tests(style_guide)
-    else:
-        report = style_guide.check_files()
-
-    if options.statistics:
-        report.print_statistics()
-
-    if options.benchmark:
-        report.print_benchmark()
-
-    if options.testsuite and not options.quiet:
-        report.print_results()
-
-    if report.total_errors:
-        if options.count:
-            sys.stderr.write(str(report.total_errors) + '\n')
-        sys.exit(1)
-
-if __name__ == '__main__':
-    _main()
-#
-# eflag: noqa = M702
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/pycodestyle.py	Sun Sep 04 17:16:38 2016 +0200
@@ -0,0 +1,2339 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# pycodestyle.py - Check Python source code formatting, according to PEP 8
+# Copyright (C) 2006-2009 Johann C. Rocholl <johann@rocholl.net>
+# Copyright (C) 2009-2014 Florent Xicluna <florent.xicluna@gmail.com>
+# Copyright (C) 2014-2016 Ian Lee <ianlee1521@gmail.com>
+#
+# Permission is hereby granted, free of charge, to any person
+# obtaining a copy of this software and associated documentation files
+# (the "Software"), to deal in the Software without restriction,
+# including without limitation the rights to use, copy, modify, merge,
+# publish, distribute, sublicense, and/or sell copies of the Software,
+# and to permit persons to whom the Software is furnished to do so,
+# subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+r"""
+Check Python source code formatting, according to PEP 8.
+
+For usage and a list of options, try this:
+$ python pycodestyle.py -h
+
+This program and its regression test suite live here:
+https://github.com/pycqa/pycodestyle
+
+Groups of errors and warnings:
+E errors
+W warnings
+100 indentation
+200 whitespace
+300 blank lines
+400 imports
+500 line length
+600 deprecation
+700 statements
+900 syntax error
+"""
+from __future__ import with_statement
+
+#
+# This is a modified version to make the original pycodestyle.py better suitable
+# for being called from within the eric6 IDE. The modifications are as
+# follows:
+#
+# - made messages translatable via Qt
+# - added code for eric6 integration
+#
+# Copyright (c) 2011 - 2016 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+import inspect
+import keyword
+import os
+import re
+import sys
+import time
+import tokenize
+##import ast
+from fnmatch import fnmatch
+from optparse import OptionParser
+try:
+    from configparser import RawConfigParser
+    from io import TextIOWrapper
+except ImportError:
+    from ConfigParser import RawConfigParser            # __IGNORE_WARNING__
+
+__version__ = '2.1.0.dev0'
+
+DEFAULT_EXCLUDE = '.svn,CVS,.bzr,.hg,.git,__pycache__,.tox'
+DEFAULT_IGNORE = 'E121,E123,E126,E226,E24,E704,W503'
+try:
+    if sys.platform == 'win32':
+        USER_CONFIG = os.path.expanduser(r'~\.pycodestyle')
+    else:
+        USER_CONFIG = os.path.join(
+            os.getenv('XDG_CONFIG_HOME') or os.path.expanduser('~/.config'),
+            'pycodestyle'
+        )
+except ImportError:
+    USER_CONFIG = None
+
+PROJECT_CONFIG = ('setup.cfg', 'tox.ini')
+TESTSUITE_PATH = os.path.join(os.path.dirname(__file__), 'testsuite')
+MAX_LINE_LENGTH = 79
+REPORT_FORMAT = {
+    'default': '%(path)s:%(row)d:%(col)d: %(code)s %(text)s',
+    'pylint': '%(path)s:%(row)d: [%(code)s] %(text)s',
+}
+
+PyCF_ONLY_AST = 1024
+SINGLETONS = frozenset(['False', 'None', 'True'])
+KEYWORDS = frozenset(keyword.kwlist + ['print']) - SINGLETONS
+UNARY_OPERATORS = frozenset(['>>', '**', '*', '+', '-'])
+ARITHMETIC_OP = frozenset(['**', '*', '/', '//', '+', '-'])
+WS_OPTIONAL_OPERATORS = ARITHMETIC_OP.union(['^', '&', '|', '<<', '>>', '%'])
+WS_NEEDED_OPERATORS = frozenset([
+    '**=', '*=', '/=', '//=', '+=', '-=', '!=', '<>', '<', '>',
+    '%=', '^=', '&=', '|=', '==', '<=', '>=', '<<=', '>>=', '='])
+WHITESPACE = frozenset(' \t')
+NEWLINE = frozenset([tokenize.NL, tokenize.NEWLINE])
+SKIP_TOKENS = NEWLINE.union([tokenize.INDENT, tokenize.DEDENT])
+# ERRORTOKEN is triggered by backticks in Python 3
+SKIP_COMMENTS = SKIP_TOKENS.union([tokenize.COMMENT, tokenize.ERRORTOKEN])
+BENCHMARK_KEYS = ['directories', 'files', 'logical lines', 'physical lines']
+
+INDENT_REGEX = re.compile(r'([ \t]*)')
+RAISE_COMMA_REGEX = re.compile(r'raise\s+\w+\s*,')
+RERAISE_COMMA_REGEX = re.compile(r'raise\s+\w+\s*,.*,\s*\w+\s*$')
+ERRORCODE_REGEX = re.compile(r'\b[A-Z]\d{3}\b')
+DOCSTRING_REGEX = re.compile(r'u?r?["\']')
+EXTRANEOUS_WHITESPACE_REGEX = re.compile(r'[[({] | []}),;:]')
+WHITESPACE_AFTER_COMMA_REGEX = re.compile(r'[,;:]\s*(?:  |\t)')
+COMPARE_SINGLETON_REGEX = re.compile(r'(\bNone|\bFalse|\bTrue)?\s*([=!]=)'
+                                     r'\s*(?(1)|(None|False|True))\b')
+COMPARE_NEGATIVE_REGEX = re.compile(r'\b(not)\s+[^][)(}{ ]+\s+(in|is)\s')
+COMPARE_TYPE_REGEX = re.compile(r'(?:[=!]=|is(?:\s+not)?)\s*type(?:s.\w+Type'
+                                r'|\s*\(\s*([^)]*[^ )])\s*\))')
+KEYWORD_REGEX = re.compile(r'(\s*)\b(?:%s)\b(\s*)' % r'|'.join(KEYWORDS))
+OPERATOR_REGEX = re.compile(r'(?:[^,\s])(\s*)(?:[-+*/|!<=>%&^]+)(\s*)')
+LAMBDA_REGEX = re.compile(r'\blambda\b')
+HUNK_REGEX = re.compile(r'^@@ -\d+(?:,\d+)? \+(\d+)(?:,(\d+))? @@.*$')
+
+# Work around Python < 2.6 behaviour, which does not generate NL after
+# a comment which is on a line by itself.
+COMMENT_WITH_NL = tokenize.generate_tokens(['#\n'].pop).send(None)[1] == '#\n'
+
+
+##############################################################################
+# Plugins (check functions) for physical lines
+##############################################################################
+
+
+def tabs_or_spaces(physical_line, indent_char):
+    r"""Never mix tabs and spaces.
+
+    The most popular way of indenting Python is with spaces only.  The
+    second-most popular way is with tabs only.  Code indented with a mixture
+    of tabs and spaces should be converted to using spaces exclusively.  When
+    invoking the Python command line interpreter with the -t option, it issues
+    warnings about code that illegally mixes tabs and spaces.  When using -tt
+    these warnings become errors.  These options are highly recommended!
+
+    Okay: if a == 0:\n        a = 1\n        b = 1
+    E101: if a == 0:\n        a = 1\n\tb = 1
+    """
+    indent = INDENT_REGEX.match(physical_line).group(1)
+    for offset, char in enumerate(indent):
+        if char != indent_char:
+            return offset, "E101 indentation contains mixed spaces and tabs"
+
+
+def tabs_obsolete(physical_line):
+    r"""For new projects, spaces-only are strongly recommended over tabs.
+
+    Okay: if True:\n    return
+    W191: if True:\n\treturn
+    """
+    indent = INDENT_REGEX.match(physical_line).group(1)
+    if '\t' in indent:
+        return indent.index('\t'), "W191 indentation contains tabs"
+
+
+def trailing_whitespace(physical_line):
+    r"""Trailing whitespace is superfluous.
+
+    The warning returned varies on whether the line itself is blank, for easier
+    filtering for those who want to indent their blank lines.
+
+    Okay: spam(1)\n#
+    W291: spam(1) \n#
+    W293: class Foo(object):\n    \n    bang = 12
+    """
+    physical_line = physical_line.rstrip('\n')    # chr(10), newline
+    physical_line = physical_line.rstrip('\r')    # chr(13), carriage return
+    physical_line = physical_line.rstrip('\x0c')  # chr(12), form feed, ^L
+    stripped = physical_line.rstrip(' \t\v')
+    if physical_line != stripped:
+        if stripped:
+            return len(stripped), "W291 trailing whitespace"
+        else:
+            return 0, "W293 blank line contains whitespace"
+
+
+def trailing_blank_lines(physical_line, lines, line_number, total_lines):
+    r"""Trailing blank lines are superfluous.
+
+    Okay: spam(1)
+    W391: spam(1)\n
+
+    However the last line should end with a new line (warning W292).
+    """
+    if line_number == total_lines:
+        stripped_last_line = physical_line.rstrip()
+        if not stripped_last_line:
+            return 0, "W391 blank line at end of file"
+        if stripped_last_line == physical_line:
+            return len(physical_line), "W292 no newline at end of file"
+
+
+def maximum_line_length(physical_line, max_line_length, multiline, noqa):
+    r"""Limit all lines to a maximum of 79 characters.
+
+    There are still many devices around that are limited to 80 character
+    lines; plus, limiting windows to 80 characters makes it possible to have
+    several windows side-by-side.  The default wrapping on such devices looks
+    ugly.  Therefore, please limit all lines to a maximum of 79 characters.
+    For flowing long blocks of text (docstrings or comments), limiting the
+    length to 72 characters is recommended.
+
+    Reports error E501.
+    """
+    line = physical_line.rstrip()
+    length = len(line)
+    if length > max_line_length and not noqa:
+        # Special case for long URLs in multi-line docstrings or comments,
+        # but still report the error when the 72 first chars are whitespaces.
+        chunks = line.split()
+        if ((len(chunks) == 1 and multiline) or
+            (len(chunks) == 2 and chunks[0] == '#')) and \
+                len(line) - len(chunks[-1]) < max_line_length - 7:
+            return
+        if hasattr(line, 'decode'):   # Python 2
+            # The line could contain multi-byte characters
+            try:
+                length = len(line.decode('utf-8'))
+            except UnicodeError:
+                pass
+        if length > max_line_length:
+            return (max_line_length, "E501 line too long "
+                    "(%d > %d characters)" % (length, max_line_length),
+                    length, max_line_length)
+
+
+##############################################################################
+# Plugins (check functions) for logical lines
+##############################################################################
+
+
+def blank_lines(logical_line, blank_lines, indent_level, line_number,
+                blank_before, previous_logical,
+                previous_unindented_logical_line, previous_indent_level,
+                lines):
+    r"""Separate top-level function and class definitions with two blank lines.
+
+    Method definitions inside a class are separated by a single blank line.
+
+    Extra blank lines may be used (sparingly) to separate groups of related
+    functions.  Blank lines may be omitted between a bunch of related
+    one-liners (e.g. a set of dummy implementations).
+
+    Use blank lines in functions, sparingly, to indicate logical sections.
+
+    Okay: def a():\n    pass\n\n\ndef b():\n    pass
+    Okay: def a():\n    pass\n\n\nasync def b():\n    pass
+    Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
+
+    E301: class Foo:\n    b = 0\n    def bar():\n        pass
+    E302: def a():\n    pass\n\ndef b(n):\n    pass
+    E302: def a():\n    pass\n\nasync def b(n):\n    pass
+    E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
+    E303: def a():\n\n\n\n    pass
+    E304: @decorator\n\ndef a():\n    pass
+    E305: def a():\n    pass\na()
+    """
+    if line_number < 3 and not previous_logical:
+        return  # Don't expect blank lines before the first line
+    if previous_logical.startswith('@'):
+        if blank_lines:
+            yield 0, "E304 blank lines found after function decorator"
+    elif blank_lines > 2 or (indent_level and blank_lines == 2):
+        yield 0, "E303 too many blank lines (%d)", blank_lines
+    elif logical_line.startswith(('def ', 'async def ', 'class ', '@')):
+        if indent_level:
+            if not (blank_before or previous_indent_level < indent_level or
+                    DOCSTRING_REGEX.match(previous_logical)):
+                ancestor_level = indent_level
+                nested = False
+                # Search backwards for a def ancestor or tree root (top level).
+                for line in lines[line_number - 2::-1]:
+                    if line.strip() and expand_indent(line) < ancestor_level:
+                        ancestor_level = expand_indent(line)
+                        nested = line.lstrip().startswith('def ')
+                        if nested or ancestor_level == 0:
+                            break
+                if nested:
+                    yield 0, "E306 expected 1 blank line before a " \
+                        "nested definition, found 0"
+                else:
+                    yield 0, "E301 expected 1 blank line, found 0"
+        elif blank_before != 2:
+            yield 0, "E302 expected 2 blank lines, found %d", blank_before
+    elif (logical_line and not indent_level and blank_before != 2 and
+          previous_unindented_logical_line.startswith(('def', 'class'))):
+        yield 0, "E305 expected 2 blank lines after " \
+            "class or function definition, found %d", blank_before
+
+
+def extraneous_whitespace(logical_line):
+    r"""Avoid extraneous whitespace.
+
+    Avoid extraneous whitespace in these situations:
+    - Immediately inside parentheses, brackets or braces.
+    - Immediately before a comma, semicolon, or colon.
+
+    Okay: spam(ham[1], {eggs: 2})
+    E201: spam( ham[1], {eggs: 2})
+    E201: spam(ham[ 1], {eggs: 2})
+    E201: spam(ham[1], { eggs: 2})
+    E202: spam(ham[1], {eggs: 2} )
+    E202: spam(ham[1 ], {eggs: 2})
+    E202: spam(ham[1], {eggs: 2 })
+
+    E203: if x == 4: print x, y; x, y = y , x
+    E203: if x == 4: print x, y ; x, y = y, x
+    E203: if x == 4 : print x, y; x, y = y, x
+    """
+    line = logical_line
+    for match in EXTRANEOUS_WHITESPACE_REGEX.finditer(line):
+        text = match.group()
+        char = text.strip()
+        found = match.start()
+        if text == char + ' ':
+            # assert char in '([{'
+            yield found + 1, "E201 whitespace after '%s'", char
+        elif line[found - 1] != ',':
+            code = ('E202' if char in '}])' else 'E203')  # if char in ',;:'
+            yield found, "%s whitespace before '%s'" % (code, char), char
+
+
+def whitespace_around_keywords(logical_line):
+    r"""Avoid extraneous whitespace around keywords.
+
+    Okay: True and False
+    E271: True and  False
+    E272: True  and False
+    E273: True and\tFalse
+    E274: True\tand False
+    """
+    for match in KEYWORD_REGEX.finditer(logical_line):
+        before, after = match.groups()
+
+        if '\t' in before:
+            yield match.start(1), "E274 tab before keyword"
+        elif len(before) > 1:
+            yield match.start(1), "E272 multiple spaces before keyword"
+
+        if '\t' in after:
+            yield match.start(2), "E273 tab after keyword"
+        elif len(after) > 1:
+            yield match.start(2), "E271 multiple spaces after keyword"
+
+
+def missing_whitespace_after_import_keyword(logical_line):
+    r"""Multiple imports in form from x import (a, b, c) should have space
+    between import statement and parenthesised name list.
+
+    Okay: from foo import (bar, baz)
+    E275: from foo import(bar, baz)
+    E275: from importable.module import(bar, baz)
+    """
+    line = logical_line
+    indicator = ' import('
+    if line.startswith('from '):
+        found = line.find(indicator)
+        if -1 < found:
+            pos = found + len(indicator) - 1
+            yield pos, "E275 missing whitespace after keyword"
+
+
+def missing_whitespace(logical_line):
+    r"""Each comma, semicolon or colon should be followed by whitespace.
+
+    Okay: [a, b]
+    Okay: (3,)
+    Okay: a[1:4]
+    Okay: a[:4]
+    Okay: a[1:]
+    Okay: a[1:4:2]
+    E231: ['a','b']
+    E231: foo(bar,baz)
+    E231: [{'a':'b'}]
+    """
+    line = logical_line
+    for index in range(len(line) - 1):
+        char = line[index]
+        if char in ',;:' and line[index + 1] not in WHITESPACE:
+            before = line[:index]
+            if char == ':' and before.count('[') > before.count(']') and \
+                    before.rfind('{') < before.rfind('['):
+                continue  # Slice syntax, no space required
+            if char == ',' and line[index + 1] == ')':
+                continue  # Allow tuple with only one element: (3,)
+            yield index, "E231 missing whitespace after '%s'", char
+
+
+def indentation(logical_line, previous_logical, indent_char,
+                indent_level, previous_indent_level):
+    r"""Use 4 spaces per indentation level.
+
+    For really old code that you don't want to mess up, you can continue to
+    use 8-space tabs.
+
+    Okay: a = 1
+    Okay: if a == 0:\n    a = 1
+    E111:   a = 1
+    E114:   # a = 1
+
+    Okay: for item in items:\n    pass
+    E112: for item in items:\npass
+    E115: for item in items:\n# Hi\n    pass
+
+    Okay: a = 1\nb = 2
+    E113: a = 1\n    b = 2
+    E116: a = 1\n    # b = 2
+    """
+    c = 0 if logical_line else 3
+    tmpl = "E11%d %s" if logical_line else "E11%d %s (comment)"
+    if indent_level % 4:
+        yield 0, tmpl % (1 + c, "indentation is not a multiple of four")
+    indent_expect = previous_logical.endswith(':')
+    if indent_expect and indent_level <= previous_indent_level:
+        yield 0, tmpl % (2 + c, "expected an indented block")
+    elif not indent_expect and indent_level > previous_indent_level:
+        yield 0, tmpl % (3 + c, "unexpected indentation")
+
+
+def continued_indentation(logical_line, tokens, indent_level, hang_closing,
+                          indent_char, noqa, verbose):
+    r"""Continuation lines indentation.
+
+    Continuation lines should align wrapped elements either vertically
+    using Python's implicit line joining inside parentheses, brackets
+    and braces, or using a hanging indent.
+
+    When using a hanging indent these considerations should be applied:
+    - there should be no arguments on the first line, and
+    - further indentation should be used to clearly distinguish itself as a
+      continuation line.
+
+    Okay: a = (\n)
+    E123: a = (\n    )
+
+    Okay: a = (\n    42)
+    E121: a = (\n   42)
+    E122: a = (\n42)
+    E123: a = (\n    42\n    )
+    E124: a = (24,\n     42\n)
+    E125: if (\n    b):\n    pass
+    E126: a = (\n        42)
+    E127: a = (24,\n      42)
+    E128: a = (24,\n    42)
+    E129: if (a or\n    b):\n    pass
+    E131: a = (\n    42\n 24)
+    """
+    first_row = tokens[0][2][0]
+    nrows = 1 + tokens[-1][2][0] - first_row
+    if noqa or nrows == 1:
+        return
+
+    # indent_next tells us whether the next block is indented; assuming
+    # that it is indented by 4 spaces, then we should not allow 4-space
+    # indents on the final continuation line; in turn, some other
+    # indents are allowed to have an extra 4 spaces.
+    indent_next = logical_line.endswith(':')
+
+    row = depth = 0
+    valid_hangs = (4,) if indent_char != '\t' else (4, 8)
+    # remember how many brackets were opened on each line
+    parens = [0] * nrows
+    # relative indents of physical lines
+    rel_indent = [0] * nrows
+    # for each depth, collect a list of opening rows
+    open_rows = [[0]]
+    # for each depth, memorize the hanging indentation
+    hangs = [None]
+    # visual indents
+    indent_chances = {}
+    last_indent = tokens[0][2]
+    visual_indent = None
+    last_token_multiline = False
+    # for each depth, memorize the visual indent column
+    indent = [last_indent[1]]
+    if verbose >= 3:
+        print(">>> " + tokens[0][4].rstrip())
+
+    for token_type, text, start, end, line in tokens:
+
+        newline = row < start[0] - first_row
+        if newline:
+            row = start[0] - first_row
+            newline = not last_token_multiline and token_type not in NEWLINE
+
+        if newline:
+            # this is the beginning of a continuation line.
+            last_indent = start
+            if verbose >= 3:
+                print("... " + line.rstrip())
+
+            # record the initial indent.
+            rel_indent[row] = expand_indent(line) - indent_level
+
+            # identify closing bracket
+            close_bracket = (token_type == tokenize.OP and text in ']})')
+
+            # is the indent relative to an opening bracket line?
+            for open_row in reversed(open_rows[depth]):
+                hang = rel_indent[row] - rel_indent[open_row]
+                hanging_indent = hang in valid_hangs
+                if hanging_indent:
+                    break
+            if hangs[depth]:
+                hanging_indent = (hang == hangs[depth])
+            # is there any chance of visual indent?
+            visual_indent = (not close_bracket and hang > 0 and
+                             indent_chances.get(start[1]))
+
+            if close_bracket and indent[depth]:
+                # closing bracket for visual indent
+                if start[1] != indent[depth]:
+                    yield (start, "E124 closing bracket does not match "
+                           "visual indentation")
+            elif close_bracket and not hang:
+                # closing bracket matches indentation of opening bracket's line
+                if hang_closing:
+                    yield start, "E133 closing bracket is missing indentation"
+            elif indent[depth] and start[1] < indent[depth]:
+                if visual_indent is not True:
+                    # visual indent is broken
+                    yield (start, "E128 continuation line "
+                           "under-indented for visual indent")
+            elif hanging_indent or (indent_next and rel_indent[row] == 8):
+                # hanging indent is verified
+                if close_bracket and not hang_closing:
+                    yield (start, "E123 closing bracket does not match "
+                           "indentation of opening bracket's line")
+                hangs[depth] = hang
+            elif visual_indent is True:
+                # visual indent is verified
+                indent[depth] = start[1]
+            elif visual_indent in (text, str):
+                # ignore token lined up with matching one from a previous line
+                pass
+            else:
+                # indent is broken
+                if hang <= 0:
+                    error = "E122", "missing indentation or outdented"
+                elif indent[depth]:
+                    error = "E127", "over-indented for visual indent"
+                elif not close_bracket and hangs[depth]:
+                    error = "E131", "unaligned for hanging indent"
+                else:
+                    hangs[depth] = hang
+                    if hang > 4:
+                        error = "E126", "over-indented for hanging indent"
+                    else:
+                        error = "E121", "under-indented for hanging indent"
+                yield start, "%s continuation line %s" % error
+
+        # look for visual indenting
+        if (parens[row] and
+                token_type not in (tokenize.NL, tokenize.COMMENT) and
+                not indent[depth]):
+            indent[depth] = start[1]
+            indent_chances[start[1]] = True
+            if verbose >= 4:
+                print("bracket depth %s indent to %s" % (depth, start[1]))
+        # deal with implicit string concatenation
+        elif (token_type in (tokenize.STRING, tokenize.COMMENT) or
+              text in ('u', 'ur', 'b', 'br')):
+            indent_chances[start[1]] = str
+        # special case for the "if" statement because len("if (") == 4
+        elif not indent_chances and not row and not depth and text == 'if':
+            indent_chances[end[1] + 1] = True
+        elif text == ':' and line[end[1]:].isspace():
+            open_rows[depth].append(row)
+
+        # keep track of bracket depth
+        if token_type == tokenize.OP:
+            if text in '([{':
+                depth += 1
+                indent.append(0)
+                hangs.append(None)
+                if len(open_rows) == depth:
+                    open_rows.append([])
+                open_rows[depth].append(row)
+                parens[row] += 1
+                if verbose >= 4:
+                    print("bracket depth %s seen, col %s, visual min = %s" %
+                          (depth, start[1], indent[depth]))
+            elif text in ')]}' and depth > 0:
+                # parent indents should not be more than this one
+                prev_indent = indent.pop() or last_indent[1]
+                hangs.pop()
+                for d in range(depth):
+                    if indent[d] > prev_indent:
+                        indent[d] = 0
+                for ind in list(indent_chances):
+                    if ind >= prev_indent:
+                        del indent_chances[ind]
+                del open_rows[depth + 1:]
+                depth -= 1
+                if depth:
+                    indent_chances[indent[depth]] = True
+                for idx in range(row, -1, -1):
+                    if parens[idx]:
+                        parens[idx] -= 1
+                        break
+            assert len(indent) == depth + 1
+            if start[1] not in indent_chances:
+                # allow lining up tokens
+                indent_chances[start[1]] = text
+
+        last_token_multiline = (start[0] != end[0])
+        if last_token_multiline:
+            rel_indent[end[0] - first_row] = rel_indent[row]
+
+    if indent_next and expand_indent(line) == indent_level + 4:
+        pos = (start[0], indent[0] + 4)
+        if visual_indent:
+            code = "E129 visually indented line"
+        else:
+            code = "E125 continuation line"
+        yield pos, "%s with same indent as next logical line" % code
+
+
+def whitespace_before_parameters(logical_line, tokens):
+    r"""Avoid extraneous whitespace.
+
+    Avoid extraneous whitespace in the following situations:
+    - before the open parenthesis that starts the argument list of a
+      function call.
+    - before the open parenthesis that starts an indexing or slicing.
+
+    Okay: spam(1)
+    E211: spam (1)
+
+    Okay: dict['key'] = list[index]
+    E211: dict ['key'] = list[index]
+    E211: dict['key'] = list [index]
+    """
+    prev_type, prev_text, __, prev_end, __ = tokens[0]
+    for index in range(1, len(tokens)):
+        token_type, text, start, end, __ = tokens[index]
+        if (token_type == tokenize.OP and
+            text in '([' and
+            start != prev_end and
+            (prev_type == tokenize.NAME or prev_text in '}])') and
+            # Syntax "class A (B):" is allowed, but avoid it
+            (index < 2 or tokens[index - 2][1] != 'class') and
+                # Allow "return (a.foo for a in range(5))"
+                not keyword.iskeyword(prev_text)):
+            yield prev_end, "E211 whitespace before '%s'", text
+        prev_type = token_type
+        prev_text = text
+        prev_end = end
+
+
+def whitespace_around_operator(logical_line):
+    r"""Avoid extraneous whitespace around an operator.
+
+    Okay: a = 12 + 3
+    E221: a = 4  + 5
+    E222: a = 4 +  5
+    E223: a = 4\t+ 5
+    E224: a = 4 +\t5
+    """
+    for match in OPERATOR_REGEX.finditer(logical_line):
+        before, after = match.groups()
+
+        if '\t' in before:
+            yield match.start(1), "E223 tab before operator"
+        elif len(before) > 1:
+            yield match.start(1), "E221 multiple spaces before operator"
+
+        if '\t' in after:
+            yield match.start(2), "E224 tab after operator"
+        elif len(after) > 1:
+            yield match.start(2), "E222 multiple spaces after operator"
+
+
+def missing_whitespace_around_operator(logical_line, tokens):
+    r"""Surround operators with a single space on either side.
+
+    - Always surround these binary operators with a single space on
+      either side: assignment (=), augmented assignment (+=, -= etc.),
+      comparisons (==, <, >, !=, <=, >=, in, not in, is, is not),
+      Booleans (and, or, not).
+
+    - If operators with different priorities are used, consider adding
+      whitespace around the operators with the lowest priorities.
+
+    Okay: i = i + 1
+    Okay: submitted += 1
+    Okay: x = x * 2 - 1
+    Okay: hypot2 = x * x + y * y
+    Okay: c = (a + b) * (a - b)
+    Okay: foo(bar, key='word', *args, **kwargs)
+    Okay: alpha[:-i]
+
+    E225: i=i+1
+    E225: submitted +=1
+    E225: x = x /2 - 1
+    E225: z = x **y
+    E226: c = (a+b) * (a-b)
+    E226: hypot2 = x*x + y*y
+    E227: c = a|b
+    E228: msg = fmt%(errno, errmsg)
+    """
+    parens = 0
+    need_space = False
+    prev_type = tokenize.OP
+    prev_text = prev_end = None
+    for token_type, text, start, end, line in tokens:
+        if token_type in SKIP_COMMENTS:
+            continue
+        if text in ('(', 'lambda'):
+            parens += 1
+        elif text == ')':
+            parens -= 1
+        if need_space:
+            if start != prev_end:
+                # Found a (probably) needed space
+                if need_space is not True and not need_space[1]:
+                    yield (need_space[0],
+                           "E225 missing whitespace around operator")
+                need_space = False
+            elif text == '>' and prev_text in ('<', '-'):
+                # Tolerate the "<>" operator, even if running Python 3
+                # Deal with Python 3's annotated return value "->"
+                pass
+            else:
+                if need_space is True or need_space[1]:
+                    # A needed trailing space was not found
+                    yield prev_end, "E225 missing whitespace around operator"
+                elif prev_text != '**':
+                    code, optype = 'E226', 'arithmetic'
+                    if prev_text == '%':
+                        code, optype = 'E228', 'modulo'
+                    elif prev_text not in ARITHMETIC_OP:
+                        code, optype = 'E227', 'bitwise or shift'
+                    yield (need_space[0], "%s missing whitespace "
+                           "around %s operator" % (code, optype))
+                need_space = False
+        elif token_type == tokenize.OP and prev_end is not None:
+            if text == '=' and parens:
+                # Allow keyword args or defaults: foo(bar=None).
+                pass
+            elif text in WS_NEEDED_OPERATORS:
+                need_space = True
+            elif text in UNARY_OPERATORS:
+                # Check if the operator is being used as a binary operator
+                # Allow unary operators: -123, -x, +1.
+                # Allow argument unpacking: foo(*args, **kwargs).
+                if (prev_text in '}])' if prev_type == tokenize.OP
+                        else prev_text not in KEYWORDS):
+                    need_space = None
+            elif text in WS_OPTIONAL_OPERATORS:
+                need_space = None
+
+            if need_space is None:
+                # Surrounding space is optional, but ensure that
+                # trailing space matches opening space
+                need_space = (prev_end, start != prev_end)
+            elif need_space and start == prev_end:
+                # A needed opening space was not found
+                yield prev_end, "E225 missing whitespace around operator"
+                need_space = False
+        prev_type = token_type
+        prev_text = text
+        prev_end = end
+
+
+def whitespace_around_comma(logical_line):
+    r"""Avoid extraneous whitespace after a comma or a colon.
+
+    Note: these checks are disabled by default
+
+    Okay: a = (1, 2)
+    E241: a = (1,  2)
+    E242: a = (1,\t2)
+    """
+    line = logical_line
+    for m in WHITESPACE_AFTER_COMMA_REGEX.finditer(line):
+        found = m.start() + 1
+        if '\t' in m.group():
+            yield found, "E242 tab after '%s'", m.group()[0]
+        else:
+            yield found, "E241 multiple spaces after '%s'", m.group()[0]
+
+
+def whitespace_around_named_parameter_equals(logical_line, tokens):
+    r"""Don't use spaces around the '=' sign in function arguments.
+
+    Don't use spaces around the '=' sign when used to indicate a
+    keyword argument or a default parameter value.
+
+    Okay: def complex(real, imag=0.0):
+    Okay: return magic(r=real, i=imag)
+    Okay: boolean(a == b)
+    Okay: boolean(a != b)
+    Okay: boolean(a <= b)
+    Okay: boolean(a >= b)
+    Okay: def foo(arg: int = 42):
+    Okay: async def foo(arg: int = 42):
+
+    E251: def complex(real, imag = 0.0):
+    E251: return magic(r = real, i = imag)
+    """
+    parens = 0
+    no_space = False
+    prev_end = None
+    annotated_func_arg = False
+    in_def = logical_line.startswith(('def', 'async def'))
+    message = "E251 unexpected spaces around keyword / parameter equals"
+    for token_type, text, start, end, line in tokens:
+        if token_type == tokenize.NL:
+            continue
+        if no_space:
+            no_space = False
+            if start != prev_end:
+                yield (prev_end, message)
+        if token_type == tokenize.OP:
+            if text in '([':
+                parens += 1
+            elif text in ')]':
+                parens -= 1
+            elif in_def and text == ':' and parens == 1:
+                annotated_func_arg = True
+            elif parens and text == ',' and parens == 1:
+                annotated_func_arg = False
+            elif parens and text == '=' and not annotated_func_arg:
+                no_space = True
+                if start != prev_end:
+                    yield (prev_end, message)
+            if not parens:
+                annotated_func_arg = False
+
+        prev_end = end
+
+
+def whitespace_before_comment(logical_line, tokens):
+    r"""Separate inline comments by at least two spaces.
+
+    An inline comment is a comment on the same line as a statement.  Inline
+    comments should be separated by at least two spaces from the statement.
+    They should start with a # and a single space.
+
+    Each line of a block comment starts with a # and a single space
+    (unless it is indented text inside the comment).
+
+    Okay: x = x + 1  # Increment x
+    Okay: x = x + 1    # Increment x
+    Okay: # Block comment
+    E261: x = x + 1 # Increment x
+    E262: x = x + 1  #Increment x
+    E262: x = x + 1  #  Increment x
+    E265: #Block comment
+    E266: ### Block comment
+    """
+    prev_end = (0, 0)
+    for token_type, text, start, end, line in tokens:
+        if token_type == tokenize.COMMENT:
+            inline_comment = line[:start[1]].strip()
+            if inline_comment:
+                if prev_end[0] == start[0] and start[1] < prev_end[1] + 2:
+                    yield (prev_end,
+                           "E261 at least two spaces before inline comment")
+            symbol, sp, comment = text.partition(' ')
+            bad_prefix = symbol not in '#:' and (symbol.lstrip('#')[:1] or '#')
+            if inline_comment:
+                if bad_prefix or comment[:1] in WHITESPACE:
+                    yield start, "E262 inline comment should start with '# '"
+            elif bad_prefix and (bad_prefix != '!' or start[0] > 1):
+                if bad_prefix != '#':
+                    yield start, "E265 block comment should start with '# '"
+                elif comment:
+                    yield start, "E266 too many leading '#' for block comment"
+        elif token_type != tokenize.NL:
+            prev_end = end
+
+
+def imports_on_separate_lines(logical_line):
+    r"""Place imports on separate lines.
+
+    Okay: import os\nimport sys
+    E401: import sys, os
+
+    Okay: from subprocess import Popen, PIPE
+    Okay: from myclas import MyClass
+    Okay: from foo.bar.yourclass import YourClass
+    Okay: import myclass
+    Okay: import foo.bar.yourclass
+    """
+    line = logical_line
+    if line.startswith('import '):
+        found = line.find(',')
+        if -1 < found and ';' not in line[:found]:
+            yield found, "E401 multiple imports on one line"
+
+
+def module_imports_on_top_of_file(
+        logical_line, indent_level, checker_state, noqa):
+    r"""Place imports at the top of the file.
+
+    Always put imports at the top of the file, just after any module comments
+    and docstrings, and before module globals and constants.
+
+    Okay: import os
+    Okay: # this is a comment\nimport os
+    Okay: '''this is a module docstring'''\nimport os
+    Okay: r'''this is a module docstring'''\nimport os
+    Okay: try:\n    import x\nexcept:\n    pass\nelse:\n    pass\nimport y
+    Okay: try:\n    import x\nexcept:\n    pass\nfinally:\n    pass\nimport y
+    E402: a=1\nimport os
+    E402: 'One string'\n"Two string"\nimport os
+    E402: a=1\nfrom sys import x
+
+    Okay: if x:\n    import os
+    """
+    def is_string_literal(line):
+        if line[0] in 'uUbB':
+            line = line[1:]
+        if line and line[0] in 'rR':
+            line = line[1:]
+        return line and (line[0] == '"' or line[0] == "'")
+
+    allowed_try_keywords = ('try', 'except', 'else', 'finally')
+
+    if indent_level:  # Allow imports in conditional statements or functions
+        return
+    if not logical_line:  # Allow empty lines or comments
+        return
+    if noqa:
+        return
+    line = logical_line
+    if line.startswith('import ') or line.startswith('from '):
+        if checker_state.get('seen_non_imports', False):
+            yield 0, "E402 module level import not at top of file"
+    elif any(line.startswith(kw) for kw in allowed_try_keywords):
+        # Allow try, except, else, finally keywords intermixed with imports in
+        # order to support conditional importing
+        return
+    elif is_string_literal(line):
+        # The first literal is a docstring, allow it. Otherwise, report error.
+        if checker_state.get('seen_docstring', False):
+            checker_state['seen_non_imports'] = True
+        else:
+            checker_state['seen_docstring'] = True
+    else:
+        checker_state['seen_non_imports'] = True
+
+
+def compound_statements(logical_line):
+    r"""Compound statements (on the same line) are generally discouraged.
+
+    While sometimes it's okay to put an if/for/while with a small body
+    on the same line, never do this for multi-clause statements.
+    Also avoid folding such long lines!
+
+    Always use a def statement instead of an assignment statement that
+    binds a lambda expression directly to a name.
+
+    Okay: if foo == 'blah':\n    do_blah_thing()
+    Okay: do_one()
+    Okay: do_two()
+    Okay: do_three()
+
+    E701: if foo == 'blah': do_blah_thing()
+    E701: for x in lst: total += x
+    E701: while t < 10: t = delay()
+    E701: if foo == 'blah': do_blah_thing()
+    E701: else: do_non_blah_thing()
+    E701: try: something()
+    E701: finally: cleanup()
+    E701: if foo == 'blah': one(); two(); three()
+    E702: do_one(); do_two(); do_three()
+    E703: do_four();  # useless semicolon
+    E704: def f(x): return 2*x
+    E705: async def f(x): return 2*x
+    E731: f = lambda x: 2*x
+    """
+    line = logical_line
+    last_char = len(line) - 1
+    found = line.find(':')
+    prev_found = 0
+    counts = dict((char, 0) for char in '{}[]()')
+    while -1 < found < last_char:
+        update_counts(line[prev_found:found], counts)
+        if ((counts['{'] <= counts['}'] and   # {'a': 1} (dict)
+             counts['['] <= counts[']'] and   # [1:2] (slice)
+             counts['('] <= counts[')'])):    # (annotation)
+            lambda_kw = LAMBDA_REGEX.search(line, 0, found)
+            if lambda_kw:
+                before = line[:lambda_kw.start()].rstrip()
+                if before[-1:] == '=' and isidentifier(before[:-1].strip()):
+                    yield 0, ("E731 do not assign a lambda expression, use a "
+                              "def")
+                break
+            if line.startswith('def '):
+                yield 0, "E704 multiple statements on one line (def)"
+            elif line.startswith('async def '):
+                yield 0, "E705 multiple statements on one line (async def)"
+            else:
+                yield found, "E701 multiple statements on one line (colon)"
+        prev_found = found
+        found = line.find(':', found + 1)
+    found = line.find(';')
+    while -1 < found:
+        if found < last_char:
+            yield found, "E702 multiple statements on one line (semicolon)"
+        else:
+            yield found, "E703 statement ends with a semicolon"
+        found = line.find(';', found + 1)
+
+
+def explicit_line_join(logical_line, tokens):
+    r"""Avoid explicit line join between brackets.
+
+    The preferred way of wrapping long lines is by using Python's implied line
+    continuation inside parentheses, brackets and braces.  Long lines can be
+    broken over multiple lines by wrapping expressions in parentheses.  These
+    should be used in preference to using a backslash for line continuation.
+
+    E502: aaa = [123, \\n       123]
+    E502: aaa = ("bbb " \\n       "ccc")
+
+    Okay: aaa = [123,\n       123]
+    Okay: aaa = ("bbb "\n       "ccc")
+    Okay: aaa = "bbb " \\n    "ccc"
+    Okay: aaa = 123  # \\
+    """
+    prev_start = prev_end = parens = 0
+    comment = False
+    backslash = None
+    for token_type, text, start, end, line in tokens:
+        if token_type == tokenize.COMMENT:
+            comment = True
+        if start[0] != prev_start and parens and backslash and not comment:
+            yield backslash, "E502 the backslash is redundant between brackets"
+        if end[0] != prev_end:
+            if line.rstrip('\r\n').endswith('\\'):
+                backslash = (end[0], len(line.splitlines()[-1]) - 1)
+            else:
+                backslash = None
+            prev_start = prev_end = end[0]
+        else:
+            prev_start = start[0]
+        if token_type == tokenize.OP:
+            if text in '([{':
+                parens += 1
+            elif text in ')]}':
+                parens -= 1
+
+
+def break_around_binary_operator(logical_line, tokens):
+    r"""
+    Avoid breaks before binary operators.
+
+    The preferred place to break around a binary operator is after the
+    operator, not before it.
+
+    W503: (width == 0\n + height == 0)
+    W503: (width == 0\n and height == 0)
+
+    Okay: (width == 0 +\n height == 0)
+    Okay: foo(\n    -x)
+    Okay: foo(x\n    [])
+    Okay: x = '''\n''' + ''
+    Okay: foo(x,\n    -y)
+    Okay: foo(x,  # comment\n    -y)
+    Okay: var = (1 &\n       ~2)
+    Okay: var = (1 /\n       -2)
+    Okay: var = (1 +\n       -1 +\n       -2)
+    """
+    def is_binary_operator(token_type, text):
+        # The % character is strictly speaking a binary operator, but the
+        # common usage seems to be to put it next to the format parameters,
+        # after a line break.
+        return ((token_type == tokenize.OP or text in ['and', 'or']) and
+                text not in "()[]{},:.;@=%~")
+
+    line_break = False
+    unary_context = True
+    # Previous non-newline token types and text
+    previous_token_type = None
+    previous_text = None
+    for token_type, text, start, end, line in tokens:
+        if token_type == tokenize.COMMENT:
+            continue
+        if ('\n' in text or '\r' in text) and token_type != tokenize.STRING:
+            line_break = True
+        else:
+            if (is_binary_operator(token_type, text) and line_break and
+                    not unary_context and
+                    not is_binary_operator(previous_token_type,
+                                           previous_text)):
+                yield start, "W503 line break before binary operator"
+            unary_context = text in '([{,;'
+            line_break = False
+            previous_token_type = token_type
+            previous_text = text
+
+
+def comparison_to_singleton(logical_line, noqa):
+    r"""Comparison to singletons should use "is" or "is not".
+
+    Comparisons to singletons like None should always be done
+    with "is" or "is not", never the equality operators.
+
+    Okay: if arg is not None:
+    E711: if arg != None:
+    E711: if None == arg:
+    E712: if arg == True:
+    E712: if False == arg:
+
+    Also, beware of writing if x when you really mean if x is not None --
+    e.g. when testing whether a variable or argument that defaults to None was
+    set to some other value.  The other value might have a type (such as a
+    container) that could be false in a boolean context!
+    """
+    match = not noqa and COMPARE_SINGLETON_REGEX.search(logical_line)
+    if match:
+        singleton = match.group(1) or match.group(3)
+        same = (match.group(2) == '==')
+
+        msg = "'if cond is %s:'" % (('' if same else 'not ') + singleton)
+        if singleton in ('None',):
+            code = 'E711'
+        else:
+            code = 'E712'
+            nonzero = ((singleton == 'True' and same) or
+                       (singleton == 'False' and not same))
+            msg += " or 'if %scond:'" % ('' if nonzero else 'not ')
+        yield (match.start(2), ("%s comparison to %s should be %s" %
+                                (code, singleton, msg)), singleton, msg)
+
+
+def comparison_negative(logical_line):
+    r"""Negative comparison should be done using "not in" and "is not".
+
+    Okay: if x not in y:\n    pass
+    Okay: assert (X in Y or X is Z)
+    Okay: if not (X in Y):\n    pass
+    Okay: zz = x is not y
+    E713: Z = not X in Y
+    E713: if not X.B in Y:\n    pass
+    E714: if not X is Y:\n    pass
+    E714: Z = not X.B is Y
+    """
+    match = COMPARE_NEGATIVE_REGEX.search(logical_line)
+    if match:
+        pos = match.start(1)
+        if match.group(2) == 'in':
+            yield pos, "E713 test for membership should be 'not in'"
+        else:
+            yield pos, "E714 test for object identity should be 'is not'"
+
+
+def comparison_type(logical_line, noqa):
+    r"""Object type comparisons should always use isinstance().
+
+    Do not compare types directly.
+
+    Okay: if isinstance(obj, int):
+    E721: if type(obj) is type(1):
+
+    When checking if an object is a string, keep in mind that it might be a
+    unicode string too! In Python 2.3, str and unicode have a common base
+    class, basestring, so you can do:
+
+    Okay: if isinstance(obj, basestring):
+    Okay: if type(a1) is type(b1):
+    """
+    match = COMPARE_TYPE_REGEX.search(logical_line)
+    if match and not noqa:
+        inst = match.group(1)
+        if inst and isidentifier(inst) and inst not in SINGLETONS:
+            return  # Allow comparison for types which are not obvious
+        yield match.start(), "E721 do not compare types, use 'isinstance()'"
+
+
+def ambiguous_identifier(logical_line, tokens):
+    r"""Never use the characters 'l', 'O', or 'I' as variable names.
+
+    In some fonts, these characters are indistinguishable from the numerals
+    one and zero. When tempted to use 'l', use 'L' instead.
+
+    Okay: L = 0
+    Okay: o = 123
+    Okay: i = 42
+    E741: l = 0
+    E741: O = 123
+    E741: I = 42
+
+    Variables can be bound in several other contexts, including class and
+    function definitions, 'global' and 'nonlocal' statements, exception
+    handlers, and 'with' statements.
+
+    Okay: except AttributeError as o:
+    Okay: with lock as L:
+    E741: except AttributeError as O:
+    E741: with lock as l:
+    E741: global I
+    E741: nonlocal l
+    E742: class I(object):
+    E743: def l(x):
+    """
+    idents_to_avoid = ('l', 'O', 'I')
+    prev_type, prev_text, prev_start, prev_end, __ = tokens[0]
+    for token_type, text, start, end, line in tokens[1:]:
+        ident = pos = None
+        # identifiers on the lhs of an assignment operator
+        if token_type == tokenize.OP and '=' in text:
+            if prev_text in idents_to_avoid:
+                ident = prev_text
+                pos = prev_start
+        # identifiers bound to a value with 'as', 'global', or 'nonlocal'
+        if prev_text in ('as', 'global', 'nonlocal'):
+            if text in idents_to_avoid:
+                ident = text
+                pos = start
+        if prev_text == 'class':
+            if text in idents_to_avoid:
+                yield start, "E742 ambiguous class definition '%s'", text
+        if prev_text == 'def':
+            if text in idents_to_avoid:
+                yield start, "E743 ambiguous function definition '%s'", text
+        if ident:
+            yield pos, "E741 ambiguous variable name '%s'", ident
+        prev_text = text
+        prev_start = start
+
+
+def python_3000_has_key(logical_line, noqa):
+    r"""The {}.has_key() method is removed in Python 3: use the 'in' operator.
+
+    Okay: if "alph" in d:\n    print d["alph"]
+    W601: assert d.has_key('alph')
+    """
+    pos = logical_line.find('.has_key(')
+    if pos > -1 and not noqa:
+        yield pos, "W601 .has_key() is deprecated, use 'in'"
+
+
+def python_3000_raise_comma(logical_line):
+    r"""When raising an exception, use "raise ValueError('message')".
+
+    The older form is removed in Python 3.
+
+    Okay: raise DummyError("Message")
+    W602: raise DummyError, "Message"
+    """
+    match = RAISE_COMMA_REGEX.match(logical_line)
+    if match and not RERAISE_COMMA_REGEX.match(logical_line):
+        yield match.end() - 1, "W602 deprecated form of raising exception"
+
+
+def python_3000_not_equal(logical_line):
+    r"""New code should always use != instead of <>.
+
+    The older syntax is removed in Python 3.
+
+    Okay: if a != 'no':
+    W603: if a <> 'no':
+    """
+    pos = logical_line.find('<>')
+    if pos > -1:
+        yield pos, "W603 '<>' is deprecated, use '!='"
+
+
+def python_3000_backticks(logical_line):
+    r"""Use repr() instead of backticks in Python 3.
+
+    Okay: val = repr(1 + 2)
+    W604: val = `1 + 2`
+    """
+    pos = logical_line.find('`')
+    if pos > -1:
+        yield pos, "W604 backticks are deprecated, use 'repr()'"
+
+
+##############################################################################
+# Helper functions
+##############################################################################
+
+
+if sys.version_info < (3,):
+    # Python 2: implicit encoding.
+    def readlines(filename):
+        """Read the source code."""
+        with open(filename, 'rU') as f:
+            return f.readlines()
+    isidentifier = re.compile(r'[a-zA-Z_]\w*$').match
+    stdin_get_value = sys.stdin.read
+else:
+    # Python 3
+    def readlines(filename):
+        """Read the source code."""
+        try:
+            with open(filename, 'rb') as f:
+                (coding, lines) = tokenize.detect_encoding(f.readline)
+                f = TextIOWrapper(f, coding, line_buffering=True)
+                return [line.decode(coding) for line in lines] + f.readlines()
+        except (LookupError, SyntaxError, UnicodeError):
+            # Fall back if file encoding is improperly declared
+            with open(filename, encoding='latin-1') as f:
+                return f.readlines()
+    isidentifier = str.isidentifier
+
+    def stdin_get_value():
+        """Read the value from stdin."""
+        return TextIOWrapper(sys.stdin.buffer, errors='ignore').read()
+
+noqa = re.compile(r'# no(?:qa|pep8)\b', re.I).search
+
+
+def expand_indent(line):
+    r"""Return the amount of indentation.
+
+    Tabs are expanded to the next multiple of 8.
+
+    >>> expand_indent('    ')
+    4
+    >>> expand_indent('\t')
+    8
+    >>> expand_indent('       \t')
+    8
+    >>> expand_indent('        \t')
+    16
+    """
+    if '\t' not in line:
+        return len(line) - len(line.lstrip())
+    result = 0
+    for char in line:
+        if char == '\t':
+            result = result // 8 * 8 + 8
+        elif char == ' ':
+            result += 1
+        else:
+            break
+    return result
+
+
+def mute_string(text):
+    """Replace contents with 'xxx' to prevent syntax matching.
+
+    >>> mute_string('"abc"')
+    '"xxx"'
+    >>> mute_string("'''abc'''")
+    "'''xxx'''"
+    >>> mute_string("r'abc'")
+    "r'xxx'"
+    """
+    # String modifiers (e.g. u or r)
+    start = text.index(text[-1]) + 1
+    end = len(text) - 1
+    # Triple quotes
+    if text[-3:] in ('"""', "'''"):
+        start += 2
+        end -= 2
+    return text[:start] + 'x' * (end - start) + text[end:]
+
+
+def parse_udiff(diff, patterns=None, parent='.'):
+    """Return a dictionary of matching lines."""
+    # For each file of the diff, the entry key is the filename,
+    # and the value is a set of row numbers to consider.
+    rv = {}
+    path = nrows = None
+    for line in diff.splitlines():
+        if nrows:
+            if line[:1] != '-':
+                nrows -= 1
+            continue
+        if line[:3] == '@@ ':
+            hunk_match = HUNK_REGEX.match(line)
+            (row, nrows) = [int(g or '1') for g in hunk_match.groups()]
+            rv[path].update(range(row, row + nrows))
+        elif line[:3] == '+++':
+            path = line[4:].split('\t', 1)[0]
+            if path[:2] == 'b/':
+                path = path[2:]
+            rv[path] = set()
+    return dict([(os.path.join(parent, path), rows)
+                 for (path, rows) in rv.items()
+                 if rows and filename_match(path, patterns)])
+
+
+def normalize_paths(value, parent=os.curdir):
+    """Parse a comma-separated list of paths.
+
+    Return a list of absolute paths.
+    """
+    if not value:
+        return []
+    if isinstance(value, list):
+        return value
+    paths = []
+    for path in value.split(','):
+        path = path.strip()
+        if '/' in path:
+            path = os.path.abspath(os.path.join(parent, path))
+        paths.append(path.rstrip('/'))
+    return paths
+
+
+def filename_match(filename, patterns, default=True):
+    """Check if patterns contains a pattern that matches filename.
+
+    If patterns is unspecified, this always returns True.
+    """
+    if not patterns:
+        return default
+    return any(fnmatch(filename, pattern) for pattern in patterns)
+
+
+def update_counts(s, counts):
+    r"""Adds one to the counts of each appearance of characters in s,
+        for characters in counts"""
+    for char in s:
+        if char in counts:
+            counts[char] += 1
+
+
+def _is_eol_token(token):
+    return token[0] in NEWLINE or token[4][token[3][1]:].lstrip() == '\\\n'
+
+
+if COMMENT_WITH_NL:
+    def _is_eol_token(token, _eol_token=_is_eol_token):
+        return _eol_token(token) or (token[0] == tokenize.COMMENT and
+                                     token[1] == token[4])
+
+##############################################################################
+# Framework to run all checks
+##############################################################################
+
+
+_checks = {'physical_line': {}, 'logical_line': {}, 'tree': {}}
+
+
+def _get_parameters(function):
+    if sys.version_info >= (3, 3):
+        return [parameter.name
+                for parameter
+                in inspect.signature(function).parameters.values()
+                if parameter.kind == parameter.POSITIONAL_OR_KEYWORD]
+    else:
+        return inspect.getargspec(function)[0]
+
+
+def register_check(check, codes=None):
+    """Register a new check object."""
+    def _add_check(check, kind, codes, args):
+        if check in _checks[kind]:
+            _checks[kind][check][0].extend(codes or [])
+        else:
+            _checks[kind][check] = (codes or [''], args)
+    if inspect.isfunction(check):
+        args = _get_parameters(check)
+        if args and args[0] in ('physical_line', 'logical_line'):
+            if codes is None:
+                codes = ERRORCODE_REGEX.findall(check.__doc__ or '')
+            _add_check(check, args[0], codes, args)
+    elif inspect.isclass(check):
+        if _get_parameters(check.__init__)[:2] == ['self', 'tree']:
+            _add_check(check, 'tree', codes, None)
+
+
+def init_checks_registry():
+    """Register all globally visible functions.
+
+    The first argument name is either 'physical_line' or 'logical_line'.
+    """
+    mod = inspect.getmodule(register_check)
+    for (name, function) in inspect.getmembers(mod, inspect.isfunction):
+        register_check(function)
+
+
+init_checks_registry()
+
+
+class Checker(object):
+    """Load a Python source file, tokenize it, check coding style."""
+
+    def __init__(self, filename=None, lines=None,
+                 options=None, report=None, **kwargs):
+        if options is None:
+            options = StyleGuide(kwargs).options
+        else:
+            assert not kwargs
+        self._io_error = None
+        self._physical_checks = options.physical_checks
+        self._logical_checks = options.logical_checks
+        self._ast_checks = options.ast_checks
+        self.max_line_length = options.max_line_length
+        self.multiline = False  # in a multiline string?
+        self.hang_closing = options.hang_closing
+        self.verbose = options.verbose
+        self.filename = filename
+        # Dictionary where a checker can store its custom state.
+        self._checker_states = {}
+        if filename is None:
+            self.filename = 'stdin'
+            self.lines = lines or []
+        elif filename == '-':
+            self.filename = 'stdin'
+            self.lines = stdin_get_value().splitlines(True)
+        elif lines is None:
+            try:
+                self.lines = readlines(filename)
+            except IOError:
+                (exc_type, exc) = sys.exc_info()[:2]
+                self._io_error = '%s: %s' % (exc_type.__name__, exc)
+                self.lines = []
+        else:
+            self.lines = lines
+        if self.lines:
+            ord0 = ord(self.lines[0][0])
+            if ord0 in (0xef, 0xfeff):  # Strip the UTF-8 BOM
+                if ord0 == 0xfeff:
+                    self.lines[0] = self.lines[0][1:]
+                elif self.lines[0][:3] == '\xef\xbb\xbf':
+                    self.lines[0] = self.lines[0][3:]
+        self.report = report or options.report
+        self.report_error = self.report.error
+        self.report_error_args = self.report.error_args
+        self.noqa = False
+        
+        # added for eric6 integration
+        self.options = options
+
+    def report_invalid_syntax(self):
+        """Check if the syntax is valid."""
+        (exc_type, exc) = sys.exc_info()[:2]
+        if len(exc.args) > 1:
+            offset = exc.args[1]
+            if len(offset) > 2:
+                offset = offset[1:3]
+        else:
+            offset = (1, 0)
+        self.report_error_args(offset[0], offset[1] or 0,
+                          'E901', self.report_invalid_syntax,
+                          exc_type.__name__, exc.args[0])
+
+    def readline(self):
+        """Get the next line from the input buffer."""
+        if self.line_number >= self.total_lines:
+            return ''
+        line = self.lines[self.line_number]
+        self.line_number += 1
+        if self.indent_char is None and line[:1] in WHITESPACE:
+            self.indent_char = line[0]
+        return line
+
+    def run_check(self, check, argument_names):
+        """Run a check plugin."""
+        arguments = []
+        for name in argument_names:
+            arguments.append(getattr(self, name))
+        return check(*arguments)
+
+    def init_checker_state(self, name, argument_names):
+        """ Prepare custom state for the specific checker plugin."""
+        if 'checker_state' in argument_names:
+            self.checker_state = self._checker_states.setdefault(name, {})
+
+    def check_physical(self, line):
+        """Run all physical checks on a raw input line."""
+        self.physical_line = line
+        for name, check, argument_names in self._physical_checks:
+            self.init_checker_state(name, argument_names)
+            result = self.run_check(check, argument_names)
+            if result is not None:
+                (offset, text) = result[:2]
+                args = result[2:]
+                self.report_error_args(
+                    self.line_number, offset, text, check, *args)
+                if text[:4] == 'E101':
+                    self.indent_char = line[0]
+
+    def build_tokens_line(self):
+        """Build a logical line from tokens."""
+        logical = []
+        comments = []
+        length = 0
+        prev_row = prev_col = mapping = None
+        for token_type, text, start, end, line in self.tokens:
+            if token_type in SKIP_TOKENS:
+                continue
+            if not mapping:
+                mapping = [(0, start)]
+            if token_type == tokenize.COMMENT:
+                comments.append(text)
+                continue
+            if token_type == tokenize.STRING:
+                text = mute_string(text)
+            if prev_row:
+                (start_row, start_col) = start
+                if prev_row != start_row:    # different row
+                    prev_text = self.lines[prev_row - 1][prev_col - 1]
+                    if prev_text == ',' or (prev_text not in '{[(' and
+                                            text not in '}])'):
+                        text = ' ' + text
+                elif prev_col != start_col:  # different column
+                    text = line[prev_col:start_col] + text
+            logical.append(text)
+            length += len(text)
+            mapping.append((length, end))
+            (prev_row, prev_col) = end
+        self.logical_line = ''.join(logical)
+        self.noqa = comments and noqa(''.join(comments))
+        return mapping
+
+    def check_logical(self):
+        """Build a line from tokens and run all logical checks on it."""
+        self.report.increment_logical_line()
+        mapping = self.build_tokens_line()
+
+        if not mapping:
+            return
+
+        (start_row, start_col) = mapping[0][1]
+        start_line = self.lines[start_row - 1]
+        self.indent_level = expand_indent(start_line[:start_col])
+        if self.blank_before < self.blank_lines:
+            self.blank_before = self.blank_lines
+        if self.verbose >= 2:
+            print(self.logical_line[:80].rstrip())
+        for name, check, argument_names in self._logical_checks:
+            if self.verbose >= 4:
+                print('   ' + name)
+            self.init_checker_state(name, argument_names)
+            for result in self.run_check(check, argument_names) or ():
+                offset, text = result[:2]
+                args = result[2:]
+                if not isinstance(offset, tuple):
+                    for token_offset, pos in mapping:
+                        if offset <= token_offset:
+                            break
+                    offset = (pos[0], pos[1] + offset - token_offset)
+                self.report_error_args(
+                    offset[0], offset[1], text, check, *args)
+        if self.logical_line:
+            self.previous_indent_level = self.indent_level
+            self.previous_logical = self.logical_line
+            if not self.indent_level:
+                self.previous_unindented_logical_line = self.logical_line
+        self.blank_lines = 0
+        self.tokens = []
+
+    def check_ast(self):
+        """Build the file's AST and run all AST checks."""
+        try:
+            tree = compile(''.join(self.lines), '', 'exec', PyCF_ONLY_AST)
+        except (ValueError, SyntaxError, TypeError):
+            return self.report_invalid_syntax()
+        for name, cls, __ in self._ast_checks:
+            # extended API for eric6 integration
+            checker = cls(tree, self.filename, self.options)
+            for args in checker.run():
+                lineno = args[0]
+                if not self.lines or not noqa(self.lines[lineno - 1]):
+                    self.report_error_args(lineno, *args[1:])
+
+    def generate_tokens(self):
+        """Tokenize the file, run physical line checks and yield tokens."""
+        if self._io_error:
+            self.report_error_args(1, 0, 'E902', self._io_error, readlines)
+        tokengen = tokenize.generate_tokens(self.readline)
+        try:
+            for token in tokengen:
+                if token[2][0] > self.total_lines:
+                    return
+                self.noqa = token[4] and noqa(token[4])
+                self.maybe_check_physical(token)
+                yield token
+        except (SyntaxError, tokenize.TokenError):
+            self.report_invalid_syntax()
+
+    def maybe_check_physical(self, token):
+        """If appropriate (based on token), check current physical line(s)."""
+        # Called after every token, but act only on end of line.
+        if _is_eol_token(token):
+            # Obviously, a newline token ends a single physical line.
+            self.check_physical(token[4])
+        elif token[0] == tokenize.STRING and '\n' in token[1]:
+            # Less obviously, a string that contains newlines is a
+            # multiline string, either triple-quoted or with internal
+            # newlines backslash-escaped. Check every physical line in the
+            # string *except* for the last one: its newline is outside of
+            # the multiline string, so we consider it a regular physical
+            # line, and will check it like any other physical line.
+            #
+            # Subtleties:
+            # - we don't *completely* ignore the last line; if it contains
+            #   the magical "# noqa" comment, we disable all physical
+            #   checks for the entire multiline string
+            # - have to wind self.line_number back because initially it
+            #   points to the last line of the string, and we want
+            #   check_physical() to give accurate feedback
+            if noqa(token[4]):
+                return
+            self.multiline = True
+            self.line_number = token[2][0]
+            for line in token[1].split('\n')[:-1]:
+                self.check_physical(line + '\n')
+                self.line_number += 1
+            self.multiline = False
+
+    def check_all(self, expected=None, line_offset=0):
+        """Run all checks on the input file."""
+        self.report.init_file(self.filename, self.lines, expected, line_offset)
+        self.total_lines = len(self.lines)
+        if self._ast_checks:
+            self.check_ast()
+        self.line_number = 0
+        self.indent_char = None
+        self.indent_level = self.previous_indent_level = 0
+        self.previous_logical = ''
+        self.previous_unindented_logical_line = ''
+        self.tokens = []
+        self.blank_lines = self.blank_before = 0
+        parens = 0
+        for token in self.generate_tokens():
+            self.tokens.append(token)
+            token_type, text = token[0:2]
+            if self.verbose >= 3:
+                if token[2][0] == token[3][0]:
+                    pos = '[%s:%s]' % (token[2][1] or '', token[3][1])
+                else:
+                    pos = 'l.%s' % token[3][0]
+                print('l.%s\t%s\t%s\t%r' %
+                      (token[2][0], pos, tokenize.tok_name[token[0]], text))
+            if token_type == tokenize.OP:
+                if text in '([{':
+                    parens += 1
+                elif text in '}])':
+                    parens -= 1
+            elif not parens:
+                if token_type in NEWLINE:
+                    if token_type == tokenize.NEWLINE:
+                        self.check_logical()
+                        self.blank_before = 0
+                    elif len(self.tokens) == 1:
+                        # The physical line contains only this token.
+                        self.blank_lines += 1
+                        del self.tokens[0]
+                    else:
+                        self.check_logical()
+                elif COMMENT_WITH_NL and token_type == tokenize.COMMENT:
+                    if len(self.tokens) == 1:
+                        # The comment also ends a physical line
+                        token = list(token)
+                        token[1] = text.rstrip('\r\n')
+                        token[3] = (token[2][0], token[2][1] + len(token[1]))
+                        self.tokens = [tuple(token)]
+                        self.check_logical()
+        if self.tokens:
+            self.check_physical(self.lines[-1])
+            self.check_logical()
+        return self.report.get_file_results()
+
+
+class BaseReport(object):
+    """Collect the results of the checks."""
+
+    print_filename = False
+
+    def __init__(self, options):
+        self._benchmark_keys = options.benchmark_keys
+        self._ignore_code = options.ignore_code
+        # Results
+        self.elapsed = 0
+        self.total_errors = 0
+        self.counters = dict.fromkeys(self._benchmark_keys, 0)
+        self.messages = {}
+
+    def start(self):
+        """Start the timer."""
+        self._start_time = time.time()
+
+    def stop(self):
+        """Stop the timer."""
+        self.elapsed = time.time() - self._start_time
+
+    def init_file(self, filename, lines, expected, line_offset):
+        """Signal a new file."""
+        self.filename = filename
+        self.lines = lines
+        self.expected = expected or ()
+        self.line_offset = line_offset
+        self.file_errors = 0
+        self.counters['files'] += 1
+        self.counters['physical lines'] += len(lines)
+
+    def increment_logical_line(self):
+        """Signal a new logical line."""
+        self.counters['logical lines'] += 1
+
+    def error(self, line_number, offset, text, check):
+        """Report an error, according to options."""
+        code = text[:4]
+        if self._ignore_code(code):
+            return
+        if code in self.counters:
+            self.counters[code] += 1
+        else:
+            self.counters[code] = 1
+            self.messages[code] = []
+        # Don't care about expected errors or warnings
+        if code in self.expected:
+            return
+        if self.print_filename and not self.file_errors:
+            print(self.filename)
+        self.file_errors += 1
+        self.total_errors += 1
+        return code
+
+    def error_args(self, line_number, offset, text, check, *args):
+        """Report an error, according to options."""
+        code = text[:4]
+        if self._ignore_code(code):
+            return
+        if code in self.counters:
+            self.counters[code] += 1
+        else:
+            self.counters[code] = 1
+            self.messages[code] = args
+        # Don't care about expected errors or warnings
+        if code in self.expected:
+            return
+        if self.print_filename and not self.file_errors:
+            print(self.filename)
+        self.file_errors += 1
+        self.total_errors += 1
+        return code
+
+    def get_file_results(self):
+        """Return the count of errors and warnings for this file."""
+        return self.file_errors
+
+    def get_count(self, prefix=''):
+        """Return the total count of errors and warnings."""
+        return sum([self.counters[key]
+                    for key in self.messages if key.startswith(prefix)])
+
+    def get_statistics(self, prefix=''):
+        """Get statistics for message codes that start with the prefix.
+
+        prefix='' matches all errors and warnings
+        prefix='E' matches all errors
+        prefix='W' matches all warnings
+        prefix='E4' matches all errors that have to do with imports
+        """
+        return ['%-7s %s %s' % (self.counters[key], key, self.messages[key])
+                for key in sorted(self.messages) if key.startswith(prefix)]
+
+    def print_statistics(self, prefix=''):
+        """Print overall statistics (number of errors and warnings)."""
+        for line in self.get_statistics(prefix):
+            print(line)
+
+    def print_benchmark(self):
+        """Print benchmark numbers."""
+        print('%-7.2f %s' % (self.elapsed, 'seconds elapsed'))
+        if self.elapsed:
+            for key in self._benchmark_keys:
+                print('%-7d %s per second (%d total)' %
+                      (self.counters[key] / self.elapsed, key,
+                       self.counters[key]))
+
+
+class FileReport(BaseReport):
+    """Collect the results of the checks and print only the filenames."""
+    print_filename = True
+
+
+class StandardReport(BaseReport):
+    """Collect and print the results of the checks."""
+
+    def __init__(self, options):
+        super(StandardReport, self).__init__(options)
+        self._fmt = REPORT_FORMAT.get(options.format.lower(),
+                                      options.format)
+        self._repeat = options.repeat
+        self._show_source = options.show_source
+        self._show_pep8 = options.show_pep8
+
+    def init_file(self, filename, lines, expected, line_offset):
+        """Signal a new file."""
+        self._deferred_print = []
+        return super(StandardReport, self).init_file(
+            filename, lines, expected, line_offset)
+
+    def error(self, line_number, offset, text, check):
+        """Report an error, according to options."""
+        code = super(StandardReport, self).error(line_number, offset,
+                                                 text, check)
+        if code and (self.counters[code] == 1 or self._repeat):
+            self._deferred_print.append(
+                (line_number, offset, code, text[5:], check.__doc__))
+        return code
+
+    def error_args(self, line_number, offset, code, check, *args):
+        """Report an error, according to options."""
+        code = super(StandardReport, self).error_args(line_number, offset,
+                                                      code, check, *args)
+        if code and (self.counters[code] == 1 or self._repeat):
+            self._deferred_print.append(
+                (line_number, offset, code, args, check.__doc__))
+        return code
+
+    def get_file_results(self):
+        """Print the result and return the overall count for this file."""
+        self._deferred_print.sort()
+        for line_number, offset, code, text, doc in self._deferred_print:
+            print(self._fmt % {
+                'path': self.filename,
+                'row': self.line_offset + line_number, 'col': offset + 1,
+                'code': code, 'text': text,
+            })
+            if self._show_source:
+                if line_number > len(self.lines):
+                    line = ''
+                else:
+                    line = self.lines[line_number - 1]
+                print(line.rstrip())
+                print(re.sub(r'\S', ' ', line[:offset]) + '^')
+            if self._show_pep8 and doc:
+                print('    ' + doc.strip())
+
+            # stdout is block buffered when not stdout.isatty().
+            # line can be broken where buffer boundary since other processes
+            # write to same file.
+            # flush() after print() to avoid buffer boundary.
+            # Typical buffer size is 8192. line written safely when
+            # len(line) < 8192.
+            sys.stdout.flush()
+        return self.file_errors
+
+
+class DiffReport(StandardReport):
+    """Collect and print the results for the changed lines only."""
+
+    def __init__(self, options):
+        super(DiffReport, self).__init__(options)
+        self._selected = options.selected_lines
+
+    def error(self, line_number, offset, text, check):
+        if line_number not in self._selected[self.filename]:
+            return
+        return super(DiffReport, self).error(line_number, offset, text, check)
+
+
+class StyleGuide(object):
+    """Initialize a PEP-8 instance with few options."""
+
+    def __init__(self, *args, **kwargs):
+        # build options from the command line
+        self.checker_class = kwargs.pop('checker_class', Checker)
+        parse_argv = kwargs.pop('parse_argv', False)
+        config_file = kwargs.pop('config_file', False)
+        parser = kwargs.pop('parser', None)
+        # build options from dict
+        options_dict = dict(*args, **kwargs)
+        arglist = None if parse_argv else options_dict.get('paths', None)
+        options, self.paths = process_options(
+            arglist, parse_argv, config_file, parser)
+        if options_dict:
+            options.__dict__.update(options_dict)
+            if 'paths' in options_dict:
+                self.paths = options_dict['paths']
+
+        self.runner = self.input_file
+        self.options = options
+
+        if not options.reporter:
+            options.reporter = BaseReport if options.quiet else StandardReport
+
+        options.select = tuple(options.select or ())
+#        if not (options.select or options.ignore or
+#                options.testsuite or options.doctest) and DEFAULT_IGNORE:
+#            # The default choice: ignore controversial checks
+#            options.ignore = tuple(DEFAULT_IGNORE.split(','))
+#        else:
+#            # Ignore all checks which are not explicitly selected or all if no
+#            options.ignore = ('',) if options.select else tuple(options.ignore)
+
+        # check is ignored or explicitly selected
+        options.ignore = ('',) if options.select else tuple(options.ignore)
+        options.benchmark_keys = BENCHMARK_KEYS[:]
+        options.ignore_code = self.ignore_code
+        options.physical_checks = self.get_checks('physical_line')
+        options.logical_checks = self.get_checks('logical_line')
+        options.ast_checks = self.get_checks('tree')
+        self.init_report()
+
+    def init_report(self, reporter=None):
+        """Initialize the report instance."""
+        self.options.report = (reporter or self.options.reporter)(self.options)
+        return self.options.report
+
+    def check_files(self, paths=None):
+        """Run all checks on the paths."""
+        if paths is None:
+            paths = self.paths
+        report = self.options.report
+        runner = self.runner
+        report.start()
+        try:
+            for path in paths:
+                if os.path.isdir(path):
+                    self.input_dir(path)
+                elif not self.excluded(path):
+                    runner(path)
+        except KeyboardInterrupt:
+            print('... stopped')
+        report.stop()
+        return report
+
+    def input_file(self, filename, lines=None, expected=None, line_offset=0):
+        """Run all checks on a Python source file."""
+        if self.options.verbose:
+            print('checking %s' % filename)
+        fchecker = self.checker_class(
+            filename, lines=lines, options=self.options)
+        return fchecker.check_all(expected=expected, line_offset=line_offset)
+
+    def input_dir(self, dirname):
+        """Check all files in this directory and all subdirectories."""
+        dirname = dirname.rstrip('/')
+        if self.excluded(dirname):
+            return 0
+        counters = self.options.report.counters
+        verbose = self.options.verbose
+        filepatterns = self.options.filename
+        runner = self.runner
+        for root, dirs, files in os.walk(dirname):
+            if verbose:
+                print('directory ' + root)
+            counters['directories'] += 1
+            for subdir in sorted(dirs):
+                if self.excluded(subdir, root):
+                    dirs.remove(subdir)
+            for filename in sorted(files):
+                # contain a pattern that matches?
+                if ((filename_match(filename, filepatterns) and
+                     not self.excluded(filename, root))):
+                    runner(os.path.join(root, filename))
+
+    def excluded(self, filename, parent=None):
+        """Check if the file should be excluded.
+
+        Check if 'options.exclude' contains a pattern that matches filename.
+        """
+        if not self.options.exclude:
+            return False
+        basename = os.path.basename(filename)
+        if filename_match(basename, self.options.exclude):
+            return True
+        if parent:
+            filename = os.path.join(parent, filename)
+        filename = os.path.abspath(filename)
+        return filename_match(filename, self.options.exclude)
+
+    def ignore_code(self, code):
+        """Check if the error code should be ignored.
+
+        If 'options.select' contains a prefix of the error code,
+        return False.  Else, if 'options.ignore' contains a prefix of
+        the error code, return True.
+        """
+        if len(code) < 4 and any(s.startswith(code)
+                                 for s in self.options.select):
+            return False
+        return (code.startswith(self.options.ignore) and
+                not code.startswith(self.options.select))
+
+    def get_checks(self, argument_name):
+        """Get all the checks for this category.
+
+        Find all globally visible functions where the first argument name
+        starts with argument_name and which contain selected tests.
+        """
+        checks = []
+        for check, attrs in _checks[argument_name].items():
+            (codes, args) = attrs
+            if any(not (code and self.ignore_code(code)) for code in codes):
+                checks.append((check.__name__, check, args))
+        return sorted(checks)
+
+
+def get_parser(prog='pycodestyle', version=__version__):
+    """Create the parser for the program."""
+    parser = OptionParser(prog=prog, version=version,
+                          usage="%prog [options] input ...")
+    parser.config_options = [
+        'exclude', 'filename', 'select', 'ignore', 'max-line-length',
+        'hang-closing', 'count', 'format', 'quiet', 'show-pep8',
+        'show-source', 'statistics', 'verbose']
+    parser.add_option('-v', '--verbose', default=0, action='count',
+                      help="print status messages, or debug with -vv")
+    parser.add_option('-q', '--quiet', default=0, action='count',
+                      help="report only file names, or nothing with -qq")
+    parser.add_option('-r', '--repeat', default=True, action='store_true',
+                      help="(obsolete) show all occurrences of the same error")
+    parser.add_option('--first', action='store_false', dest='repeat',
+                      help="show first occurrence of each error")
+    parser.add_option('--exclude', metavar='patterns', default=DEFAULT_EXCLUDE,
+                      help="exclude files or directories which match these "
+                           "comma separated patterns (default: %default)")
+    parser.add_option('--filename', metavar='patterns', default='*.py',
+                      help="when parsing directories, only check filenames "
+                           "matching these comma separated patterns "
+                           "(default: %default)")
+    parser.add_option('--select', metavar='errors', default='',
+                      help="select errors and warnings (e.g. E,W6)")
+    parser.add_option('--ignore', metavar='errors', default='',
+                      help="skip errors and warnings (e.g. E4,W) "
+                           "(default: %s)" % DEFAULT_IGNORE)
+    parser.add_option('--show-source', action='store_true',
+                      help="show source code for each error")
+    parser.add_option('--show-pep8', action='store_true',
+                      help="show text of PEP 8 for each error "
+                           "(implies --first)")
+    parser.add_option('--statistics', action='store_true',
+                      help="count errors and warnings")
+    parser.add_option('--count', action='store_true',
+                      help="print total number of errors and warnings "
+                           "to standard error and set exit code to 1 if "
+                           "total is not null")
+    parser.add_option('--max-line-length', type='int', metavar='n',
+                      default=MAX_LINE_LENGTH,
+                      help="set maximum allowed line length "
+                           "(default: %default)")
+    parser.add_option('--hang-closing', action='store_true',
+                      help="hang closing bracket instead of matching "
+                           "indentation of opening bracket's line")
+    parser.add_option('--format', metavar='format', default='default',
+                      help="set the error format [default|pylint|<custom>]")
+    parser.add_option('--diff', action='store_true',
+                      help="report changes only within line number ranges in "
+                           "the unified diff received on STDIN")
+    group = parser.add_option_group("Testing Options")
+    if os.path.exists(TESTSUITE_PATH):
+        group.add_option('--testsuite', metavar='dir',
+                         help="run regression tests from dir")
+        group.add_option('--doctest', action='store_true',
+                         help="run doctest on myself")
+    group.add_option('--benchmark', action='store_true',
+                     help="measure processing speed")
+    return parser
+
+
+def read_config(options, args, arglist, parser):
+    """Read and parse configurations
+
+    If a config file is specified on the command line with the "--config"
+    option, then only it is used for configuration.
+
+    Otherwise, the user configuration (~/.config/pycodestyle) and any local
+    configurations in the current directory or above will be merged together
+    (in that order) using the read method of ConfigParser.
+    """
+    config = RawConfigParser()
+
+    cli_conf = options.config
+
+    local_dir = os.curdir
+
+    if USER_CONFIG and os.path.isfile(USER_CONFIG):
+        if options.verbose:
+            print('user configuration: %s' % USER_CONFIG)
+        config.read(USER_CONFIG)
+
+    parent = tail = args and os.path.abspath(os.path.commonprefix(args))
+    while tail:
+        if config.read(os.path.join(parent, fn) for fn in PROJECT_CONFIG):
+            local_dir = parent
+            if options.verbose:
+                print('local configuration: in %s' % parent)
+            break
+        (parent, tail) = os.path.split(parent)
+
+    if cli_conf and os.path.isfile(cli_conf):
+        if options.verbose:
+            print('cli configuration: %s' % cli_conf)
+        config.read(cli_conf)
+
+    pep8_section = parser.prog
+    if config.has_section(pep8_section):
+        option_list = dict([(o.dest, o.type or o.action)
+                            for o in parser.option_list])
+
+        # First, read the default values
+        (new_options, __) = parser.parse_args([])
+
+        # Second, parse the configuration
+        for opt in config.options(pep8_section):
+            if opt.replace('_', '-') not in parser.config_options:
+                print("  unknown option '%s' ignored" % opt)
+                continue
+            if options.verbose > 1:
+                print("  %s = %s" % (opt, config.get(pep8_section, opt)))
+            normalized_opt = opt.replace('-', '_')
+            opt_type = option_list[normalized_opt]
+            if opt_type in ('int', 'count'):
+                value = config.getint(pep8_section, opt)
+            elif opt_type in ('store_true', 'store_false'):
+                value = config.getboolean(pep8_section, opt)
+            else:
+                value = config.get(pep8_section, opt)
+                if normalized_opt == 'exclude':
+                    value = normalize_paths(value, local_dir)
+            setattr(new_options, normalized_opt, value)
+
+        # Third, overwrite with the command-line options
+        (options, __) = parser.parse_args(arglist, values=new_options)
+    options.doctest = options.testsuite = False
+    return options
+
+
+def process_options(arglist=None, parse_argv=False, config_file=None,
+                    parser=None):
+    """Process options passed either via arglist or via command line args.
+
+    Passing in the ``config_file`` parameter allows other tools, such as flake8
+    to specify their own options to be processed in pycodestyle.
+    """
+    if not parser:
+        parser = get_parser()
+    if not parser.has_option('--config'):
+        group = parser.add_option_group("Configuration", description=(
+            "The project options are read from the [%s] section of the "
+            "tox.ini file or the setup.cfg file located in any parent folder "
+            "of the path(s) being processed.  Allowed options are: %s." %
+            (parser.prog, ', '.join(parser.config_options))))
+        group.add_option('--config', metavar='path', default=config_file,
+                         help="user config file location")
+    # Don't read the command line if the module is used as a library.
+    if not arglist and not parse_argv:
+        arglist = []
+    # If parse_argv is True and arglist is None, arguments are
+    # parsed from the command line (sys.argv)
+    (options, args) = parser.parse_args(arglist)
+    options.reporter = None
+
+    if options.ensure_value('testsuite', False):
+        args.append(options.testsuite)
+    elif not options.ensure_value('doctest', False):
+        if parse_argv and not args:
+            if options.diff or any(os.path.exists(name)
+                                   for name in PROJECT_CONFIG):
+                args = ['.']
+            else:
+                parser.error('input not specified')
+        options = read_config(options, args, arglist, parser)
+        options.reporter = parse_argv and options.quiet == 1 and FileReport
+
+    options.filename = _parse_multi_options(options.filename)
+    options.exclude = normalize_paths(options.exclude)
+    options.select = _parse_multi_options(options.select)
+    options.ignore = _parse_multi_options(options.ignore)
+
+    if options.diff:
+        options.reporter = DiffReport
+        stdin = stdin_get_value()
+        options.selected_lines = parse_udiff(stdin, options.filename, args[0])
+        args = sorted(options.selected_lines)
+
+    return options, args
+
+
+def _parse_multi_options(options, split_token=','):
+    r"""Split and strip and discard empties.
+
+    Turns the following:
+
+    A,
+    B,
+
+    into ["A", "B"]
+    """
+    if options:
+        return [o.strip() for o in options.split(split_token) if o.strip()]
+    else:
+        return options
+
+
+def _main():
+    """Parse options and run checks on Python source."""
+    import signal
+
+    # Handle "Broken pipe" gracefully
+    try:
+        signal.signal(signal.SIGPIPE, lambda signum, frame: sys.exit(1))
+    except AttributeError:
+        pass    # not supported on Windows
+
+    style_guide = StyleGuide(parse_argv=True)
+    options = style_guide.options
+
+    if options.doctest or options.testsuite:
+        from testsuite.support import run_tests
+        report = run_tests(style_guide)
+    else:
+        report = style_guide.check_files()
+
+    if options.statistics:
+        report.print_statistics()
+
+    if options.benchmark:
+        report.print_benchmark()
+
+    if options.testsuite and not options.quiet:
+        report.print_results()
+
+    if report.total_errors:
+        if options.count:
+            sys.stderr.write(str(report.total_errors) + '\n')
+        sys.exit(1)
+
+if __name__ == '__main__':
+    _main()
+#
+# eflag: noqa = M702
--- a/Plugins/CheckerPlugins/CodeStyleChecker/translations.py	Sun Sep 04 16:50:23 2016 +0200
+++ b/Plugins/CheckerPlugins/CodeStyleChecker/translations.py	Sun Sep 04 17:16:38 2016 +0200
@@ -17,243 +17,243 @@
 
 _messages = {
     "E101": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "indentation contains mixed spaces and tabs"),
     "E111": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "indentation is not a multiple of four"),
     "E112": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "expected an indented block"),
     "E113": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "unexpected indentation"),
     "E114": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "indentation is not a multiple of four (comment)"),
     "E115": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "expected an indented block (comment)"),
     "E116": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "unexpected indentation (comment)"),
     "E121": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "continuation line indentation is not a multiple of four"),
     "E122": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "continuation line missing indentation or outdented"),
     "E123": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "closing bracket does not match indentation of opening"
         " bracket's line"),
     "E124": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "closing bracket does not match visual indentation"),
     "E125": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "continuation line with same indent as next logical line"),
     "E126": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "continuation line over-indented for hanging indent"),
     "E127": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "continuation line over-indented for visual indent"),
     "E128": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "continuation line under-indented for visual indent"),
     "E129": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "visually indented line with same indent as next logical line"),
     "E131": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "continuation line unaligned for hanging indent"),
     "E133": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "closing bracket is missing indentation"),
     "W191": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "indentation contains tabs"),
     "E201": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "whitespace after '{0}'"),
     "E202": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "whitespace before '{0}'"),
     "E203": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "whitespace before '{0}'"),
     "E211": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "whitespace before '{0}'"),
     "E221": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "multiple spaces before operator"),
     "E222": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "multiple spaces after operator"),
     "E223": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "tab before operator"),
     "E224": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "tab after operator"),
     "E225": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "missing whitespace around operator"),
     "E226": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "missing whitespace around arithmetic operator"),
     "E227": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "missing whitespace around bitwise or shift operator"),
     "E228": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "missing whitespace around modulo operator"),
     "E231": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "missing whitespace after '{0}'"),
     "E241": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "multiple spaces after '{0}'"),
     "E242": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "tab after '{0}'"),
     "E251": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "unexpected spaces around keyword / parameter equals"),
     "E261": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "at least two spaces before inline comment"),
     "E262": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "inline comment should start with '# '"),
     "E265": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "block comment should start with '# '"),
     "E266": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "too many leading '#' for block comment"),
     "E271": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "multiple spaces after keyword"),
     "E272": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "multiple spaces before keyword"),
     "E273": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "tab after keyword"),
     "E274": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "tab before keyword"),
     "E275": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "missing whitespace after keyword"),
     "W291": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "trailing whitespace"),
     "W292": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "no newline at end of file"),
     "W293": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "blank line contains whitespace"),
     "E301": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "expected 1 blank line, found 0"),
     "E302": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "expected 2 blank lines, found {0}"),
     "E303": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "too many blank lines ({0})"),
     "E304": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "blank lines found after function decorator"),
     "E305": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "expected 2 blank lines after class or function definition,"
         " found {0}"),
     "E306": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "expected 1 blank line before a nested definition, found 0"),
     "W391": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "blank line at end of file"),
     "E401": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "multiple imports on one line"),
     "E402": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "module level import not at top of file"),
     "E501": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "line too long ({0} > {1} characters)"),
     "E502": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "the backslash is redundant between brackets"),
     "W503": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "line break before binary operator"),
     "W601": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         ".has_key() is deprecated, use 'in'"),
     "W602": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "deprecated form of raising exception"),
     "W603": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "'<>' is deprecated, use '!='"),
     "W604": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "backticks are deprecated, use 'repr()'"),
     "E701": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "multiple statements on one line (colon)"),
     "E702": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "multiple statements on one line (semicolon)"),
     "E703": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "statement ends with a semicolon"),
     "E704": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "multiple statements on one line (def)"),
     "E705": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "multiple statements on one line (async def)"),
     "E711": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "comparison to {0} should be {1}"),
     "E712": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "comparison to {0} should be {1}"),
     "E713": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "test for membership should be 'not in'"),
     "E714": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "test for object identity should be 'is not'"),
     "E721": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "do not compare types, use 'isinstance()'"),
     "E731": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "do not assign a lambda expression, use a def"),
     "E741": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "ambiguous variable name '{0}'"),
     "E742": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "ambiguous class definition '{0}'"),
     "E743": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "ambiguous function definition '{0}'"),
     "E901": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "{0}: {1}"),
     "E902": QCoreApplication.translate(
-        "pep8",
+        "pycodestyle",
         "{0}"),
 
     # DocStyleChecker messages
--- a/changelog	Sun Sep 04 16:50:23 2016 +0200
+++ b/changelog	Sun Sep 04 17:16:38 2016 +0200
@@ -8,6 +8,8 @@
 - Debugger
   -- added a debugger interface registry to allow debuggers being
      implemented as plug-ins
+  -- Python Debuggers:
+     --- changed the protocol to a JSONRPC style protocol to be more robust
   -- Ruby Debugger:
      --- removed the Ruby debugger (the interface doesn't work with recent
          Ruby versions anymore)
@@ -38,7 +40,7 @@
      with this version QtWebKit is no longer (officially) supported
 - Third Party packages
   -- updated Pygments to 2.1.3
-  -- updated pep8 to 1.7.0
+  -- updated pep8 to 2.1.0dev0 and renamed it to pycodestyle
   -- updated coverage.py to 4.1.0
   -- updated pyflakes to 1.2.3+
 
--- a/eric6.e4p	Sun Sep 04 16:50:23 2016 +0200
+++ b/eric6.e4p	Sun Sep 04 17:16:38 2016 +0200
@@ -518,7 +518,7 @@
     <Source>Plugins/CheckerPlugins/CodeStyleChecker/NamingStyleChecker.py</Source>
     <Source>Plugins/CheckerPlugins/CodeStyleChecker/__init__.py</Source>
     <Source>Plugins/CheckerPlugins/CodeStyleChecker/mccabe.py</Source>
-    <Source>Plugins/CheckerPlugins/CodeStyleChecker/pep8.py</Source>
+    <Source>Plugins/CheckerPlugins/CodeStyleChecker/pycodestyle.py</Source>
     <Source>Plugins/CheckerPlugins/CodeStyleChecker/translations.py</Source>
     <Source>Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheck.py</Source>
     <Source>Plugins/CheckerPlugins/SyntaxChecker/SyntaxCheckService.py</Source>
@@ -2493,7 +2493,7 @@
               <string>ExcludeFiles</string>
             </key>
             <value>
-              <string>*/ThirdParty/*, */coverage/*, */Ui_*.py, */Examples/*, */*_rc.py,*/pep8.py,*/pyflakes/checker.py,*/mccabe.py</string>
+              <string>*/ThirdParty/*, */coverage/*, */Ui_*.py, */Examples/*, */*_rc.py,*/pycodestyle.py,*/pyflakes/checker.py,*/mccabe.py</string>
             </value>
             <key>
               <string>ExcludeMessages</string>
--- a/i18n/eric6_cs.ts	Sun Sep 04 16:50:23 2016 +0200
+++ b/i18n/eric6_cs.ts	Sun Sep 04 17:16:38 2016 +0200
@@ -390,7 +390,7 @@
 <context>
     <name>AddBookmarkDialog</name>
     <message>
-        <location filename="../WebBrowser/Bookmarks/AddBookmarkDialog.ui" line="26"/>
+        <location filename="../WebBrowser/Bookmarks/AddBookmarkDialog.py" line="198"/>
         <source>Add Bookmark</source>
         <translation>Přidat záložku</translation>
     </message>
@@ -1777,7 +1777,7 @@
         <translation>Editovat &amp;adresu</translation>
     </message>
     <message>
-        <location filename="../WebBrowser/Bookmarks/BookmarksDialog.ui" line="75"/>
+        <location filename="../WebBrowser/Bookmarks/BookmarksDialog.py" line="169"/>
         <source>&amp;Delete</source>
         <translation>&amp;Smazat</translation>
     </message>
@@ -2470,12 +2470,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallTraceViewer.ui" line="99"/>
+        <location filename="../Debugger/CallTraceViewer.py" line="54"/>
         <source>From</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/CallTraceViewer.ui" line="104"/>
+        <location filename="../Debugger/CallTraceViewer.py" line="54"/>
         <source>To</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2631,7 +2631,7 @@
         <translation>Stisknutím zrušit sdílený editor</translation>
     </message>
     <message>
-        <location filename="../Cooperation/ChatWidget.ui" line="230"/>
+        <location filename="../Cooperation/ChatWidget.py" line="513"/>
         <source>Clear</source>
         <translation>Vyčistit</translation>
     </message>
@@ -2929,7 +2929,7 @@
 <context>
     <name>ClickToFlashWhitelistDialog</name>
     <message>
-        <location filename="../Helpviewer/WebPlugins/ClickToFlash/ClickToFlashWhitelistDialog.ui" line="14"/>
+        <location filename="../Helpviewer/WebPlugins/ClickToFlash/ClickToFlashWhitelistDialog.py" line="54"/>
         <source>ClickToFlash Whitelist</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3544,147 +3544,147 @@
 <context>
     <name>CodeStyleFixer</name>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="472"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="494"/>
         <source>Triple single quotes converted to triple double quotes.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="475"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="497"/>
         <source>Introductory quotes corrected to be {0}&quot;&quot;&quot;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="478"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="500"/>
         <source>Single line docstring put on one line.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="481"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="503"/>
         <source>Period added to summary line.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="508"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="530"/>
         <source>Blank line before function/method docstring removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="487"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="509"/>
         <source>Blank line inserted before class docstring.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="490"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="512"/>
         <source>Blank line inserted after class docstring.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="493"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="515"/>
         <source>Blank line inserted after docstring summary.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="496"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="518"/>
         <source>Blank line inserted after last paragraph of docstring.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="499"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="521"/>
         <source>Leading quotes put on separate line.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="502"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="524"/>
         <source>Trailing quotes put on separate line.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="505"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="527"/>
         <source>Blank line before class docstring removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="511"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="533"/>
         <source>Blank line after class docstring removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="514"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="536"/>
         <source>Blank line after function/method docstring removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="517"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="539"/>
         <source>Blank line after last paragraph removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="520"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="542"/>
         <source>Tab converted to 4 spaces.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="523"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="545"/>
         <source>Indentation adjusted to be a multiple of four.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="526"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="548"/>
         <source>Indentation of continuation line corrected.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="529"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="551"/>
         <source>Indentation of closing bracket corrected.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="532"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="554"/>
         <source>Missing indentation of continuation line corrected.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="535"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="557"/>
         <source>Closing bracket aligned to opening bracket.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="538"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="560"/>
         <source>Indentation level changed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="541"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="563"/>
         <source>Indentation level of hanging indentation changed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="544"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="566"/>
         <source>Visual indentation corrected.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="559"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="581"/>
         <source>Extraneous whitespace removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="556"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="578"/>
         <source>Missing whitespace added.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="562"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="584"/>
         <source>Whitespace around comment sign corrected.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="565"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="587"/>
         <source>One blank line inserted.</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="569"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="591"/>
         <source>%n blank line(s) inserted.</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -3693,7 +3693,7 @@
         </translation>
     </message>
     <message numerus="yes">
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="572"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="594"/>
         <source>%n superfluous lines removed</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -3702,77 +3702,77 @@
         </translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="576"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="598"/>
         <source>Superfluous blank lines removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="579"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="601"/>
         <source>Superfluous blank lines after function decorator removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="582"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="604"/>
         <source>Imports were put on separate lines.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="585"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="607"/>
         <source>Long lines have been shortened.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="588"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="610"/>
         <source>Redundant backslash in brackets removed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="594"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="616"/>
         <source>Compound statement corrected.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="597"/>
-        <source>Comparison to None/True/False corrected.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="600"/>
-        <source>&apos;{0}&apos; argument added.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="603"/>
-        <source>&apos;{0}&apos; argument removed.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="606"/>
-        <source>Whitespace stripped from end of line.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="609"/>
-        <source>newline added to end of file.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="612"/>
-        <source>Superfluous trailing blank lines removed from end of file.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="615"/>
-        <source>&apos;&lt;&gt;&apos; replaced by &apos;!=&apos;.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="619"/>
+        <source>Comparison to None/True/False corrected.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="622"/>
+        <source>&apos;{0}&apos; argument added.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="625"/>
+        <source>&apos;{0}&apos; argument removed.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="628"/>
+        <source>Whitespace stripped from end of line.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="631"/>
+        <source>newline added to end of file.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="634"/>
+        <source>Superfluous trailing blank lines removed from end of file.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="637"/>
+        <source>&apos;&lt;&gt;&apos; replaced by &apos;!=&apos;.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="641"/>
         <source>Could not save the file! Skipping it. Reason: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="684"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="710"/>
         <source> no message defined for code &apos;{0}&apos;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4865,7 +4865,7 @@
         <translation type="unfinished">Doména:</translation>
     </message>
     <message>
-        <location filename="../WebBrowser/CookieJar/CookiesDialog.ui" line="223"/>
+        <location filename="../WebBrowser/CookieJar/CookiesDialog.py" line="177"/>
         <source>&lt;no cookie selected&gt;</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5353,7 +5353,7 @@
 <context>
     <name>DebugUI</name>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1752"/>
+        <location filename="../Debugger/DebugUI.py" line="1755"/>
         <source>Run Script</source>
         <translation>Spustit skript</translation>
     </message>
@@ -5373,7 +5373,7 @@
         <translation>&lt;b&gt;Spustit skript&lt;/b&gt;&lt;p&gt;Nastavení parametrů příkazové řádky a spuštění skriptu bez debugeru. Pokud jsou v souboru neuložené změny, měly by se nejdříve uložit.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1767"/>
+        <location filename="../Debugger/DebugUI.py" line="1770"/>
         <source>Run Project</source>
         <translation>Spustit projekt</translation>
     </message>
@@ -5473,7 +5473,7 @@
         <translation>&lt;b&gt;Profilovat projekt&lt;/b&gt;&lt;p&gt;Nastavení parametrů příkazové řádky a spuštění projektu s profilováním kódu. Pokud jsou v projektu neuložené změny, měly by se nejdříve uložit.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1874"/>
+        <location filename="../Debugger/DebugUI.py" line="1877"/>
         <source>Debug Script</source>
         <translation>Debugovat skript</translation>
     </message>
@@ -5493,7 +5493,7 @@
         <translation>&lt;b&gt;Debugovat skript&lt;/b&gt;&lt;p&gt;Nastavení parametrů příkazové řádky a aktuální řádky jako první python příkaz v aktuálním editačním okně. Pokud jsou ve skriptu neuložené změny, měly by se nejdříve uložit.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1889"/>
+        <location filename="../Debugger/DebugUI.py" line="1892"/>
         <source>Debug Project</source>
         <translation>Debugovat projekt</translation>
     </message>
@@ -5811,52 +5811,52 @@
         <translation>Debug</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1061"/>
+        <location filename="../Debugger/DebugUI.py" line="1064"/>
         <source>The program being debugged contains an unspecified syntax error.</source>
         <translation>Program, který je právě debugován, obsahuje nespecifikovanou syntaktickou chybu.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1098"/>
+        <location filename="../Debugger/DebugUI.py" line="1101"/>
         <source>An unhandled exception occured. See the shell window for details.</source>
         <translation>Objevila se neošetřená výjimka. Detaily naleznete v shell okně.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1217"/>
+        <location filename="../Debugger/DebugUI.py" line="1220"/>
         <source>The program being debugged has terminated unexpectedly.</source>
         <translation>Debugovaný program byl neočekávaně ukončen.</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1286"/>
+        <location filename="../Debugger/DebugUI.py" line="1289"/>
         <source>Breakpoint Condition Error</source>
         <translation>Chyba v podmíněném breakpointu</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1527"/>
+        <location filename="../Debugger/DebugUI.py" line="1530"/>
         <source>Coverage of Project</source>
         <translation>Pokrytí projektu</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1514"/>
+        <location filename="../Debugger/DebugUI.py" line="1517"/>
         <source>Coverage of Script</source>
         <translation>Pokrytí skriptu</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1767"/>
+        <location filename="../Debugger/DebugUI.py" line="1770"/>
         <source>There is no main script defined for the current project. Aborting</source>
         <translation>V aktuálním projektu není definován hlavní skript. Zrušeno</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1646"/>
+        <location filename="../Debugger/DebugUI.py" line="1649"/>
         <source>Profile of Project</source>
         <translation>Profilovat projekt</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1633"/>
+        <location filename="../Debugger/DebugUI.py" line="1636"/>
         <source>Profile of Script</source>
         <translation>Profilovat skript</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1889"/>
+        <location filename="../Debugger/DebugUI.py" line="1892"/>
         <source>There is no main script defined for the current project. No debugging possible.</source>
         <translation>V aktuálním projektu není definován hlavní skript. Debugování není možné.</translation>
     </message>
@@ -5881,12 +5881,12 @@
         <translation type="obsolete">&lt;b&gt;Vyhodnotit&lt;/b&gt;&lt;p&gt;Vyhodnotit výraz aktuálního kontextu debugovaného programu. Výsledek je zobrazen v shell okně.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1322"/>
+        <location filename="../Debugger/DebugUI.py" line="1325"/>
         <source>Watch Expression Error</source>
         <translation>Chyba sledovacího bodu</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1362"/>
+        <location filename="../Debugger/DebugUI.py" line="1365"/>
         <source>Watch expression already exists</source>
         <translation>Sledovací bod již existuje</translation>
     </message>
@@ -5933,42 +5933,42 @@
         <translation type="obsolete">&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; byl ukončen s exit statusem {1}.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1080"/>
+        <location filename="../Debugger/DebugUI.py" line="1083"/>
         <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; contains the syntax error &lt;b&gt;{1}&lt;/b&gt; at line &lt;b&gt;{2}&lt;/b&gt;, character &lt;b&gt;{3}&lt;/b&gt;.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Soubor &lt;b&gt;{0}&lt;/b&gt; na řádce &lt;b&gt;{1}&lt;/b&gt;, písmeno &lt;b&gt;{2}&lt;/b&gt;, obsahuje syntaktickou chybu &lt;b&gt;{3}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1139"/>
+        <location filename="../Debugger/DebugUI.py" line="1142"/>
         <source>&lt;p&gt;The debugged program raised the exception &lt;b&gt;{0}&lt;/b&gt;&lt;br&gt;&quot;&lt;b&gt;{1}&lt;/b&gt;&quot;&lt;br&gt;File: &lt;b&gt;{2}&lt;/b&gt;, Line: &lt;b&gt;{3}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Break here?&lt;/p&gt;</source>
         <translation>&lt;p&gt;Debugovaný program vyvolal výjimku  &lt;b&gt;{0}&lt;/b&gt;&lt;br&gt;&quot;&lt;b&gt;{1}&lt;/b&gt;&quot;&lt;br&gt;Soubor: &lt;b&gt;{2}&lt;/b&gt;, řádek: &lt;b&gt;{3}&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Zastavit zde?&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1154"/>
+        <location filename="../Debugger/DebugUI.py" line="1157"/>
         <source>&lt;p&gt;The debugged program raised the exception &lt;b&gt;{0}&lt;/b&gt;&lt;br&gt;&quot;&lt;b&gt;{1}&lt;/b&gt;&quot;&lt;/p&gt;</source>
         <translation>&lt;p&gt;Debugovaný program vyvolal výjimku  &lt;b&gt;{0}&lt;/b&gt;&lt;br&gt;&quot;&lt;b&gt;{1}&lt;/b&gt;&quot;&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1286"/>
+        <location filename="../Debugger/DebugUI.py" line="1289"/>
         <source>&lt;p&gt;The condition of the breakpoint &lt;b&gt;{0}, {1}&lt;/b&gt; contains a syntax error.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Podmínka breakpointu &lt;b&gt;{0}, {1}&lt;/b&gt; obsahuje syntaktickou chybu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1322"/>
+        <location filename="../Debugger/DebugUI.py" line="1325"/>
         <source>&lt;p&gt;The watch expression &lt;b&gt;{0}&lt;/b&gt; contains a syntax error.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Sledovací bod &lt;b&gt;{0}&lt;/b&gt; obsahuje syntaktickou chybu.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1352"/>
+        <location filename="../Debugger/DebugUI.py" line="1355"/>
         <source>&lt;p&gt;A watch expression &apos;&lt;b&gt;{0}&lt;/b&gt;&apos; already exists.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Sledovací bod &apos;&lt;b&gt;{0}&lt;/b&gt;&apos; již existuje.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1356"/>
+        <location filename="../Debugger/DebugUI.py" line="1359"/>
         <source>&lt;p&gt;A watch expression &apos;&lt;b&gt;{0}&lt;/b&gt;&apos; for the variable &lt;b&gt;{1}&lt;/b&gt; already exists.&lt;/p&gt;</source>
         <translation>&lt;p&gt;Sledovací bod &apos;&lt;b&gt;{0}&lt;/b&gt;&apos; pro proměnnou &lt;b&gt;{1}&lt;/b&gt; již existuje.&lt;/p&gt;</translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1030"/>
+        <location filename="../Debugger/DebugUI.py" line="1033"/>
         <source>Program terminated</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5988,51 +5988,51 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1203"/>
+        <location filename="../Debugger/DebugUI.py" line="1206"/>
         <source>&lt;p&gt;The program generate the signal &quot;{0}&quot;.&lt;br/&gt;File: &lt;b&gt;{1}&lt;/b&gt;, Line: &lt;b&gt;{2}&lt;/b&gt;&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="997"/>
+        <location filename="../Debugger/DebugUI.py" line="1000"/>
         <source>&lt;p&gt;Message: {0}&lt;/p&gt;</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1003"/>
+        <location filename="../Debugger/DebugUI.py" line="1006"/>
         <source>&lt;p&gt;The program has terminated with an exit status of {0}.&lt;/p&gt;{1}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1008"/>
+        <location filename="../Debugger/DebugUI.py" line="1011"/>
         <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; has terminated with an exit status of {1}.&lt;/p&gt;{2}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1016"/>
+        <location filename="../Debugger/DebugUI.py" line="1019"/>
         <source>Message: {0}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1023"/>
-        <source>The program has terminated with an exit status of {0}.
-{1}</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../Debugger/DebugUI.py" line="1026"/>
+        <source>The program has terminated with an exit status of {0}.
+{1}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Debugger/DebugUI.py" line="1029"/>
         <source>&quot;{0}&quot; has terminated with an exit status of {1}.
 {2}</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1035"/>
+        <location filename="../Debugger/DebugUI.py" line="1038"/>
         <source>The program has terminated with an exit status of {0}.
 {1}
 </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Debugger/DebugUI.py" line="1039"/>
+        <location filename="../Debugger/DebugUI.py" line="1042"/>
         <source>&quot;{0}&quot; has terminated with an exit status of {1}.
 {2}
 </source>
@@ -7259,197 +7259,197 @@
 <context>
     <name>DocStyleChecker</name>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="238"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="260"/>
         <source>module is missing a docstring</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="240"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="262"/>
         <source>public function/method is missing a docstring</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="243"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="265"/>
         <source>private function/method may be missing a docstring</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="246"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="268"/>
         <source>public class is missing a docstring</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="248"/>
-        <source>private class may be missing a docstring</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="250"/>
-        <source>docstring not surrounded by &quot;&quot;&quot;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="252"/>
-        <source>docstring containing \ not surrounded by r&quot;&quot;&quot;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="255"/>
-        <source>docstring containing unicode character not surrounded by u&quot;&quot;&quot;</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="258"/>
-        <source>one-liner docstring on multiple lines</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="260"/>
-        <source>docstring has wrong indentation</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="303"/>
-        <source>docstring summary does not end with a period</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="266"/>
-        <source>docstring summary is not in imperative mood (Does instead of Do)</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="270"/>
-        <source>docstring summary looks like a function&apos;s/method&apos;s signature</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="273"/>
-        <source>docstring does not mention the return value type</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="276"/>
-        <source>function/method docstring is separated by a blank line</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="279"/>
-        <source>class docstring is not preceded by a blank line</source>
+        <source>private class may be missing a docstring</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="272"/>
+        <source>docstring not surrounded by &quot;&quot;&quot;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="274"/>
+        <source>docstring containing \ not surrounded by r&quot;&quot;&quot;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="277"/>
+        <source>docstring containing unicode character not surrounded by u&quot;&quot;&quot;</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="280"/>
+        <source>one-liner docstring on multiple lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="282"/>
-        <source>class docstring is not followed by a blank line</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="337"/>
-        <source>docstring summary is not followed by a blank line</source>
+        <source>docstring has wrong indentation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="325"/>
+        <source>docstring summary does not end with a period</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="288"/>
-        <source>last paragraph of docstring is not followed by a blank line</source>
+        <source>docstring summary is not in imperative mood (Does instead of Do)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="292"/>
-        <source>private function/method is missing a docstring</source>
+        <source>docstring summary looks like a function&apos;s/method&apos;s signature</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="295"/>
+        <source>docstring does not mention the return value type</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="298"/>
+        <source>function/method docstring is separated by a blank line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="301"/>
+        <source>class docstring is not preceded by a blank line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="304"/>
+        <source>class docstring is not followed by a blank line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="359"/>
+        <source>docstring summary is not followed by a blank line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="310"/>
+        <source>last paragraph of docstring is not followed by a blank line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="314"/>
+        <source>private function/method is missing a docstring</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="317"/>
         <source>private class is missing a docstring</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="297"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="319"/>
         <source>leading quotes of docstring not on separate line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="300"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="322"/>
         <source>trailing quotes of docstring not on separate line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="307"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="329"/>
         <source>docstring does not contain a @return line but function/method returns something</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="311"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="333"/>
         <source>docstring contains a @return line but function/method doesn&apos;t return anything</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="315"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="337"/>
         <source>docstring does not contain enough @param/@keyparam lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="318"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="340"/>
         <source>docstring contains too many @param/@keyparam lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="321"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="343"/>
         <source>keyword only arguments must be documented with @keyparam lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="324"/>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="346"/>
         <source>order of @param/@keyparam lines does not match the function/method signature</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="349"/>
+        <source>class docstring is preceded by a blank line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="351"/>
+        <source>class docstring is followed by a blank line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="353"/>
+        <source>function/method docstring is preceded by a blank line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="356"/>
+        <source>function/method docstring is followed by a blank line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="362"/>
+        <source>last paragraph of docstring is followed by a blank line</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="365"/>
+        <source>docstring does not contain a @exception line but function/method raises an exception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="369"/>
+        <source>docstring contains a @exception line but function/method doesn&apos;t raise an exception</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="374"/>
+        <source>{0}: {1}</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="284"/>
+        <source>docstring does not contain a summary</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="327"/>
-        <source>class docstring is preceded by a blank line</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="329"/>
-        <source>class docstring is followed by a blank line</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="331"/>
-        <source>function/method docstring is preceded by a blank line</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="334"/>
-        <source>function/method docstring is followed by a blank line</source>
-        <tra