aboutsummaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2018-11-19 09:08:28 +0100
committerMartin Liska <marxin@gcc.gnu.org>2018-11-19 08:08:28 +0000
commitca44d7f40afa39b40cfa2ac85521a65d1743ef7a (patch)
tree27d3d936bfcef596eba6eeb87c09cc6cf26bbf89 /contrib
parent662076c9faa2a712196faa766482c79632091828 (diff)
Detect mixed usage of spaces and tabs.
2018-11-19 Martin Liska <mliska@suse.cz> * check_GNU_style_lib.py: Detect mixed usage of spaces and tabs. From-SVN: r266261
Diffstat (limited to 'contrib')
-rw-r--r--contrib/ChangeLog5
-rwxr-xr-xcontrib/check_GNU_style_lib.py29
2 files changed, 33 insertions, 1 deletions
diff --git a/contrib/ChangeLog b/contrib/ChangeLog
index 8984c1901e2..64dcdfcb76a 100644
--- a/contrib/ChangeLog
+++ b/contrib/ChangeLog
@@ -1,3 +1,8 @@
+2018-11-19 Martin Liska <mliska@suse.cz>
+
+ * check_GNU_style_lib.py: Detect mixed usage
+ of spaces and tabs.
+
2018-11-14 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* gcc_update (files_and_dependencies): Handle libphobos.
diff --git a/contrib/check_GNU_style_lib.py b/contrib/check_GNU_style_lib.py
index 63d0538aa57..ac3682fb2af 100755
--- a/contrib/check_GNU_style_lib.py
+++ b/contrib/check_GNU_style_lib.py
@@ -99,6 +99,18 @@ class SpacesCheck:
line.replace(self.expanded_tab, error_string(ws_char * ts)),
'blocks of 8 spaces should be replaced with tabs', i)
+class SpacesAndTabsMixedCheck:
+ def __init__(self):
+ self.re = re.compile('\ \t')
+
+ def check(self, filename, lineno, line):
+ stripped = line.lstrip()
+ start = line[:len(line) - len(stripped)]
+ if self.re.search(line):
+ return CheckError(filename, lineno,
+ error_string(start.replace('\t', ws_char * ts)) + line[len(start):],
+ 'a space should not precede a tab', 0)
+
class TrailingWhitespaceCheck:
def __init__(self):
self.re = re.compile('(\s+)$')
@@ -236,12 +248,27 @@ class TrailingWhitespaceTest(unittest.TestCase):
r = self.check.check('foo', 123, 'a = 123;\t')
self.assertIsNotNone(r)
+class SpacesAndTabsMixedTest(unittest.TestCase):
+ def setUp(self):
+ self.check = SpacesAndTabsMixedCheck()
+
+ def test_trailing_whitespace_check_basic(self):
+ r = self.check.check('foo', 123, ' \ta = 123;')
+ self.assertEqual('foo', r.filename)
+ self.assertEqual(0, r.column)
+ self.assertIsNotNone(r.console_error)
+ r = self.check.check('foo', 123, ' \t a = 123;')
+ self.assertIsNotNone(r.console_error)
+ r = self.check.check('foo', 123, '\t a = 123;')
+ self.assertIsNone(r)
+
def check_GNU_style_file(file, file_encoding, format):
checks = [LineLengthCheck(), SpacesCheck(), TrailingWhitespaceCheck(),
SentenceSeparatorCheck(), SentenceEndOfCommentCheck(),
SentenceDotEndCheck(), FunctionParenthesisCheck(),
SquareBracketCheck(), ClosingParenthesisCheck(),
- BracesOnSeparateLineCheck(), TrailinigOperatorCheck()]
+ BracesOnSeparateLineCheck(), TrailinigOperatorCheck(),
+ SpacesAndTabsMixedCheck()]
errors = []
patch = PatchSet(file, encoding=file_encoding)