Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(232)

Unified Diff: third_party/pylint/epylint.py

Issue 719313003: Revert "pylint: upgrade to 1.3.1" (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/pylint/config.py ('k') | third_party/pylint/gui.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/pylint/epylint.py
diff --git a/third_party/pylint/epylint.py b/third_party/pylint/epylint.py
index beae481b818c50d123172f22be3ac2925bd42ea6..f6b16e7ac971a386eff2092396882e3320708f7a 100644
--- a/third_party/pylint/epylint.py
+++ b/third_party/pylint/epylint.py
@@ -1,19 +1,5 @@
+#!/usr/bin/env python
# -*- coding: utf-8; mode: python; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=python:et:sw=4:ts=4:sts=4
-# Copyright (c) 2003-2013 LOGILAB S.A. (Paris, FRANCE).
-# http://www.logilab.fr/ -- mailto:contact@logilab.fr
-#
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free Software
-# Foundation; either version 2 of the License, or (at your option) any later
-# version.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
"""Emacs and Flymake compatible Pylint.
This script is for integration with emacs and is compatible with flymake mode.
@@ -29,8 +15,7 @@ For example:
a/b/x.py
a/c/y.py
- - Then if y.py imports x as "from a.b import x" the following produces pylint
- errors
+ - Then if y.py imports x as "from a.b import x" the following produces pylint errors
cd a/c; pylint y.py
@@ -42,75 +27,75 @@ For example:
we are checking we need to go out of it to avoid these false positives.
-You may also use py_run to run pylint with desired options and get back (or not)
-its output.
+You may also use py_run to run pylint with desired options and get back (or not) its output.
"""
-import sys, os
-import os.path as osp
+import sys, os, re
from subprocess import Popen, PIPE
-def _get_env():
- '''Extracts the environment PYTHONPATH and appends the current sys.path to
- those.'''
- env = dict(os.environ)
- env['PYTHONPATH'] = os.pathsep.join(sys.path)
- return env
-def lint(filename, options=None):
+def lint(filename):
"""Pylint the given file.
- When run from emacs we will be in the directory of a file, and passed its
- filename. If this file is part of a package and is trying to import other
- modules from within its own package or another package rooted in a directory
- below it, pylint will classify it as a failed import.
+ When run from emacs we will be in the directory of a file, and passed its filename.
+ If this file is part of a package and is trying to import other modules from within
+ its own package or another package rooted in a directory below it, pylint will classify
+ it as a failed import.
- To get around this, we traverse down the directory tree to find the root of
- the package this module is in. We then invoke pylint from this directory.
+ To get around this, we traverse down the directory tree to find the root of the package this
+ module is in. We then invoke pylint from this directory.
- Finally, we must correct the filenames in the output generated by pylint so
- Emacs doesn't become confused (it will expect just the original filename,
- while pylint may extend it with extra directories if we've traversed down
- the tree)
+ Finally, we must correct the filenames in the output generated by pylint so Emacs doesn't
+ become confused (it will expect just the original filename, while pylint may extend it with
+ extra directories if we've traversed down the tree)
"""
# traverse downwards until we are out of a python package
- full_path = osp.abspath(filename)
- parent_path = osp.dirname(full_path)
- child_path = osp.basename(full_path)
+ fullPath = os.path.abspath(filename)
+ parentPath, childPath = os.path.dirname(fullPath), os.path.basename(fullPath)
- while parent_path != "/" and osp.exists(osp.join(parent_path, '__init__.py')):
- child_path = osp.join(osp.basename(parent_path), child_path)
- parent_path = osp.dirname(parent_path)
+ while parentPath != "/" and os.path.exists(os.path.join(parentPath, '__init__.py')):
+ childPath = os.path.join(os.path.basename(parentPath), childPath)
+ parentPath = os.path.dirname(parentPath)
# Start pylint
- # Ensure we use the python and pylint associated with the running epylint
- from pylint import lint as lint_mod
- lint_path = lint_mod.__file__
- options = options or ['--disable=C,R,I']
- cmd = [sys.executable, lint_path] + options + [
- '--msg-template', '{path}:{line}: {category} ({msg_id}, {symbol}, {obj}) {msg}',
- '-r', 'n', child_path]
- process = Popen(cmd, stdout=PIPE, cwd=parent_path, env=_get_env(),
- universal_newlines=True)
-
- for line in process.stdout:
+ process = Popen('pylint -f parseable -r n --disable=C,R,I "%s"' %
+ childPath, shell=True, stdout=PIPE, stderr=PIPE,
+ cwd=parentPath)
+ p = process.stdout
+
+ # The parseable line format is '%(path)s:%(line)s: [%(sigle)s%(obj)s] %(msg)s'
+ # NOTE: This would be cleaner if we added an Emacs reporter to pylint.reporters.text ..
+ regex = re.compile(r"\[(?P<type>[WE])(?P<remainder>.*?)\]")
+
+ def _replacement(mObj):
+ "Alter to include 'Error' or 'Warning'"
+ if mObj.group("type") == "W":
+ replacement = "Warning"
+ else:
+ replacement = "Error"
+ # replace as "Warning (W0511, funcName): Warning Text"
+ return "%s (%s%s):" % (replacement, mObj.group("type"), mObj.group("remainder"))
+
+ for line in p:
# remove pylintrc warning
if line.startswith("No config file found"):
continue
-
+ line = regex.sub(_replacement, line, 1)
# modify the file name thats output to reverse the path traversal we made
parts = line.split(":")
- if parts and parts[0] == child_path:
+ if parts and parts[0] == childPath:
line = ":".join([filename] + parts[1:])
print line,
- process.wait()
- return process.returncode
+ p.close()
+
+def Run():
+ lint(sys.argv[1])
def py_run(command_options='', return_std=False, stdout=None, stderr=None,
script='epylint'):
- """Run pylint from python
+ """Run pylint from python (needs Python >= 2.4).
``command_options`` is a string containing ``pylint`` command line options;
``return_std`` (boolean) indicates return of created standart output
@@ -152,24 +137,13 @@ def py_run(command_options='', return_std=False, stdout=None, stderr=None,
else:
stderr = sys.stderr
# Call pylint in a subprocess
- p = Popen(command_line, shell=True, stdout=stdout, stderr=stderr,
- env=_get_env(), universal_newlines=True)
+ p = Popen(command_line, shell=True, stdout=stdout, stderr=stderr)
p.wait()
# Return standart output and error
if return_std:
return (p.stdout, p.stderr)
-def Run():
- if len(sys.argv) == 1:
- print "Usage: %s <filename> [options]" % sys.argv[0]
- sys.exit(1)
- elif not osp.exists(sys.argv[1]):
- print "%s does not exist" % sys.argv[1]
- sys.exit(1)
- else:
- sys.exit(lint(sys.argv[1], sys.argv[2:]))
-
-
if __name__ == '__main__':
- Run()
+ lint(sys.argv[1])
+
« no previous file with comments | « third_party/pylint/config.py ('k') | third_party/pylint/gui.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698