2017-07-02 00:07:00 +08:00
|
|
|
# See utils/checkpackagelib/readme.txt before editing this file.
|
2017-02-20 06:17:17 +08:00
|
|
|
|
2018-08-11 11:48:27 +08:00
|
|
|
from checkpackagelib.base import _CheckFunction
|
2017-02-20 06:17:17 +08:00
|
|
|
|
|
|
|
|
2017-02-20 06:17:18 +08:00
|
|
|
class ConsecutiveEmptyLines(_CheckFunction):
|
|
|
|
def before(self):
|
|
|
|
self.lastline = "non empty"
|
|
|
|
|
|
|
|
def check_line(self, lineno, text):
|
|
|
|
if text.strip() == "" == self.lastline.strip():
|
|
|
|
return ["{}:{}: consecutive empty lines"
|
|
|
|
.format(self.filename, lineno)]
|
|
|
|
self.lastline = text
|
|
|
|
|
|
|
|
|
|
|
|
class EmptyLastLine(_CheckFunction):
|
|
|
|
def before(self):
|
|
|
|
self.lastlineno = 0
|
|
|
|
self.lastline = "non empty"
|
|
|
|
|
|
|
|
def check_line(self, lineno, text):
|
|
|
|
self.lastlineno = lineno
|
|
|
|
self.lastline = text
|
|
|
|
|
|
|
|
def after(self):
|
|
|
|
if self.lastline.strip() == "":
|
|
|
|
return ["{}:{}: empty line at end of file"
|
|
|
|
.format(self.filename, self.lastlineno)]
|
|
|
|
|
|
|
|
|
2017-02-20 06:17:17 +08:00
|
|
|
class NewlineAtEof(_CheckFunction):
|
|
|
|
def before(self):
|
|
|
|
self.lastlineno = 0
|
|
|
|
self.lastline = "\n"
|
|
|
|
|
|
|
|
def check_line(self, lineno, text):
|
|
|
|
self.lastlineno = lineno
|
|
|
|
self.lastline = text
|
|
|
|
|
|
|
|
def after(self):
|
|
|
|
if self.lastline == self.lastline.rstrip("\r\n"):
|
|
|
|
return ["{}:{}: missing newline at end of file"
|
|
|
|
.format(self.filename, self.lastlineno),
|
|
|
|
self.lastline]
|
2017-02-20 06:17:18 +08:00
|
|
|
|
|
|
|
|
|
|
|
class TrailingSpace(_CheckFunction):
|
|
|
|
def check_line(self, lineno, text):
|
|
|
|
line = text.rstrip("\r\n")
|
|
|
|
if line != line.rstrip():
|
|
|
|
return ["{}:{}: line contains trailing whitespace"
|
|
|
|
.format(self.filename, lineno),
|
|
|
|
text]
|
2019-05-09 01:34:27 +08:00
|
|
|
|
2019-05-20 05:15:28 +08:00
|
|
|
|
2019-05-09 01:34:27 +08:00
|
|
|
class Utf8Characters(_CheckFunction):
|
|
|
|
def is_ascii(self, s):
|
|
|
|
try:
|
|
|
|
return all(ord(c) < 128 for c in s)
|
|
|
|
except TypeError:
|
|
|
|
return False
|
|
|
|
|
|
|
|
def check_line(self, lineno, text):
|
|
|
|
if not self.is_ascii(text):
|
|
|
|
return ["{}:{}: line contains UTF-8 characters"
|
|
|
|
.format(self.filename, lineno),
|
|
|
|
text]
|