import os from glob import glob import sys import unittest import pqclean import helpers additional_flags = [] def test_clang_tidy(): for scheme in pqclean.Scheme.all_schemes(): for implementation in scheme.implementations: if helpers.permit_test('linter', implementation): yield check_tidy, implementation @helpers.skip_windows() def check_tidy(implementation: pqclean.Implementation): helpers.ensure_available('clang-tidy') cfiles = implementation.cfiles() common_files = glob(os.path.join('..', 'common', '*.c')) (returncode, _) = helpers.run_subprocess( ['clang-tidy', '-quiet', '-header-filter=.*', *additional_flags, *cfiles, *common_files, '--', '-iquote', os.path.join('..', 'common'), '-iquote', implementation.path()], expected_returncode=None, ) # Detect and gracefully avoid segfaults if returncode == -11: raise unittest.SkipTest("clang-tidy segfaulted") else: assert returncode == 0, "Clang-tidy returned %d" % returncode if __name__ == "__main__": # allow a user to specify --fix-errors, to immediately fix errors if len(sys.argv) >= 2 and sys.argv[1] == '-fix-errors': additional_flags = ['-fix-errors'] sys.argv = sys.argv[0:1] + sys.argv[2:] try: import nose2 nose2.main() except ImportError: import nose nose.runmodule()