Check scripts: split issues into errors and warnings

For CI, will now return error codes only for those issues
that are definitely bugs that will require fixing. i.e.

- if the type is not compatible with the call

- if a TFS is (case-sensitively) identical to a tfs.c entrywq
This commit is contained in:
Martin Mathieson 2021-07-31 16:06:32 +01:00
parent 52128bcca6
commit 6d02f1dcf9
2 changed files with 34 additions and 22 deletions

View File

@ -104,11 +104,13 @@ def findDissectorFilesInFolder(folder):
files.append(filename)
return files
issues_found = 0
warnings_found = 0
errors_found = 0
# Check the given dissector file.
def checkFile(filename, tfs_items, look_for_common=False):
global issues_found
global warnings_found
global errors_found
# Check file exists - e.g. may have been deleted in a recent commit.
if not os.path.exists(filename):
@ -132,7 +134,10 @@ def checkFile(filename, tfs_items, look_for_common=False):
if found:
print(filename, i, "- could have used", t, 'from tfs.c instead: ', tfs_items[t],
'' if exact_case else ' (capitalisation differs)')
issues_found += 1
if exact_case:
errors_found += 1
else:
warnings_found += 1
break
if not found:
if look_for_common:
@ -216,7 +221,10 @@ for f in files:
# Show summary.
print(issues_found, 'issues found')
print(warnings_found, 'warnings found')
if errors_found:
print(errors_found, 'errors found')
exit(1)
if args.common:
# Looking for items that could potentially be moved to tfs.c

View File

@ -34,7 +34,8 @@ def signal_handler(sig, frame):
signal.signal(signal.SIGINT, signal_handler)
issues_found = 0
warnings_found = 0
errors_found = 0
# A call is an individual call to an API we are interested in.
# Internal to APICheck below.
@ -84,8 +85,8 @@ class APICheck:
' with type ' + items[call.hf_name].item_type)
print(' (allowed types are', self.allowed_types, ')\n')
# Inc global count of issues found.
global issues_found
issues_found += 1
global errors_found
errors_found += 1
class ProtoTreeAddItemCheck(APICheck):
@ -143,8 +144,8 @@ class ProtoTreeAddItemCheck(APICheck):
'proto_tree_add_item called for', call.hf_name, ' - ',
'item type is', items[call.hf_name].item_type, 'but call has len', call.length)
global issues_found
issues_found += 1
global warnings_found
warnings_found += 1
@ -208,11 +209,11 @@ class Item:
if check_consecutive:
if Item.previousItem and Item.previousItem.filter == filter:
if label != Item.previousItem.label:
print('Warn: ' + filename + ': - filter "' + filter +
print('Warning: ' + filename + ': - filter "' + filter +
'" appears consecutively - labels are "' + Item.previousItem.label + '" and "' + label + '"')
if Item.previousItem and self.mask_value and (Item.previousItem.mask_value == self.mask_value):
if label != Item.previousItem.label:
print('Warn: ' + filename + ': - mask ' + self.mask +
print('Warning: ' + filename + ': - mask ' + self.mask +
' appears consecutively - labels are "' + Item.previousItem.label + '" and "' + label + '"')
Item.previousItem = self
@ -291,8 +292,8 @@ class Item:
# N.B. No call, so no line number.
print(self.filename + ':', 'filter=', self.filter, self.item_type, 'so field_width=', field_width,
'but mask is', mask, 'which is', mask_width, 'bits wide!')
global issues_found
issues_found += 1
global warnings_found
warnings_found += 1
# Now, any more zero set bits are an error!
if self.filter in known_non_contiguous_fields or self.filter.startswith('rtpmidi'):
@ -323,32 +324,32 @@ class Item:
# all lined up as part of the same word may make it clearer. But some cases have been found
# where the grouping does not seem to be natural..
print('Warning: ', self.filename, 'filter=', self.filter, ' - mask with leading or trailing 0 bytes suggests field', self.item_type, 'may be wider than necessary?', mask)
global issues_found
issues_found += 1
global warnings_found
warnings_found += 1
def check_num_digits(self, mask):
if mask.startswith('0x') and len(mask) > 3:
global issues_found
global warnings_found
if len(mask) % 2:
print('Warning: ', self.filename, 'filter=', self.filter, ' - mask has odd number of digits', mask,
'expected max for', self.item_type, 'is', int(self.get_field_width_in_bits()/4))
issues_found += 1
warnings_found += 1
if self.item_type in field_widths:
if len(mask)-2 > self.get_field_width_in_bits()/4:
print('Warning: ', self.filename, 'filter=', self.filter, self.mask, "with len is", len(mask)-2,
"but type", self.item_type, " indicates max of", int(self.get_field_width_in_bits()/4))
issues_found += 1
warnings_found += 1
else:
print('Warning: ', self.filename, 'filter=', self.filter, ' - item has type', self.item_type, 'but mask set:', mask)
issues_found += 1
warnings_found += 1
def check_digits_all_zeros(self, mask):
if mask.startswith('0x') and len(mask) > 3:
if mask[2:] == '0'*(len(mask)-2):
print('Warning: ', self.filename, 'filter=', self.filter, ' - item has all zeros - this is confusing! :', mask)
global issues_found
issues_found += 1
global warnings_found
warnings_found += 1
# These are APIs in proto.c that check a set of types at runtime and can print '.. is not of type ..' to the console
@ -596,4 +597,7 @@ for f in files:
checkFile(f, check_mask=args.mask, check_label=args.label, check_consecutive=args.consecutive)
# Show summary.
print(issues_found, 'issues found')
print(warnings_found, 'warnings')
if errors_found:
print(errors_found, 'errors')
exit(1)