summaryrefslogtreecommitdiff
path: root/Tools/Scripts/webkitpy/style/checkers/python.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/Scripts/webkitpy/style/checkers/python.py')
-rw-r--r--Tools/Scripts/webkitpy/style/checkers/python.py129
1 files changed, 0 insertions, 129 deletions
diff --git a/Tools/Scripts/webkitpy/style/checkers/python.py b/Tools/Scripts/webkitpy/style/checkers/python.py
deleted file mode 100644
index 2066d9d51..000000000
--- a/Tools/Scripts/webkitpy/style/checkers/python.py
+++ /dev/null
@@ -1,129 +0,0 @@
-# Copyright (C) 2010 Chris Jerdonek (cjerdonek@webkit.org)
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR
-# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-"""Supports checking WebKit style in Python files."""
-
-import re
-from StringIO import StringIO
-
-from webkitpy.common.system.filesystem import FileSystem
-from webkitpy.common.webkit_finder import WebKitFinder
-from webkitpy.thirdparty.autoinstalled import pep8
-from webkitpy.thirdparty.autoinstalled.pylint import lint
-from webkitpy.thirdparty.autoinstalled.pylint.reporters.text import ParseableTextReporter
-
-
-class PythonChecker(object):
- """Processes text lines for checking style."""
- def __init__(self, file_path, handle_style_error):
- self._file_path = file_path
- self._handle_style_error = handle_style_error
-
- def check(self, lines):
- self._check_pep8(lines)
- self._check_pylint(lines)
-
- def _check_pep8(self, lines):
- # Initialize pep8.options, which is necessary for
- # Checker.check_all() to execute.
- pep8.process_options(arglist=[self._file_path])
-
- pep8_checker = pep8.Checker(self._file_path)
-
- def _pep8_handle_error(line_number, offset, text, check):
- # FIXME: Incorporate the character offset into the error output.
- # This will require updating the error handler __call__
- # signature to include an optional "offset" parameter.
- pep8_code = text[:4]
- pep8_message = text[5:]
-
- category = "pep8/" + pep8_code
-
- self._handle_style_error(line_number, category, 5, pep8_message)
-
- pep8_checker.report_error = _pep8_handle_error
- pep8_errors = pep8_checker.check_all()
-
- def _check_pylint(self, lines):
- pylinter = Pylinter()
-
- # FIXME: for now, we only report pylint errors, but we should be catching and
- # filtering warnings using the rules in style/checker.py instead.
- output = pylinter.run(['-E', self._file_path])
-
- lint_regex = re.compile('([^:]+):([^:]+): \[([^]]+)\] (.*)')
- for error in output.getvalue().splitlines():
- match_obj = lint_regex.match(error)
- assert(match_obj)
- line_number = int(match_obj.group(2))
- category_and_method = match_obj.group(3).split(', ')
- category = 'pylint/' + (category_and_method[0])
- if len(category_and_method) > 1:
- message = '[%s] %s' % (category_and_method[1], match_obj.group(4))
- else:
- message = match_obj.group(4)
- self._handle_style_error(line_number, category, 5, message)
-
-
-class Pylinter(object):
- # We filter out these messages because they are bugs in pylint that produce false positives.
- # FIXME: Does it make sense to combine these rules with the rules in style/checker.py somehow?
- FALSE_POSITIVES = [
- # possibly http://www.logilab.org/ticket/98613 ?
- "Instance of 'Popen' has no 'poll' member",
- "Instance of 'Popen' has no 'returncode' member",
- "Instance of 'Popen' has no 'stdin' member",
- "Instance of 'Popen' has no 'stdout' member",
- "Instance of 'Popen' has no 'stderr' member",
- "Instance of 'Popen' has no 'wait' member",
- "Instance of 'Popen' has no 'pid' member",
- ]
-
- def __init__(self):
- self._pylintrc = WebKitFinder(FileSystem()).path_from_webkit_base('Tools', 'Scripts', 'webkitpy', 'pylintrc')
-
- def run(self, argv):
- output = _FilteredStringIO(self.FALSE_POSITIVES)
- lint.Run(['--rcfile', self._pylintrc] + argv, reporter=ParseableTextReporter(output=output), exit=False)
- return output
-
-
-class _FilteredStringIO(StringIO):
- def __init__(self, bad_messages):
- StringIO.__init__(self)
- self.dropped_last_msg = False
- self.bad_messages = bad_messages
-
- def write(self, msg=''):
- if not self._filter(msg):
- StringIO.write(self, msg)
-
- def _filter(self, msg):
- if any(bad_message in msg for bad_message in self.bad_messages):
- self.dropped_last_msg = True
- return True
- if self.dropped_last_msg:
- # We drop the newline after a dropped message as well.
- self.dropped_last_msg = False
- if msg == '\n':
- return True
- return False