Index: third_party/pylint/checkers/misc.py |
diff --git a/third_party/pylint/checkers/misc.py b/third_party/pylint/checkers/misc.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7f09d404dd55774883a4464a18c5d1e339b2bc78 |
--- /dev/null |
+++ b/third_party/pylint/checkers/misc.py |
@@ -0,0 +1,77 @@ |
+# pylint: disable=W0511 |
+# 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., |
+# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
+""" Copyright (c) 2000-2010 LOGILAB S.A. (Paris, FRANCE). |
+ http://www.logilab.fr/ -- mailto:contact@logilab.fr |
+ |
+Check source code is ascii only or has an encoding declaration (PEP 263) |
+""" |
+ |
+import re, sys |
+ |
+from pylint.interfaces import IRawChecker |
+from pylint.checkers import BaseChecker |
+ |
+ |
+MSGS = { |
+ 'W0511': ('%s', |
+ 'Used when a warning note as FIXME or XXX is detected.'), |
+ } |
+ |
+class EncodingChecker(BaseChecker): |
+ """checks for: |
+ * warning notes in the code like FIXME, XXX |
+ * PEP 263: source code with non ascii character but no encoding declaration |
+ """ |
+ __implements__ = IRawChecker |
+ |
+ # configuration section name |
+ name = 'miscellaneous' |
+ msgs = MSGS |
+ |
+ options = (('notes', |
+ {'type' : 'csv', 'metavar' : '<comma separated values>', |
+ 'default' : ('FIXME', 'XXX', 'TODO'), |
+ 'help' : 'List of note tags to take in consideration, \ |
+separated by a comma.' |
+ }), |
+ ) |
+ |
+ def __init__(self, linter=None): |
+ BaseChecker.__init__(self, linter) |
+ |
+ def process_module(self, node): |
+ """inspect the source file to found encoding problem or fixmes like |
+ notes |
+ """ |
+ stream = node.file_stream |
+ stream.seek(0) # XXX may be removed with astng > 0.23 |
+ # warning notes in the code |
+ notes = [] |
+ for note in self.config.notes: |
+ notes.append(re.compile(note)) |
+ linenum = 1 |
+ for line in stream.readlines(): |
+ for note in notes: |
+ match = note.search(line) |
+ if match: |
+ self.add_message('W0511', args=line[match.start():-1], |
+ line=linenum) |
+ break |
+ linenum += 1 |
+ |
+ |
+ |
+def register(linter): |
+ """required method to auto register this checker""" |
+ linter.register_checker(EncodingChecker(linter)) |