Fixed #11181 (cppcheckdata.py: handle exception when ctu-info file is missing)
This commit is contained in:
parent
0d9bf03b5c
commit
514278e02b
158
addons/misra.py
158
addons/misra.py
|
@ -4443,92 +4443,96 @@ class MisraChecker:
|
||||||
def is_different_location(loc1, loc2):
|
def is_different_location(loc1, loc2):
|
||||||
return loc1['file'] != loc2['file'] or loc1['line'] != loc2['line']
|
return loc1['file'] != loc2['file'] or loc1['line'] != loc2['line']
|
||||||
|
|
||||||
for filename in ctu_info_files:
|
try:
|
||||||
for line in open(filename, 'rt'):
|
for filename in ctu_info_files:
|
||||||
if not line.startswith('{'):
|
for line in open(filename, 'rt'):
|
||||||
continue
|
if not line.startswith('{'):
|
||||||
|
continue
|
||||||
|
|
||||||
s = json.loads(line)
|
s = json.loads(line)
|
||||||
summary_type = s['summary']
|
summary_type = s['summary']
|
||||||
summary_data = s['data']
|
summary_data = s['data']
|
||||||
|
|
||||||
if summary_type == 'MisraTypedefInfo':
|
if summary_type == 'MisraTypedefInfo':
|
||||||
for new_typedef_info in summary_data:
|
for new_typedef_info in summary_data:
|
||||||
found = False
|
found = False
|
||||||
for old_typedef_info in all_typedef_info:
|
for old_typedef_info in all_typedef_info:
|
||||||
if old_typedef_info['name'] == new_typedef_info['name']:
|
if old_typedef_info['name'] == new_typedef_info['name']:
|
||||||
found = True
|
found = True
|
||||||
if is_different_location(old_typedef_info, new_typedef_info):
|
if is_different_location(old_typedef_info, new_typedef_info):
|
||||||
self.reportError(Location(old_typedef_info), 5, 6)
|
self.reportError(Location(old_typedef_info), 5, 6)
|
||||||
self.reportError(Location(new_typedef_info), 5, 6)
|
self.reportError(Location(new_typedef_info), 5, 6)
|
||||||
else:
|
else:
|
||||||
if new_typedef_info['used']:
|
if new_typedef_info['used']:
|
||||||
old_typedef_info['used'] = True
|
old_typedef_info['used'] = True
|
||||||
break
|
break
|
||||||
if not found:
|
if not found:
|
||||||
all_typedef_info.append(new_typedef_info)
|
all_typedef_info.append(new_typedef_info)
|
||||||
|
|
||||||
if summary_type == 'MisraTagName':
|
if summary_type == 'MisraTagName':
|
||||||
for new_tagname_info in summary_data:
|
for new_tagname_info in summary_data:
|
||||||
found = False
|
found = False
|
||||||
for old_tagname_info in all_tagname_info:
|
for old_tagname_info in all_tagname_info:
|
||||||
if old_tagname_info['name'] == new_tagname_info['name']:
|
if old_tagname_info['name'] == new_tagname_info['name']:
|
||||||
found = True
|
found = True
|
||||||
if is_different_location(old_tagname_info, new_tagname_info):
|
if is_different_location(old_tagname_info, new_tagname_info):
|
||||||
self.reportError(Location(old_tagname_info), 5, 7)
|
self.reportError(Location(old_tagname_info), 5, 7)
|
||||||
self.reportError(Location(new_tagname_info), 5, 7)
|
self.reportError(Location(new_tagname_info), 5, 7)
|
||||||
else:
|
else:
|
||||||
if new_tagname_info['used']:
|
if new_tagname_info['used']:
|
||||||
old_tagname_info['used'] = True
|
old_tagname_info['used'] = True
|
||||||
break
|
break
|
||||||
if not found:
|
if not found:
|
||||||
all_tagname_info.append(new_tagname_info)
|
all_tagname_info.append(new_tagname_info)
|
||||||
|
|
||||||
if summary_type == 'MisraMacro':
|
if summary_type == 'MisraMacro':
|
||||||
for new_macro in summary_data:
|
for new_macro in summary_data:
|
||||||
found = False
|
found = False
|
||||||
for old_macro in all_macro_info:
|
for old_macro in all_macro_info:
|
||||||
if old_macro['name'] == new_macro['name']:
|
if old_macro['name'] == new_macro['name']:
|
||||||
found = True
|
found = True
|
||||||
if new_macro['used']:
|
if new_macro['used']:
|
||||||
old_macro['used'] = True
|
old_macro['used'] = True
|
||||||
break
|
break
|
||||||
if not found:
|
if not found:
|
||||||
all_macro_info.append(new_macro)
|
all_macro_info.append(new_macro)
|
||||||
|
|
||||||
if summary_type == 'MisraExternalIdentifiers':
|
if summary_type == 'MisraExternalIdentifiers':
|
||||||
for s in summary_data:
|
for s in summary_data:
|
||||||
is_declaration = s['decl']
|
is_declaration = s['decl']
|
||||||
if is_declaration:
|
if is_declaration:
|
||||||
all_external_identifiers = all_external_identifiers_decl
|
all_external_identifiers = all_external_identifiers_decl
|
||||||
else:
|
else:
|
||||||
all_external_identifiers = all_external_identifiers_def
|
all_external_identifiers = all_external_identifiers_def
|
||||||
|
|
||||||
name = s['name']
|
name = s['name']
|
||||||
if name in all_external_identifiers and is_different_location(s, all_external_identifiers[name]):
|
if name in all_external_identifiers and is_different_location(s, all_external_identifiers[name]):
|
||||||
num = 5 if is_declaration else 6
|
num = 5 if is_declaration else 6
|
||||||
self.reportError(Location(s), 8, num)
|
self.reportError(Location(s), 8, num)
|
||||||
self.reportError(Location(all_external_identifiers[name]), 8, num)
|
self.reportError(Location(all_external_identifiers[name]), 8, num)
|
||||||
all_external_identifiers[name] = s
|
all_external_identifiers[name] = s
|
||||||
|
|
||||||
if summary_type == 'MisraInternalIdentifiers':
|
if summary_type == 'MisraInternalIdentifiers':
|
||||||
for s in summary_data:
|
for s in summary_data:
|
||||||
if s['name'] in all_internal_identifiers:
|
if s['name'] in all_internal_identifiers:
|
||||||
if not s['inlinefunc'] or s['file'] != all_internal_identifiers[s['name']]['file']:
|
if not s['inlinefunc'] or s['file'] != all_internal_identifiers[s['name']]['file']:
|
||||||
self.reportError(Location(s), 5, 9)
|
self.reportError(Location(s), 5, 9)
|
||||||
self.reportError(Location(all_internal_identifiers[s['name']]), 5, 9)
|
self.reportError(Location(all_internal_identifiers[s['name']]), 5, 9)
|
||||||
all_internal_identifiers[s['name']] = s
|
all_internal_identifiers[s['name']] = s
|
||||||
|
|
||||||
if summary_type == 'MisraLocalIdentifiers':
|
if summary_type == 'MisraLocalIdentifiers':
|
||||||
for s in summary_data:
|
for s in summary_data:
|
||||||
all_local_identifiers[s['name']] = s
|
all_local_identifiers[s['name']] = s
|
||||||
|
|
||||||
if summary_type == 'MisraUsage':
|
if summary_type == 'MisraUsage':
|
||||||
for s in summary_data:
|
for s in summary_data:
|
||||||
if s['name'] in all_usage_files:
|
if s['name'] in all_usage_files:
|
||||||
all_usage_files[s['name']].append(s['file'])
|
all_usage_files[s['name']].append(s['file'])
|
||||||
else:
|
else:
|
||||||
all_usage_files[s['name']] = [s['file']]
|
all_usage_files[s['name']] = [s['file']]
|
||||||
|
|
||||||
|
except FileNotFoundError:
|
||||||
|
return
|
||||||
|
|
||||||
for ti in all_typedef_info:
|
for ti in all_typedef_info:
|
||||||
if not ti['used']:
|
if not ti['used']:
|
||||||
|
|
Loading…
Reference in New Issue