Add an ability to specify max line length

Change-Id: I554b4a993b30462d454ef4984a9091c38365f9fa
Closes-Bug: #1842109
This commit is contained in:
Ayaz Salikhov 2019-08-30 19:51:08 +03:00 committed by Ian Wienand
parent 949a320cce
commit f5a24b097c
5 changed files with 38 additions and 12 deletions

View File

@ -59,8 +59,8 @@ def check_no_trailing_whitespace(line, report):
report.print_error(MESSAGES['E001'].msg, line) report.print_error(MESSAGES['E001'].msg, line)
def check_no_long_lines(line, report): def check_no_long_lines(line, report, max_line_length):
if len(line.rstrip("\r\n")) > 79: if len(line.rstrip("\r\n")) > max_line_length:
report.print_error(MESSAGES['E006'].msg, line) report.print_error(MESSAGES['E006'].msg, line)
@ -306,7 +306,7 @@ class BashateRun(object):
'error': error.replace(":", "", 1), 'error': error.replace(":", "", 1),
'line': line.rstrip('\n')}) 'line': line.rstrip('\n')})
def check_files(self, files, verbose): def check_files(self, files, verbose, max_line_length=79):
logical_line = "" logical_line = ""
token = False token = False
@ -401,7 +401,7 @@ class BashateRun(object):
# separatley. Stick with what works... # separatley. Stick with what works...
for line in logical_line: for line in logical_line:
check_no_trailing_whitespace(line, report) check_no_trailing_whitespace(line, report)
check_no_long_lines(line, report) check_no_long_lines(line, report, max_line_length)
check_for_do(line, report) check_for_do(line, report)
check_if_then(line, report) check_if_then(line, report)
check_function_decl(line, report) check_function_decl(line, report)
@ -431,6 +431,8 @@ def main(args=None):
help='Rules to always warn (rather than error)') help='Rules to always warn (rather than error)')
parser.add_argument('-e', '--error', parser.add_argument('-e', '--error',
help='Rules to always error (rather than warn)') help='Rules to always error (rather than warn)')
parser.add_argument('--max-line-length', default=79, type=int,
help='Max line length')
parser.add_argument('-v', '--verbose', action='store_true', default=False) parser.add_argument('-v', '--verbose', action='store_true', default=False)
parser.add_argument('--version', action='store_true', parser.add_argument('--version', action='store_true',
help='show bashate version number and exit', help='show bashate version number and exit',
@ -457,7 +459,7 @@ def main(args=None):
run.register_errors(opts.error) run.register_errors(opts.error)
try: try:
run.check_files(files, opts.verbose) run.check_files(files, opts.verbose, opts.max_line_length)
except IOError as e: except IOError as e:
print("bashate: %s" % e) print("bashate: %s" % e)
return 1 return 1

View File

@ -93,11 +93,11 @@ _messages = {
'long_msg': 'long_msg':
""" """
This check mimics the widely accepted convention from PEP8 and This check mimics the widely accepted convention from PEP8 and
many other places that lines longer than 79 columns can not many other places that lines longer than a standard terminal width
only cause problems when reading/writing code, but also often (default=79 columns) can not only cause problems when reading/writing
indicates a bad smell, e.g. too many levels of indentation due code, but also often indicates a bad smell, e.g. too many levels
to overly complex functions which require refactoring into of indentation due to overly complex functions which require
smaller chunks. refactoring into smaller chunks.
""", """,
'default': 'W' 'default': 'W'
}, },

View File

@ -0,0 +1,8 @@
#!/bin/bash
# lines longer than 10 columns give warnings
: 0123456789
: 1 2 3 4 5 6 7 8
: 012345

View File

@ -64,8 +64,11 @@ class TestBashate(base.TestCase):
result = bashate.main(['--verbose', result = bashate.main(['--verbose',
'/path/to/fileA', '/path/to/fileB']) '/path/to/fileA', '/path/to/fileB'])
m_run_obj.check_files.assert_called_with(['/path/to/fileA', m_run_obj.check_files.assert_called_with(
'/path/to/fileB'], True) ['/path/to/fileA', '/path/to/fileB'],
True,
79
)
expected_return = 1 expected_return = 1
self.assertEqual(expected_return, result) self.assertEqual(expected_return, result)
@ -176,6 +179,14 @@ class TestBashateSamples(base.TestCase):
self.assert_error_found('E006', 6) self.assert_error_found('E006', 6)
self.assert_error_found('E006', 8) self.assert_error_found('E006', 8)
def test_sample_E006_bad_custom_max_line_length(self):
test_files = ['bashate/tests/samples/E006_bad_custom_length.sh']
self.run.check_files(test_files, False, 10)
self.assertEqual(self.run.warning_count, 2)
self.assert_error_found('E006', 5)
self.assert_error_found('E006', 6)
def test_sample_E006_good(self): def test_sample_E006_good(self):
test_files = ['bashate/tests/samples/E006_good.sh'] test_files = ['bashate/tests/samples/E006_good.sh']
self.run.check_files(test_files, False) self.run.check_files(test_files, False)

View File

@ -0,0 +1,5 @@
---
features:
- |
Adds an option ``--max-line-length`` to specify the maximum length
of lines for check E006.