Warning, file /graphics/digikam/project/reports/clangtidy_visualizer.py was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 #!/usr/bin/python
0002 
0003 # SPDX-FileCopyrightText: 2019      by Austin Hale, <ah at unc dot edu>
0004 # SPDX-FileCopyrightText: 2020-2024 by Gilles Caulier, <caulier dot gilles at gmail dot com>
0005 #
0006 # Export Clang tidy lint static analyzer output to HTML reports.
0007 #
0008 # SPDX-License-Identifier: BSD-3-Clause
0009 #
0010 
0011 import sys
0012 import argparse
0013 import urllib.request
0014 import re
0015 from bs4 import BeautifulSoup
0016 from datetime import datetime
0017 
0018 checks_list = ['[abseil-duration-addition]',
0019                '[abseil-duration-comparison]',
0020                '[abseil-duration-conversion-cast]',
0021                '[abseil-duration-division]',
0022                '[abseil-duration-factory-float]',
0023                '[abseil-duration-factory-scale]',
0024                '[abseil-duration-subtraction]',
0025                '[abseil-duration-unnecessary-conversion]',
0026                '[abseil-faster-strsplit-delimiter]',
0027                '[abseil-no-internal-dependencies]',
0028                '[abseil-no-namespace]',
0029                '[abseil-redundant-strcat-calls]',
0030                '[abseil-str-cat-append]',
0031                '[abseil-string-find-startswith]',
0032                '[abseil-time-comparison]',
0033                '[abseil-time-subtraction]',
0034                '[abseil-upgrade-duration-conversions]',
0035                '[android-cloexec-accept4]',
0036                '[android-cloexec-accept]',
0037                '[android-cloexec-creat]',
0038                '[android-cloexec-dup]',
0039                '[android-cloexec-epoll-create1]',
0040                '[android-cloexec-epoll-create]',
0041                '[android-cloexec-fopen]',
0042                '[android-cloexec-inotify-init1]',
0043                '[android-cloexec-inotify-init]',
0044                '[android-cloexec-memfd-create]',
0045                '[android-cloexec-open]',
0046                '[android-cloexec-pipe2]',
0047                '[android-cloexec-pipe]',
0048                '[android-cloexec-socket]',
0049                '[android-comparison-in-temp-failure-retry]',
0050                '[boost-use-to-string]',
0051                '[bugprone-argument-comment]',
0052                '[bugprone-assert-side-effect]',
0053                '[bugprone-bool-pointer-implicit-conversion]',
0054                '[bugprone-branch-clone]',
0055                '[bugprone-copy-constructor-init]',
0056                '[bugprone-dangling-handle]',
0057                '[bugprone-exception-escape]',
0058                '[bugprone-fold-init-type]',
0059                '[bugprone-forward-declaration-namespace]',
0060                '[bugprone-forwarding-reference-overload]',
0061                '[bugprone-inaccurate-erase]',
0062                '[bugprone-incorrect-roundings]',
0063                '[bugprone-integer-division]',
0064                '[bugprone-lambda-function-name]',
0065                '[bugprone-macro-parentheses]',
0066                '[bugprone-macro-repeated-side-effects]',
0067                '[bugprone-misplaced-operator-in-strlen-in-alloc]',
0068                '[bugprone-misplaced-widening-cast]',
0069                '[bugprone-move-forwarding-reference]',
0070                '[bugprone-multiple-statement-macro]',
0071                '[bugprone-parent-virtual-call]',
0072                '[bugprone-posix-return]',
0073                '[bugprone-sizeof-container]',
0074                '[bugprone-sizeof-expression]',
0075                '[bugprone-string-constructor]',
0076                '[bugprone-string-integer-assignment]',
0077                '[bugprone-string-literal-with-embedded-nul]',
0078                '[bugprone-suspicious-enum-usage]',
0079                '[bugprone-suspicious-memset-usage]',
0080                '[bugprone-suspicious-missing-comma]',
0081                '[bugprone-suspicious-semicolon]',
0082                '[bugprone-suspicious-string-compare]',
0083                '[bugprone-swapped-arguments]',
0084                '[bugprone-terminating-continue]',
0085                '[bugprone-throw-keyword-missing]',
0086                '[bugprone-too-small-loop-variable]',
0087                '[bugprone-undefined-memory-manipulation]',
0088                '[bugprone-undelegated-constructor]',
0089                '[bugprone-unhandled-self-assignment]',
0090                '[bugprone-unused-raii]',
0091                '[bugprone-unused-return-value]',
0092                '[bugprone-use-after-move]',
0093                '[bugprone-virtual-near-miss]',
0094                '[cert-dcl03-c]',
0095                '[cert-dcl16-c]',
0096                '[cert-dcl21-cpp]',
0097                '[cert-dcl50-cpp]',
0098                '[cert-dcl54-cpp]',
0099                '[cert-dcl58-cpp]',
0100                '[cert-dcl59-cpp]',
0101                '[cert-env33-c]',
0102                '[cert-err09-cpp]',
0103                '[cert-err34-c]',
0104                '[cert-err52-cpp]',
0105                '[cert-err58-cpp]',
0106                '[cert-err60-cpp]',
0107                '[cert-err61-cpp]',
0108                '[cert-fio38-c]',
0109                '[cert-flp30-c]',
0110                '[cert-msc30-c]',
0111                '[cert-msc32-c]',
0112                '[cert-msc50-cpp]',
0113                '[cert-msc51-cpp]',
0114                '[cert-oop11-cpp]',
0115                '[cert-oop54-cpp]',
0116                '[clang-analyzer-core.CallAndMessage]',
0117                '[clang-analyzer-core.DivideZero]',
0118                '[clang-analyzer-core.NonNullParamChecker]',
0119                '[clang-analyzer-core.NullDereference]',
0120                '[clang-analyzer-core.StackAddressEscape]',
0121                '[clang-analyzer-core.UndefinedBinaryOperatorResult]',
0122                '[clang-analyzer-core.VLASize]',
0123                '[clang-analyzer-core.uninitialized.ArraySubscript]',
0124                '[clang-analyzer-core.uninitialized.Assign]',
0125                '[clang-analyzer-core.uninitialized.Branch]',
0126                '[clang-analyzer-core.uninitialized.CapturedBlockVariable]',
0127                '[clang-analyzer-core.uninitialized.UndefReturn]',
0128                '[clang-analyzer-cplusplus.NewDeleteLeaks]',
0129                '[clang-analyzer-cplusplus.NewDelete]',
0130                '[clang-analyzer-deadcode.DeadStores]',
0131                '[clang-analyzer-nullability.NullPassedToNonnull]',
0132                '[clang-analyzer-nullability.NullReturnedFromNonnull]',
0133                '[clang-analyzer-nullability.NullableDereferenced]',
0134                '[clang-analyzer-nullability.NullablePassedToNonnull]',
0135                '[clang-analyzer-optin.mpi.MPI-Checker]',
0136                '[clang-analyzer-security.FloatLoopCounter]',
0137                '[clang-analyzer-security.insecureAPI.UncheckedReturn]',
0138                '[clang-analyzer-security.insecureAPI.getpw]',
0139                '[clang-analyzer-security.insecureAPI.gets]',
0140                '[clang-analyzer-security.insecureAPI.mkstemp]',
0141                '[clang-analyzer-security.insecureAPI.mktemp]',
0142                '[clang-analyzer-security.insecureAPI.rand]',
0143                '[clang-analyzer-security.insecureAPI.strcpy]',
0144                '[clang-analyzer-security.insecureAPI.vfork]',
0145                '[clang-analyzer-unix.API]',
0146                '[clang-analyzer-unix.MallocSizeof]',
0147                '[clang-analyzer-unix.Malloc]',
0148                '[clang-analyzer-unix.MismatchedDeallocator]',
0149                '[clang-analyzer-unix.Vfork]',
0150                '[clang-analyzer-unix.cstring.BadSizeArg]',
0151                '[clang-analyzer-unix.cstring.NullArg]',
0152                '[clang-diagnostic-#pragma-messages]',
0153                '[clang-diagnostic-#warnings]',
0154                '[clang-diagnostic-CFString-literal]',
0155                '[clang-diagnostic-CL4]',
0156                '[clang-diagnostic-IndependentClass-attribute]',
0157                '[clang-diagnostic-NSObject-attribute]',
0158                '[clang-diagnostic-abi]',
0159                '[clang-diagnostic-absolute-value]',
0160                '[clang-diagnostic-abstract-final-class]',
0161                '[clang-diagnostic-abstract-vbase-init]',
0162                '[clang-diagnostic-address-of-array-temporary]',
0163                '[clang-diagnostic-address-of-packed-member]',
0164                '[clang-diagnostic-address-of-temporary]',
0165                '[clang-diagnostic-address]',
0166                '[clang-diagnostic-aggregate-return]',
0167                '[clang-diagnostic-aligned-allocation-unavailable]',
0168                '[clang-diagnostic-all]',
0169                '[clang-diagnostic-alloca-with-align-alignof]',
0170                '[clang-diagnostic-ambiguous-delete]',
0171                '[clang-diagnostic-ambiguous-ellipsis]',
0172                '[clang-diagnostic-ambiguous-macro]',
0173                '[clang-diagnostic-ambiguous-member-template]',
0174                '[clang-diagnostic-analyzer-incompatible-plugin]',
0175                '[clang-diagnostic-anonymous-pack-parens]',
0176                '[clang-diagnostic-arc-bridge-casts-disallowed-in-nonarc]',
0177                '[clang-diagnostic-arc-maybe-repeated-use-of-weak]',
0178                '[clang-diagnostic-arc-non-pod-memaccess]',
0179                '[clang-diagnostic-arc-performSelector-leaks]',
0180                '[clang-diagnostic-arc-repeated-use-of-weak]',
0181                '[clang-diagnostic-arc-retain-cycles]',
0182                '[clang-diagnostic-arc-unsafe-retained-assign]',
0183                '[clang-diagnostic-arc]',
0184                '[clang-diagnostic-array-bounds-pointer-arithmetic]',
0185                '[clang-diagnostic-array-bounds]',
0186                '[clang-diagnostic-asm-ignored-qualifier]',
0187                '[clang-diagnostic-asm-operand-widths]',
0188                '[clang-diagnostic-asm]',
0189                '[clang-diagnostic-assign-enum]',
0190                '[clang-diagnostic-assume]',
0191                '[clang-diagnostic-at-protocol]',
0192                '[clang-diagnostic-atomic-memory-ordering]',
0193                '[clang-diagnostic-atomic-properties]',
0194                '[clang-diagnostic-atomic-property-with-user-defined-accessor]',
0195                '[clang-diagnostic-attribute-packed-for-bitfield]',
0196                '[clang-diagnostic-attributes]',
0197                '[clang-diagnostic-auto-disable-vptr-sanitizer]',
0198                '[clang-diagnostic-auto-import]',
0199                '[clang-diagnostic-auto-storage-class]',
0200                '[clang-diagnostic-auto-var-id]',
0201                '[clang-diagnostic-availability]',
0202                '[clang-diagnostic-backend-plugin]',
0203                '[clang-diagnostic-backslash-newline-escape]',
0204                '[clang-diagnostic-bad-function-cast]',
0205                '[clang-diagnostic-binary-literal]',
0206                '[clang-diagnostic-bind-to-temporary-copy]',
0207                '[clang-diagnostic-bitfield-constant-conversion]',
0208                '[clang-diagnostic-bitfield-enum-conversion]',
0209                '[clang-diagnostic-bitfield-width]',
0210                '[clang-diagnostic-bitwise-op-parentheses]',
0211                '[clang-diagnostic-block-capture-autoreleasing]',
0212                '[clang-diagnostic-bool-conversion]',
0213                '[clang-diagnostic-bool-conversions]',
0214                '[clang-diagnostic-braced-scalar-init]',
0215                '[clang-diagnostic-bridge-cast]',
0216                '[clang-diagnostic-builtin-macro-redefined]',
0217                '[clang-diagnostic-builtin-memcpy-chk-size]',
0218                '[clang-diagnostic-builtin-requires-header]',
0219                '[clang-diagnostic-c++-compat]',
0220                '[clang-diagnostic-c++0x-compat]',
0221                '[clang-diagnostic-c++0x-extensions]',
0222                '[clang-diagnostic-c++0x-narrowing]',
0223                '[clang-diagnostic-c++11-compat-deprecated-writable-strings]',
0224                '[clang-diagnostic-c++11-compat-pedantic]',
0225                '[clang-diagnostic-c++11-compat-reserved-user-defined-literal]',
0226                '[clang-diagnostic-c++11-compat]',
0227                '[clang-diagnostic-c++11-extensions]',
0228                '[clang-diagnostic-c++11-extra-semi]',
0229                '[clang-diagnostic-c++11-inline-namespace]',
0230                '[clang-diagnostic-c++11-long-long]',
0231                '[clang-diagnostic-c++11-narrowing]',
0232                '[clang-diagnostic-c++14-binary-literal]',
0233                '[clang-diagnostic-c++14-compat-pedantic]',
0234                '[clang-diagnostic-c++14-compat]',
0235                '[clang-diagnostic-c++14-extensions]',
0236                '[clang-diagnostic-c++17-compat-mangling]',
0237                '[clang-diagnostic-c++17-compat-pedantic]',
0238                '[clang-diagnostic-c++17-compat]',
0239                '[clang-diagnostic-c++17-extensions]',
0240                '[clang-diagnostic-c++1y-extensions]',
0241                '[clang-diagnostic-c++1z-compat-mangling]',
0242                '[clang-diagnostic-c++1z-compat]',
0243                '[clang-diagnostic-c++1z-extensions]',
0244                '[clang-diagnostic-c++2a-compat-pedantic]',
0245                '[clang-diagnostic-c++2a-compat]',
0246                '[clang-diagnostic-c++2a-extensions]',
0247                '[clang-diagnostic-c++98-c++11-c++14-c++17-compat-pedantic]',
0248                '[clang-diagnostic-c++98-c++11-c++14-c++17-compat]',
0249                '[clang-diagnostic-c++98-c++11-c++14-compat-pedantic]',
0250                '[clang-diagnostic-c++98-c++11-c++14-compat]',
0251                '[clang-diagnostic-c++98-c++11-compat-binary-literal]',
0252                '[clang-diagnostic-c++98-c++11-compat-pedantic]',
0253                '[clang-diagnostic-c++98-c++11-compat]',
0254                '[clang-diagnostic-c++98-compat-bind-to-temporary-copy]',
0255                '[clang-diagnostic-c++98-compat-local-type-template-args]',
0256                '[clang-diagnostic-c++98-compat-pedantic]',
0257                '[clang-diagnostic-c++98-compat-unnamed-type-template-args]',
0258                '[clang-diagnostic-c++98-compat]',
0259                '[clang-diagnostic-c11-extensions]',
0260                '[clang-diagnostic-c99-compat]',
0261                '[clang-diagnostic-c99-extensions]',
0262                '[clang-diagnostic-cast-align]',
0263                '[clang-diagnostic-cast-calling-convention]',
0264                '[clang-diagnostic-cast-of-sel-type]',
0265                '[clang-diagnostic-cast-qual]',
0266                '[clang-diagnostic-char-align]',
0267                '[clang-diagnostic-char-subscripts]',
0268                '[clang-diagnostic-clang-cl-pch]',
0269                '[clang-diagnostic-class-varargs]',
0270                '[clang-diagnostic-comma]',
0271                '[clang-diagnostic-comment]',
0272                '[clang-diagnostic-comments]',
0273                '[clang-diagnostic-compare-distinct-pointer-types]',
0274                '[clang-diagnostic-complex-component-init]',
0275                '[clang-diagnostic-conditional-type-mismatch]',
0276                '[clang-diagnostic-conditional-uninitialized]',
0277                '[clang-diagnostic-config-macros]',
0278                '[clang-diagnostic-constant-conversion]',
0279                '[clang-diagnostic-constant-logical-operand]',
0280                '[clang-diagnostic-constexpr-not-const]',
0281                '[clang-diagnostic-consumed]',
0282                '[clang-diagnostic-conversion-null]',
0283                '[clang-diagnostic-conversion]',
0284                '[clang-diagnostic-coroutine-missing-unhandled-exception]',
0285                '[clang-diagnostic-coroutine]',
0286                '[clang-diagnostic-covered-switch-default]',
0287                '[clang-diagnostic-cpp]',
0288                '[clang-diagnostic-cstring-format-directive]',
0289                '[clang-diagnostic-ctor-dtor-privacy]',
0290                '[clang-diagnostic-cuda-compat]',
0291                '[clang-diagnostic-custom-atomic-properties]',
0292                '[clang-diagnostic-dangling-else]',
0293                '[clang-diagnostic-dangling-field]',
0294                '[clang-diagnostic-dangling-initializer-list]',
0295                '[clang-diagnostic-date-time]',
0296                '[clang-diagnostic-dealloc-in-category]',
0297                '[clang-diagnostic-debug-compression-unavailable]',
0298                '[clang-diagnostic-declaration-after-statement]',
0299                '[clang-diagnostic-delegating-ctor-cycles]',
0300                '[clang-diagnostic-delete-incomplete]',
0301                '[clang-diagnostic-delete-non-virtual-dtor]',
0302                '[clang-diagnostic-deprecated-attributes]',
0303                '[clang-diagnostic-deprecated-declarations]',
0304                '[clang-diagnostic-deprecated-dynamic-exception-spec]',
0305                '[clang-diagnostic-deprecated-implementations]',
0306                '[clang-diagnostic-deprecated-increment-bool]',
0307                '[clang-diagnostic-deprecated-objc-isa-usage]',
0308                '[clang-diagnostic-deprecated-objc-pointer-introspection-performSelector]',
0309                '[clang-diagnostic-deprecated-objc-pointer-introspection]',
0310                '[clang-diagnostic-deprecated-register]',
0311                '[clang-diagnostic-deprecated-writable-strings]',
0312                '[clang-diagnostic-deprecated]',
0313                '[clang-diagnostic-direct-ivar-access]',
0314                '[clang-diagnostic-disabled-macro-expansion]',
0315                '[clang-diagnostic-disabled-optimization]',
0316                '[clang-diagnostic-discard-qual]',
0317                '[clang-diagnostic-distributed-object-modifiers]',
0318                '[clang-diagnostic-div-by-zero]',
0319                '[clang-diagnostic-division-by-zero]',
0320                '[clang-diagnostic-dll-attribute-on-redeclaration]',
0321                '[clang-diagnostic-dllexport-explicit-instantiation-decl]',
0322                '[clang-diagnostic-dllimport-static-field-def]',
0323                '[clang-diagnostic-documentation-deprecated-sync]',
0324                '[clang-diagnostic-documentation-html]',
0325                '[clang-diagnostic-documentation-pedantic]',
0326                '[clang-diagnostic-documentation-unknown-command]',
0327                '[clang-diagnostic-documentation]',
0328                '[clang-diagnostic-dollar-in-identifier-extension]',
0329                '[clang-diagnostic-double-promotion]',
0330                '[clang-diagnostic-duplicate-decl-specifier]',
0331                '[clang-diagnostic-duplicate-enum]',
0332                '[clang-diagnostic-duplicate-method-arg]',
0333                '[clang-diagnostic-duplicate-method-match]',
0334                '[clang-diagnostic-duplicate-protocol]',
0335                '[clang-diagnostic-dynamic-class-memaccess]',
0336                '[clang-diagnostic-dynamic-exception-spec]',
0337                '[clang-diagnostic-effc++]',
0338                '[clang-diagnostic-embedded-directive]',
0339                '[clang-diagnostic-empty-body]',
0340                '[clang-diagnostic-empty-decomposition]',
0341                '[clang-diagnostic-empty-translation-unit]',
0342                '[clang-diagnostic-encode-type]',
0343                '[clang-diagnostic-endif-labels]',
0344                '[clang-diagnostic-enum-compare-switch]',
0345                '[clang-diagnostic-enum-compare]',
0346                '[clang-diagnostic-enum-conversion]',
0347                '[clang-diagnostic-enum-too-large]',
0348                '[clang-diagnostic-error]',
0349                '[clang-diagnostic-exceptions]',
0350                '[clang-diagnostic-exit-time-destructors]',
0351                '[clang-diagnostic-expansion-to-defined]',
0352                '[clang-diagnostic-explicit-initialize-call]',
0353                '[clang-diagnostic-explicit-ownership-type]',
0354                '[clang-diagnostic-extended-offsetof]',
0355                '[clang-diagnostic-extern-c-compat]',
0356                '[clang-diagnostic-extern-initializer]',
0357                '[clang-diagnostic-extra-qualification]',
0358                '[clang-diagnostic-extra-semi]',
0359                '[clang-diagnostic-extra-tokens]',
0360                '[clang-diagnostic-extra]',
0361                '[clang-diagnostic-fallback]',
0362                '[clang-diagnostic-flag-enum]',
0363                '[clang-diagnostic-flexible-array-extensions]',
0364                '[clang-diagnostic-float-conversion]',
0365                '[clang-diagnostic-float-equal]',
0366                '[clang-diagnostic-float-overflow-conversion]',
0367                '[clang-diagnostic-float-zero-conversion]',
0368                '[clang-diagnostic-for-loop-analysis]',
0369                '[clang-diagnostic-format-extra-args]',
0370                '[clang-diagnostic-format-invalid-specifier]',
0371                '[clang-diagnostic-format-non-iso]',
0372                '[clang-diagnostic-format-nonliteral]',
0373                '[clang-diagnostic-format-pedantic]',
0374                '[clang-diagnostic-format-security]',
0375                '[clang-diagnostic-format-y2k]',
0376                '[clang-diagnostic-format-zero-length]',
0377                '[clang-diagnostic-format=2]',
0378                '[clang-diagnostic-format]',
0379                '[clang-diagnostic-four-char-constants]',
0380                '[clang-diagnostic-frame-larger-than=]',
0381                '[clang-diagnostic-function-def-in-objc-container]',
0382                '[clang-diagnostic-future-compat]',
0383                '[clang-diagnostic-gcc-compat]',
0384                '[clang-diagnostic-global-constructors]',
0385                '[clang-diagnostic-gnu-alignof-expression]',
0386                '[clang-diagnostic-gnu-anonymous-struct]',
0387                '[clang-diagnostic-gnu-array-member-paren-init]',
0388                '[clang-diagnostic-gnu-auto-type]',
0389                '[clang-diagnostic-gnu-binary-literal]',
0390                '[clang-diagnostic-gnu-case-range]',
0391                '[clang-diagnostic-gnu-complex-integer]',
0392                '[clang-diagnostic-gnu-compound-literal-initializer]',
0393                '[clang-diagnostic-gnu-conditional-omitted-operand]',
0394                '[clang-diagnostic-gnu-designator]',
0395                '[clang-diagnostic-gnu-empty-initializer]',
0396                '[clang-diagnostic-gnu-empty-struct]',
0397                '[clang-diagnostic-gnu-flexible-array-initializer]',
0398                '[clang-diagnostic-gnu-flexible-array-union-member]',
0399                '[clang-diagnostic-gnu-folding-constant]',
0400                '[clang-diagnostic-gnu-imaginary-constant]',
0401                '[clang-diagnostic-gnu-include-next]',
0402                '[clang-diagnostic-gnu-label-as-value]',
0403                '[clang-diagnostic-gnu-redeclared-enum]',
0404                '[clang-diagnostic-gnu-statement-expression]',
0405                '[clang-diagnostic-gnu-static-float-init]',
0406                '[clang-diagnostic-gnu-string-literal-operator-template]',
0407                '[clang-diagnostic-gnu-union-cast]',
0408                '[clang-diagnostic-gnu-variable-sized-type-not-at-end]',
0409                '[clang-diagnostic-gnu-zero-line-directive]',
0410                '[clang-diagnostic-gnu-zero-variadic-macro-arguments]',
0411                '[clang-diagnostic-gnu]',
0412                '[clang-diagnostic-header-guard]',
0413                '[clang-diagnostic-header-hygiene]',
0414                '[clang-diagnostic-idiomatic-parentheses]',
0415                '[clang-diagnostic-ignored-attributes]',
0416                '[clang-diagnostic-ignored-optimization-argument]',
0417                '[clang-diagnostic-ignored-pragma-intrinsic]',
0418                '[clang-diagnostic-ignored-pragmas]',
0419                '[clang-diagnostic-ignored-qualifiers]',
0420                '[clang-diagnostic-implicit-atomic-properties]',
0421                '[clang-diagnostic-implicit-conversion-floating-point-to-bool]',
0422                '[clang-diagnostic-implicit-exception-spec-mismatch]',
0423                '[clang-diagnostic-implicit-fallthrough-per-function]',
0424                '[clang-diagnostic-implicit-fallthrough]',
0425                '[clang-diagnostic-implicit-function-declaration]',
0426                '[clang-diagnostic-implicit-int]',
0427                '[clang-diagnostic-implicit-retain-self]',
0428                '[clang-diagnostic-implicit]',
0429                '[clang-diagnostic-implicitly-unsigned-literal]',
0430                '[clang-diagnostic-import-preprocessor-directive-pedantic]',
0431                '[clang-diagnostic-import]',
0432                '[clang-diagnostic-inaccessible-base]',
0433                '[clang-diagnostic-include-next-absolute-path]',
0434                '[clang-diagnostic-include-next-outside-header]',
0435                '[clang-diagnostic-incompatible-exception-spec]',
0436                '[clang-diagnostic-incompatible-function-pointer-types]',
0437                '[clang-diagnostic-incompatible-library-redeclaration]',
0438                '[clang-diagnostic-incompatible-ms-struct]',
0439                '[clang-diagnostic-incompatible-pointer-types-discards-qualifiers]',
0440                '[clang-diagnostic-incompatible-pointer-types]',
0441                '[clang-diagnostic-incompatible-property-type]',
0442                '[clang-diagnostic-incompatible-sysroot]',
0443                '[clang-diagnostic-incomplete-implementation]',
0444                '[clang-diagnostic-incomplete-module]',
0445                '[clang-diagnostic-incomplete-umbrella]',
0446                '[clang-diagnostic-inconsistent-dllimport]',
0447                '[clang-diagnostic-inconsistent-missing-destructor-override]',
0448                '[clang-diagnostic-inconsistent-missing-override]',
0449                '[clang-diagnostic-increment-bool]',
0450                '[clang-diagnostic-infinite-recursion]',
0451                '[clang-diagnostic-init-self]',
0452                '[clang-diagnostic-initializer-overrides]',
0453                '[clang-diagnostic-injected-class-name]',
0454                '[clang-diagnostic-inline-asm]',
0455                '[clang-diagnostic-inline-new-delete]',
0456                '[clang-diagnostic-inline]',
0457                '[clang-diagnostic-instantiation-after-specialization]',
0458                '[clang-diagnostic-int-conversion]',
0459                '[clang-diagnostic-int-conversions]',
0460                '[clang-diagnostic-int-to-pointer-cast]',
0461                '[clang-diagnostic-int-to-void-pointer-cast]',
0462                '[clang-diagnostic-integer-overflow]',
0463                '[clang-diagnostic-invalid-command-line-argument]',
0464                '[clang-diagnostic-invalid-constexpr]',
0465                '[clang-diagnostic-invalid-iboutlet]',
0466                '[clang-diagnostic-invalid-initializer-from-system-header]',
0467                '[clang-diagnostic-invalid-ios-deployment-target]',
0468                '[clang-diagnostic-invalid-noreturn]',
0469                '[clang-diagnostic-invalid-offsetof]',
0470                '[clang-diagnostic-invalid-or-nonexistent-directory]',
0471                '[clang-diagnostic-invalid-partial-specialization]',
0472                '[clang-diagnostic-invalid-pch]',
0473                '[clang-diagnostic-invalid-pp-token]',
0474                '[clang-diagnostic-invalid-source-encoding]',
0475                '[clang-diagnostic-invalid-token-paste]',
0476                '[clang-diagnostic-jump-seh-finally]',
0477                '[clang-diagnostic-keyword-compat]',
0478                '[clang-diagnostic-keyword-macro]',
0479                '[clang-diagnostic-knr-promoted-parameter]',
0480                '[clang-diagnostic-language-extension-token]',
0481                '[clang-diagnostic-large-by-value-copy]',
0482                '[clang-diagnostic-liblto]',
0483                '[clang-diagnostic-literal-conversion]',
0484                '[clang-diagnostic-literal-range]',
0485                '[clang-diagnostic-local-type-template-args]',
0486                '[clang-diagnostic-logical-not-parentheses]',
0487                '[clang-diagnostic-logical-op-parentheses]',
0488                '[clang-diagnostic-long-long]',
0489                '[clang-diagnostic-loop-analysis]',
0490                '[clang-diagnostic-macro-redefined]',
0491                '[clang-diagnostic-main-return-type]',
0492                '[clang-diagnostic-main]',
0493                '[clang-diagnostic-malformed-warning-check]',
0494                '[clang-diagnostic-many-braces-around-scalar-init]',
0495                '[clang-diagnostic-max-unsigned-zero]',
0496                '[clang-diagnostic-memsize-comparison]',
0497                '[clang-diagnostic-method-signatures]',
0498                '[clang-diagnostic-microsoft-anon-tag]',
0499                '[clang-diagnostic-microsoft-cast]',
0500                '[clang-diagnostic-microsoft-charize]',
0501                '[clang-diagnostic-microsoft-comment-paste]',
0502                '[clang-diagnostic-microsoft-const-init]',
0503                '[clang-diagnostic-microsoft-cpp-macro]',
0504                '[clang-diagnostic-microsoft-default-arg-redefinition]',
0505                '[clang-diagnostic-microsoft-end-of-file]',
0506                '[clang-diagnostic-microsoft-enum-forward-reference]',
0507                '[clang-diagnostic-microsoft-enum-value]',
0508                '[clang-diagnostic-microsoft-exception-spec]',
0509                '[clang-diagnostic-microsoft-exists]',
0510                '[clang-diagnostic-microsoft-explicit-constructor-call]',
0511                '[clang-diagnostic-microsoft-extra-qualification]',
0512                '[clang-diagnostic-microsoft-fixed-enum]',
0513                '[clang-diagnostic-microsoft-flexible-array]',
0514                '[clang-diagnostic-microsoft-goto]',
0515                '[clang-diagnostic-microsoft-include]',
0516                '[clang-diagnostic-microsoft-mutable-reference]',
0517                '[clang-diagnostic-microsoft-pure-definition]',
0518                '[clang-diagnostic-microsoft-redeclare-static]',
0519                '[clang-diagnostic-microsoft-sealed]',
0520                '[clang-diagnostic-microsoft-template]',
0521                '[clang-diagnostic-microsoft-union-member-reference]',
0522                '[clang-diagnostic-microsoft-unqualified-friend]',
0523                '[clang-diagnostic-microsoft-using-decl]',
0524                '[clang-diagnostic-microsoft-void-pseudo-dtor]',
0525                '[clang-diagnostic-microsoft]',
0526                '[clang-diagnostic-mismatched-new-delete]',
0527                '[clang-diagnostic-mismatched-parameter-types]',
0528                '[clang-diagnostic-mismatched-return-types]',
0529                '[clang-diagnostic-mismatched-tags]',
0530                '[clang-diagnostic-missing-braces]',
0531                '[clang-diagnostic-missing-declarations]',
0532                '[clang-diagnostic-missing-exception-spec]',
0533                '[clang-diagnostic-missing-field-initializers]',
0534                '[clang-diagnostic-missing-format-attribute]',
0535                '[clang-diagnostic-missing-include-dirs]',
0536                '[clang-diagnostic-missing-method-return-type]',
0537                '[clang-diagnostic-missing-noescape]',
0538                '[clang-diagnostic-missing-noreturn]',
0539                '[clang-diagnostic-missing-prototype-for-cc]',
0540                '[clang-diagnostic-missing-prototypes]',
0541                '[clang-diagnostic-missing-selector-name]',
0542                '[clang-diagnostic-missing-sysroot]',
0543                '[clang-diagnostic-missing-variable-declarations]',
0544                '[clang-diagnostic-module-build]',
0545                '[clang-diagnostic-module-conflict]',
0546                '[clang-diagnostic-module-file-config-mismatch]',
0547                '[clang-diagnostic-module-file-extension]',
0548                '[clang-diagnostic-module-import-in-extern-c]',
0549                '[clang-diagnostic-modules-ambiguous-internal-linkage]',
0550                '[clang-diagnostic-modules-import-nested-redundant]',
0551                '[clang-diagnostic-most]',
0552                '[clang-diagnostic-move]',
0553                '[clang-diagnostic-msvc-include]',
0554                '[clang-diagnostic-msvc-not-found]',
0555                '[clang-diagnostic-multichar]',
0556                '[clang-diagnostic-multiple-move-vbase]',
0557                '[clang-diagnostic-narrowing]',
0558                '[clang-diagnostic-nested-anon-types]',
0559                '[clang-diagnostic-nested-externs]',
0560                '[clang-diagnostic-new-returns-null]',
0561                '[clang-diagnostic-newline-eof]',
0562                '[clang-diagnostic-noexcept-type]',
0563                '[clang-diagnostic-non-gcc]',
0564                '[clang-diagnostic-non-literal-null-conversion]',
0565                '[clang-diagnostic-non-modular-include-in-framework-module]',
0566                '[clang-diagnostic-non-modular-include-in-module]',
0567                '[clang-diagnostic-non-pod-varargs]',
0568                '[clang-diagnostic-non-virtual-dtor]',
0569                '[clang-diagnostic-nonnull]',
0570                '[clang-diagnostic-nonportable-cfstrings]',
0571                '[clang-diagnostic-nonportable-include-path]',
0572                '[clang-diagnostic-nonportable-system-include-path]',
0573                '[clang-diagnostic-nonportable-vector-initialization]',
0574                '[clang-diagnostic-nsconsumed-mismatch]',
0575                '[clang-diagnostic-nsreturns-mismatch]',
0576                '[clang-diagnostic-null-arithmetic]',
0577                '[clang-diagnostic-null-character]',
0578                '[clang-diagnostic-null-conversion]',
0579                '[clang-diagnostic-null-dereference]',
0580                '[clang-diagnostic-null-pointer-arithmetic]',
0581                '[clang-diagnostic-nullability-completeness-on-arrays]',
0582                '[clang-diagnostic-nullability-completeness]',
0583                '[clang-diagnostic-nullability-declspec]',
0584                '[clang-diagnostic-nullability-extension]',
0585                '[clang-diagnostic-nullability-inferred-on-nested-type]',
0586                '[clang-diagnostic-nullability]',
0587                '[clang-diagnostic-nullable-to-nonnull-conversion]',
0588                '[clang-diagnostic-objc-autosynthesis-property-ivar-name-match]',
0589                '[clang-diagnostic-objc-circular-container]',
0590                '[clang-diagnostic-objc-cocoa-api]',
0591                '[clang-diagnostic-objc-designated-initializers]',
0592                '[clang-diagnostic-objc-flexible-array]',
0593                '[clang-diagnostic-objc-forward-class-redefinition]',
0594                '[clang-diagnostic-objc-interface-ivars]',
0595                '[clang-diagnostic-objc-literal-compare]',
0596                '[clang-diagnostic-objc-literal-conversion]',
0597                '[clang-diagnostic-objc-macro-redefinition]',
0598                '[clang-diagnostic-objc-messaging-id]',
0599                '[clang-diagnostic-objc-method-access]',
0600                '[clang-diagnostic-objc-missing-property-synthesis]',
0601                '[clang-diagnostic-objc-missing-super-calls]',
0602                '[clang-diagnostic-objc-multiple-method-names]',
0603                '[clang-diagnostic-objc-noncopy-retain-block-property]',
0604                '[clang-diagnostic-objc-nonunified-exceptions]',
0605                '[clang-diagnostic-objc-property-implementation]',
0606                '[clang-diagnostic-objc-property-implicit-mismatch]',
0607                '[clang-diagnostic-objc-property-matches-cocoa-ownership-rule]',
0608                '[clang-diagnostic-objc-property-no-attribute]',
0609                '[clang-diagnostic-objc-property-synthesis]',
0610                '[clang-diagnostic-objc-protocol-method-implementation]',
0611                '[clang-diagnostic-objc-protocol-property-synthesis]',
0612                '[clang-diagnostic-objc-protocol-qualifiers]',
0613                '[clang-diagnostic-objc-readonly-with-setter-property]',
0614                '[clang-diagnostic-objc-redundant-api-use]',
0615                '[clang-diagnostic-objc-redundant-literal-use]',
0616                '[clang-diagnostic-objc-root-class]',
0617                '[clang-diagnostic-objc-string-compare]',
0618                '[clang-diagnostic-objc-string-concatenation]',
0619                '[clang-diagnostic-objc-unsafe-perform-selector]',
0620                '[clang-diagnostic-odr]',
0621                '[clang-diagnostic-old-style-cast]',
0622                '[clang-diagnostic-old-style-definition]',
0623                '[clang-diagnostic-opencl-unsupported-rgba]',
0624                '[clang-diagnostic-openmp-clauses]',
0625                '[clang-diagnostic-openmp-loop-form]',
0626                '[clang-diagnostic-openmp-target]',
0627                '[clang-diagnostic-option-ignored]',
0628                '[clang-diagnostic-out-of-line-declaration]',
0629                '[clang-diagnostic-out-of-scope-function]',
0630                '[clang-diagnostic-over-aligned]',
0631                '[clang-diagnostic-overflow]',
0632                '[clang-diagnostic-overlength-strings]',
0633                '[clang-diagnostic-overloaded-shift-op-parentheses]',
0634                '[clang-diagnostic-overloaded-virtual]',
0635                '[clang-diagnostic-override-module]',
0636                '[clang-diagnostic-overriding-method-mismatch]',
0637                '[clang-diagnostic-overriding-t-option]',
0638                '[clang-diagnostic-packed]',
0639                '[clang-diagnostic-padded]',
0640                '[clang-diagnostic-parentheses-equality]',
0641                '[clang-diagnostic-parentheses]',
0642                '[clang-diagnostic-partial-availability]',
0643                '[clang-diagnostic-pass-analysis]',
0644                '[clang-diagnostic-pass-failed]',
0645                '[clang-diagnostic-pass-missed]',
0646                '[clang-diagnostic-pass]',
0647                '[clang-diagnostic-pch-date-time]',
0648                '[clang-diagnostic-pedantic-core-features]',
0649                '[clang-diagnostic-pedantic]',
0650                '[clang-diagnostic-pessimizing-move]',
0651                '[clang-diagnostic-pointer-arith]',
0652                '[clang-diagnostic-pointer-bool-conversion]',
0653                '[clang-diagnostic-pointer-sign]',
0654                '[clang-diagnostic-pointer-to-int-cast]',
0655                '[clang-diagnostic-pointer-type-mismatch]',
0656                '[clang-diagnostic-potentially-evaluated-expression]',
0657                '[clang-diagnostic-pragma-clang-attribute]',
0658                '[clang-diagnostic-pragma-once-outside-header]',
0659                '[clang-diagnostic-pragma-pack-suspicious-include]',
0660                '[clang-diagnostic-pragma-pack]',
0661                '[clang-diagnostic-pragma-system-header-outside-header]',
0662                '[clang-diagnostic-pragmas]',
0663                '[clang-diagnostic-predefined-identifier-outside-function]',
0664                '[clang-diagnostic-private-extern]',
0665                '[clang-diagnostic-private-header]',
0666                '[clang-diagnostic-private-module]',
0667                '[clang-diagnostic-profile-instr-missing]',
0668                '[clang-diagnostic-profile-instr-out-of-date]',
0669                '[clang-diagnostic-profile-instr-unprofiled]',
0670                '[clang-diagnostic-property-access-dot-syntax]',
0671                '[clang-diagnostic-property-attribute-mismatch]',
0672                '[clang-diagnostic-protocol-property-synthesis-ambiguity]',
0673                '[clang-diagnostic-protocol]',
0674                '[clang-diagnostic-qualified-void-return-type]',
0675                '[clang-diagnostic-range-loop-analysis]',
0676                '[clang-diagnostic-readonly-iboutlet-property]',
0677                '[clang-diagnostic-receiver-expr]',
0678                '[clang-diagnostic-receiver-forward-class]',
0679                '[clang-diagnostic-redeclared-class-member]',
0680                '[clang-diagnostic-redundant-decls]',
0681                '[clang-diagnostic-redundant-move]',
0682                '[clang-diagnostic-redundant-parens]',
0683                '[clang-diagnostic-register]',
0684                '[clang-diagnostic-reinterpret-base-class]',
0685                '[clang-diagnostic-remark-backend-plugin]',
0686                '[clang-diagnostic-reorder]',
0687                '[clang-diagnostic-requires-super-attribute]',
0688                '[clang-diagnostic-reserved-id-macro]',
0689                '[clang-diagnostic-reserved-user-defined-literal]',
0690                '[clang-diagnostic-retained-language-linkage]',
0691                '[clang-diagnostic-return-stack-address]',
0692                '[clang-diagnostic-return-type-c-linkage]',
0693                '[clang-diagnostic-return-type]',
0694                '[clang-diagnostic-rtti-for-exceptions]',
0695                '[clang-diagnostic-sanitize-address]',
0696                '[clang-diagnostic-section]',
0697                '[clang-diagnostic-selector-type-mismatch]',
0698                '[clang-diagnostic-selector]',
0699                '[clang-diagnostic-self-assign-field]',
0700                '[clang-diagnostic-self-assign]',
0701                '[clang-diagnostic-self-move]',
0702                '[clang-diagnostic-semicolon-before-method-body]',
0703                '[clang-diagnostic-sentinel]',
0704                '[clang-diagnostic-sequence-point]',
0705                '[clang-diagnostic-serialized-diagnostics]',
0706                '[clang-diagnostic-shadow-all]',
0707                '[clang-diagnostic-shadow-field-in-constructor-modified]',
0708                '[clang-diagnostic-shadow-field-in-constructor]',
0709                '[clang-diagnostic-shadow-field]',
0710                '[clang-diagnostic-shadow-ivar]',
0711                '[clang-diagnostic-shadow-uncaptured-local]',
0712                '[clang-diagnostic-shadow]',
0713                '[clang-diagnostic-shift-count-negative]',
0714                '[clang-diagnostic-shift-count-overflow]',
0715                '[clang-diagnostic-shift-negative-value]',
0716                '[clang-diagnostic-shift-op-parentheses]',
0717                '[clang-diagnostic-shift-overflow]',
0718                '[clang-diagnostic-shift-sign-overflow]',
0719                '[clang-diagnostic-shorten-64-to-32]',
0720                '[clang-diagnostic-sign-compare]',
0721                '[clang-diagnostic-sign-conversion]',
0722                '[clang-diagnostic-sign-promo]',
0723                '[clang-diagnostic-signed-enum-bitfield]',
0724                '[clang-diagnostic-sizeof-array-argument]',
0725                '[clang-diagnostic-sizeof-array-decay]',
0726                '[clang-diagnostic-sizeof-pointer-memaccess]',
0727                '[clang-diagnostic-slash-u-filename]',
0728                '[clang-diagnostic-sometimes-uninitialized]',
0729                '[clang-diagnostic-source-uses-openmp]',
0730                '[clang-diagnostic-spir-compat]',
0731                '[clang-diagnostic-stack-protector]',
0732                '[clang-diagnostic-static-float-init]',
0733                '[clang-diagnostic-static-in-inline]',
0734                '[clang-diagnostic-static-inline-explicit-instantiation]',
0735                '[clang-diagnostic-static-local-in-inline]',
0736                '[clang-diagnostic-static-self-init]',
0737                '[clang-diagnostic-strict-aliasing=0]',
0738                '[clang-diagnostic-strict-aliasing=1]',
0739                '[clang-diagnostic-strict-aliasing=2]',
0740                '[clang-diagnostic-strict-aliasing]',
0741                '[clang-diagnostic-strict-overflow=0]',
0742                '[clang-diagnostic-strict-overflow=1]',
0743                '[clang-diagnostic-strict-overflow=2]',
0744                '[clang-diagnostic-strict-overflow=3]',
0745                '[clang-diagnostic-strict-overflow=4]',
0746                '[clang-diagnostic-strict-overflow=5]',
0747                '[clang-diagnostic-strict-overflow]',
0748                '[clang-diagnostic-strict-prototypes]',
0749                '[clang-diagnostic-strict-selector-match]',
0750                '[clang-diagnostic-string-compare]',
0751                '[clang-diagnostic-string-conversion]',
0752                '[clang-diagnostic-string-plus-char]',
0753                '[clang-diagnostic-string-plus-int]',
0754                '[clang-diagnostic-strlcpy-strlcat-size]',
0755                '[clang-diagnostic-strncat-size]',
0756                '[clang-diagnostic-super-class-method-mismatch]',
0757                '[clang-diagnostic-switch-bool]',
0758                '[clang-diagnostic-switch-default]',
0759                '[clang-diagnostic-switch-enum]',
0760                '[clang-diagnostic-switch]',
0761                '[clang-diagnostic-sync-fetch-and-nand-semantics-changed]',
0762                '[clang-diagnostic-synth]',
0763                '[clang-diagnostic-tautological-compare]',
0764                '[clang-diagnostic-tautological-constant-compare]',
0765                '[clang-diagnostic-tautological-constant-out-of-range-compare]',
0766                '[clang-diagnostic-tautological-overlap-compare]',
0767                '[clang-diagnostic-tautological-pointer-compare]',
0768                '[clang-diagnostic-tautological-undefined-compare]',
0769                '[clang-diagnostic-tautological-unsigned-enum-zero-compare]',
0770                '[clang-diagnostic-tautological-unsigned-zero-compare]',
0771                '[clang-diagnostic-tentative-definition-incomplete-type]',
0772                '[clang-diagnostic-thread-safety-analysis]',
0773                '[clang-diagnostic-thread-safety-attributes]',
0774                '[clang-diagnostic-thread-safety-beta]',
0775                '[clang-diagnostic-thread-safety-negative]',
0776                '[clang-diagnostic-thread-safety-precise]',
0777                '[clang-diagnostic-thread-safety-reference]',
0778                '[clang-diagnostic-thread-safety-verbose]',
0779                '[clang-diagnostic-thread-safety]',
0780                '[clang-diagnostic-trigraphs]',
0781                '[clang-diagnostic-type-limits]',
0782                '[clang-diagnostic-type-safety]',
0783                '[clang-diagnostic-typedef-redefinition]',
0784                '[clang-diagnostic-typename-missing]',
0785                '[clang-diagnostic-unable-to-open-stats-file]',
0786                '[clang-diagnostic-unavailable-declarations]',
0787                '[clang-diagnostic-undeclared-selector]',
0788                '[clang-diagnostic-undef]',
0789                '[clang-diagnostic-undefined-bool-conversion]',
0790                '[clang-diagnostic-undefined-func-template]',
0791                '[clang-diagnostic-undefined-inline]',
0792                '[clang-diagnostic-undefined-internal-type]',
0793                '[clang-diagnostic-undefined-internal]',
0794                '[clang-diagnostic-undefined-reinterpret-cast]',
0795                '[clang-diagnostic-undefined-var-template]',
0796                '[clang-diagnostic-unevaluated-expression]',
0797                '[clang-diagnostic-unguarded-availability-new]',
0798                '[clang-diagnostic-unguarded-availability]',
0799                '[clang-diagnostic-unicode-whitespace]',
0800                '[clang-diagnostic-unicode]',
0801                '[clang-diagnostic-uninitialized]',
0802                '[clang-diagnostic-unknown-argument]',
0803                '[clang-diagnostic-unknown-attributes]',
0804                '[clang-diagnostic-unknown-escape-sequence]',
0805                '[clang-diagnostic-unknown-pragmas]',
0806                '[clang-diagnostic-unknown-sanitizers]',
0807                '[clang-diagnostic-unknown-warning-option]',
0808                '[clang-diagnostic-unnamed-type-template-args]',
0809                '[clang-diagnostic-unneeded-internal-declaration]',
0810                '[clang-diagnostic-unneeded-member-function]',
0811                '[clang-diagnostic-unreachable-code-aggressive]',
0812                '[clang-diagnostic-unreachable-code-break;]',
0813                '[clang-diagnostic-unreachable-code-loop-increment]',
0814                '[clang-diagnostic-unreachable-code-return]',
0815                '[clang-diagnostic-unreachable-code]',
0816                '[clang-diagnostic-unsequenced]',
0817                '[clang-diagnostic-unsupported-abs]',
0818                '[clang-diagnostic-unsupported-availability-guard]',
0819                '[clang-diagnostic-unsupported-cb]',
0820                '[clang-diagnostic-unsupported-dll-base-class-template]',
0821                '[clang-diagnostic-unsupported-friend]',
0822                '[clang-diagnostic-unsupported-gpopt]',
0823                '[clang-diagnostic-unsupported-nan]',
0824                '[clang-diagnostic-unsupported-visibility]',
0825                '[clang-diagnostic-unusable-partial-specialization]',
0826                '[clang-diagnostic-unused-argument]',
0827                '[clang-diagnostic-unused-command-line-argument]',
0828                '[clang-diagnostic-unused-comparison]',
0829                '[clang-diagnostic-unused-const-variable]',
0830                '[clang-diagnostic-unused-exception-parameter]',
0831                '[clang-diagnostic-unused-function]',
0832                '[clang-diagnostic-unused-getter-return-value]',
0833                '[clang-diagnostic-unused-label]',
0834                '[clang-diagnostic-unused-lambda-capture]',
0835                '[clang-diagnostic-unused-local-typedef]',
0836                '[clang-diagnostic-unused-local-typedefs]',
0837                '[clang-diagnostic-unused-macros]',
0838                '[clang-diagnostic-unused-member-function]',
0839                '[clang-diagnostic-unused-parameter]',
0840                '[clang-diagnostic-unused-private-field]',
0841                '[clang-diagnostic-unused-property-ivar]',
0842                '[clang-diagnostic-unused-result]',
0843                '[clang-diagnostic-unused-template]',
0844                '[clang-diagnostic-unused-value]',
0845                '[clang-diagnostic-unused-variable]',
0846                '[clang-diagnostic-unused-volatile-lvalue]',
0847                '[clang-diagnostic-used-but-marked-unused]',
0848                '[clang-diagnostic-user-defined-literals]',
0849                '[clang-diagnostic-user-defined-warnings]',
0850                '[clang-diagnostic-varargs]',
0851                '[clang-diagnostic-variadic-macros]',
0852                '[clang-diagnostic-vec-elem-size]',
0853                '[clang-diagnostic-vector-conversion]',
0854                '[clang-diagnostic-vector-conversions]',
0855                '[clang-diagnostic-vexing-parse]',
0856                '[clang-diagnostic-visibility]',
0857                '[clang-diagnostic-vla-extension]',
0858                '[clang-diagnostic-vla]',
0859                '[clang-diagnostic-void-ptr-dereference]',
0860                '[clang-diagnostic-volatile-register-var]',
0861                '[clang-diagnostic-warning]',
0862                '[clang-diagnostic-weak-template-vtables]',
0863                '[clang-diagnostic-weak-vtables]',
0864                '[clang-diagnostic-writable-strings]',
0865                '[clang-diagnostic-write-strings]',
0866                '[clang-diagnostic-zero-as-null-pointer-constant]',
0867                '[clang-diagnostic-zero-length-array]',
0868                '[cppcoreguidelines-avoid-c-arrays]',
0869                '[cppcoreguidelines-avoid-goto]',
0870                '[cppcoreguidelines-avoid-magic-numbers]',
0871                '[cppcoreguidelines-c-copy-assignment-signature]',
0872                '[cppcoreguidelines-explicit-virtual-functions]',
0873                '[cppcoreguidelines-interfaces-global-init]',
0874                '[cppcoreguidelines-macro-usage]',
0875                '[cppcoreguidelines-narrowing-conversions]',
0876                '[cppcoreguidelines-no-malloc]',
0877                '[cppcoreguidelines-non-private-member-variables-in-classes]',
0878                '[cppcoreguidelines-owning-memory]',
0879                '[cppcoreguidelines-pro-bounds-array-to-pointer-decay]',
0880                '[cppcoreguidelines-pro-bounds-constant-array-index]',
0881                '[cppcoreguidelines-pro-bounds-pointer-arithmetic]',
0882                '[cppcoreguidelines-pro-type-const-cast]',
0883                '[cppcoreguidelines-pro-type-cstyle-cast]',
0884                '[cppcoreguidelines-pro-type-member-init]',
0885                '[cppcoreguidelines-pro-type-reinterpret-cast]',
0886                '[cppcoreguidelines-pro-type-static-cast-downcast]',
0887                '[cppcoreguidelines-pro-type-union-access]',
0888                '[cppcoreguidelines-pro-type-vararg]',
0889                '[cppcoreguidelines-slicing]',
0890                '[cppcoreguidelines-special-member-functions]',
0891                '[fuchsia-default-arguments-calls]',
0892                '[fuchsia-default-arguments-declarations]',
0893                '[fuchsia-default-arguments]',
0894                '[fuchsia-header-anon-namespaces]',
0895                '[fuchsia-multiple-inheritance]',
0896                '[fuchsia-overloaded-operator]',
0897                '[fuchsia-restrict-system-includes]',
0898                '[fuchsia-statically-constructed-objects]',
0899                '[fuchsia-trailing-return]',
0900                '[fuchsia-virtual-inheritance]',
0901                '[google-build-explicit-make-pair]',
0902                '[google-build-namespaces]',
0903                '[google-build-using-namespace]',
0904                '[google-default-arguments]',
0905                '[google-explicit-constructor]',
0906                '[google-global-names-in-headers]',
0907                '[google-objc-avoid-nsobject-new]',
0908                '[google-objc-avoid-throwing-exception]',
0909                '[google-objc-function-naming]',
0910                '[google-objc-global-variable-declaration]',
0911                '[google-readability-avoid-underscore-in-googletest-name]',
0912                '[google-readability-braces-around-statements]',
0913                '[google-readability-casting]',
0914                '[google-readability-function-size]',
0915                '[google-readability-namespace-comments]',
0916                '[google-readability-todo]',
0917                '[google-runtime-int]',
0918                '[google-runtime-operator]',
0919                '[google-runtime-references]',
0920                '[hicpp-avoid-c-arrays]',
0921                '[hicpp-avoid-goto]',
0922                '[hicpp-braces-around-statements]',
0923                '[hicpp-deprecated-headers]',
0924                '[hicpp-exception-baseclass]',
0925                '[hicpp-explicit-conversions]',
0926                '[hicpp-function-size]',
0927                '[hicpp-invalid-access-moved]',
0928                '[hicpp-member-init]',
0929                '[hicpp-move-const-arg]',
0930                '[hicpp-multiway-paths-covered]',
0931                '[hicpp-named-parameter]',
0932                '[hicpp-new-delete-operators]',
0933                '[hicpp-no-array-decay]',
0934                '[hicpp-no-assembler]',
0935                '[hicpp-no-malloc]',
0936                '[hicpp-noexcept-move]',
0937                '[hicpp-signed-bitwise]',
0938                '[hicpp-special-member-functions]',
0939                '[hicpp-static-assert]',
0940                '[hicpp-undelegated-constructor]',
0941                '[hicpp-uppercase-literal-suffix]',
0942                '[hicpp-use-auto]',
0943                '[hicpp-use-emplace]',
0944                '[hicpp-use-equals-default]',
0945                '[hicpp-use-equals-delete]',
0946                '[hicpp-use-noexcept]',
0947                '[hicpp-use-nullptr]',
0948                '[hicpp-use-override]',
0949                '[hicpp-vararg]',
0950                '[llvm-header-guard]',
0951                '[llvm-include-order]',
0952                '[llvm-namespace-comment]',
0953                '[llvm-prefer-isa-or-dyn-cast-in-conditionals]',
0954                '[llvm-twine-local]',
0955                '[misc-definitions-in-headers]',
0956                '[misc-forwarding-reference-overload]',
0957                '[misc-incorrect-roundings]',
0958                '[misc-lambda-function-name]',
0959                '[misc-macro-parentheses]',
0960                '[misc-macro-repeated-side-effects]',
0961                '[misc-misplaced-const]',
0962                '[misc-new-delete-overloads]',
0963                '[misc-non-copyable-objects]',
0964                '[misc-non-private-member-variables-in-classes]',
0965                '[misc-redundant-expression]',
0966                '[misc-sizeof-container]',
0967                '[misc-static-assert]',
0968                '[misc-string-compare]',
0969                '[misc-string-integer-assignment]',
0970                '[misc-string-literal-with-embedded-nul]',
0971                '[misc-suspicious-missing-comma]',
0972                '[misc-suspicious-semicolon]',
0973                '[misc-suspicious-string-compare]',
0974                '[misc-swapped-arguments]',
0975                '[misc-throw-by-value-catch-by-reference]',
0976                '[misc-unconventional-assign-operator]',
0977                '[misc-undelegated-constructor]',
0978                '[misc-uniqueptr-reset-release]',
0979                '[misc-unused-alias-decls]',
0980                '[misc-unused-parameters]',
0981                '[misc-unused-using-decls]',
0982                '[misc=sizeof-expression]',
0983                '[modernize-avoid-bind]',
0984                '[modernize-avoid-c-arrays]',
0985                '[modernize-concat-nested-namespaces]',
0986                '[modernize-deprecated-headers]',
0987                '[modernize-deprecated-ios-base-aliases]',
0988                '[modernize-loop-convert]',
0989                '[modernize-make-shared]',
0990                '[modernize-make-unique]',
0991                '[modernize-pass-by-value]',
0992                '[modernize-raw-string-literal]',
0993                '[modernize-redundant-void-arg]',
0994                '[modernize-replace-auto-ptr]',
0995                '[modernize-replace-random-shuffle]',
0996                '[modernize-return-braced-init-list]',
0997                '[modernize-shrink-to-fit]',
0998                '[modernize-unary-static-assert]',
0999                '[modernize-use-auto]',
1000                '[modernize-use-bool-literals]',
1001                '[modernize-use-default-member-init]',
1002                '[modernize-use-emplace]',
1003                '[modernize-use-equals-default]',
1004                '[modernize-use-equals-delete]',
1005                '[modernize-use-nodiscard]',
1006                '[modernize-use-noexcept]',
1007                '[modernize-use-nullptr]',
1008                '[modernize-use-override]',
1009                '[modernize-use-trailing-return-type]',
1010                '[modernize-use-transparent-functors]',
1011                '[modernize-use-uncaught-exceptions]',
1012                '[modernize-use-using]',
1013                '[mpi-buffer-deref]',
1014                '[mpi-type-mismatch]',
1015                '[objc-avoid-nserror-init]',
1016                '[objc-avoid-spinlock]',
1017                '[objc-forbidden-subclassing]',
1018                '[objc-property-declaration]',
1019                '[objc-super-self]',
1020                '[openmp-exception-escape]',
1021                '[openmp-use-default-none]',
1022                '[performance-faster-string-find]',
1023                '[performance-for-range-copy]',
1024                '[performance-implicit-conversion-in-loop]',
1025                '[performance-inefficient-algorithm]',
1026                '[performance-inefficient-string-concatenation]',
1027                '[performance-inefficient-vector-operation]',
1028                '[performance-move-const-arg]',
1029                '[performance-move-constructor-init]',
1030                '[performance-noexcept-move-constructor]',
1031                '[performance-type-promotion-in-math-fn]',
1032                '[performance-unnecessary-copy-initialization]',
1033                '[performance-unnecessary-value-param]',
1034                '[portability-simd-intrinsics]',
1035                '[readability-avoid-const-params-in-decls]',
1036                '[readability-braces-around-statements]',
1037                '[readability-const-return-type]',
1038                '[readability-container-size-empty]',
1039                '[readability-convert-member-functions-to-static]',
1040                '[readability-delete-null-pointer]',
1041                '[readability-deleted-default]',
1042                '[readability-else-after-return]',
1043                '[readability-function-size]',
1044                '[readability-identifier-naming]',
1045                '[readability-implicit-bool-conversion]',
1046                '[readability-inconsistent-declaration-parameter-name]',
1047                '[readability-isolate-declaration]',
1048                '[readability-magic-numbers]',
1049                '[readability-misleading-indentation]',
1050                '[readability-misplaced-array-index]',
1051                '[readability-named-parameter]',
1052                '[readability-non-const-parameter]',
1053                '[readability-redundant-control-flow]',
1054                '[readability-redundant-declaration]',
1055                '[readability-redundant-function-ptr-dereference]',
1056                '[readability-redundant-member-init]',
1057                '[readability-redundant-preprocessor]',
1058                '[readability-redundant-smartptr-get]',
1059                '[readability-redundant-string-cstr]',
1060                '[readability-redundant-string-init]',
1061                '[readability-simplify-boolean-expr]',
1062                '[readability-simplify-subscript-expr]',
1063                '[readability-static-accessed-through-instance]',
1064                '[readability-static-definition-in-anonymous-namespace]',
1065                '[readability-string-compare]',
1066                '[readability-uniqueptr-delete-release]',
1067                '[readability-uppercase-literal-suffix]',
1068                '[zircon-temporary-objects]',
1069 ]
1070 
1071 # Each check will have its own node of information.
1072 class checks:
1073     def __init__(self, dataval=None):
1074         self.name = ''
1075         self.count = 0
1076         self.data = ''
1077 
1078 # Begin here.
1079 def main():
1080     checks_list.sort()
1081 
1082     # Process command line arguments.
1083     args = parse_command_line_options()
1084     external_link = ''
1085     external_name = ''
1086 
1087     contents = args.file.readlines()
1088 
1089     checks_used = [0] * len(checks_list)
1090 
1091     # Increments each occurrence of a check.
1092     for line, content in enumerate(contents):
1093         content = content.replace('<', '&lt;')
1094         content = content.replace('>', '&gt;')
1095         for check_name in checks_list:
1096             if content.find(check_name) != -1:
1097                 checks_used[checks_list.index(check_name)] += 1
1098 
1099     # Counts the max number of used checks in the log file.
1100     num_used_checks = 0
1101     for line, check in enumerate(checks_list):
1102         if checks_used[line] != 0:
1103             num_used_checks += 1
1104 
1105     names_of_used = [None] * num_used_checks
1106     names_of_usedL = [None] * num_used_checks
1107 
1108     # Creates new check classes for each used check.
1109     used_line = 0
1110     total_num_checks = 0
1111     for line, check in enumerate(checks_list):
1112         if checks_used[line] != 0:
1113             new_node = checks(check)
1114             new_node.name = check
1115             new_node.count = checks_used[line]
1116             total_num_checks += checks_used[line]
1117             names_of_used[used_line] = new_node
1118 
1119             names_of_usedL[used_line] = checks_list[line]
1120             used_line += 1
1121 
1122     # Adds details for each organized check.
1123     for line, content in enumerate(contents):
1124         # Goes through each used check.
1125         for initial_check in names_of_usedL:
1126             # Adds the lines that detail the warning message.
1127             if content.find(initial_check) != -1:
1128                 content = content.replace('<', '&lt;')
1129                 content = content.replace('>', '&gt;')
1130                 names_of_used[names_of_usedL.index(
1131                     initial_check)].data += content
1132                 details = line + 1
1133                 finished = False
1134                 while not finished:
1135                     # Ensure there is no overflow.
1136                     if details >= len(contents):
1137                         break
1138                     # If the line includes a used Clang-Tidy check name,
1139                     # continue to find the next.
1140                     for end_check in names_of_usedL:
1141                         if contents[details].find(end_check) != -1:
1142                             finished = True
1143                             break
1144                     # Otherwise, add the data to the specific used check
1145                     # name for the organization of checks in the HTML file.
1146                     if not finished:
1147                         names_of_used[names_of_usedL.index(
1148                             initial_check)].data += contents[details]
1149                         details += 1
1150 
1151     args.file.close()
1152     f = open("tidy.html", "w")
1153 
1154     # Functions for writing to the clang.html file.
1155     writeHeader(f)
1156     writeList(f, num_used_checks, names_of_used, args,
1157               external_link, external_name, total_num_checks)
1158     sortLogs(f, contents, num_used_checks, names_of_used,
1159              args, external_link, external_name)
1160     writeScript(f, num_used_checks)
1161 
1162     # Close the file.
1163     f.close()
1164     sys.exit()
1165 
1166 # Parses through the given command line options (-b, --button)
1167 # and returns the given file's contents if read successfully.
1168 def parse_command_line_options():
1169     parser = argparse.ArgumentParser()
1170     parser.add_argument('file', type=argparse.FileType('r'))
1171 
1172     try:
1173         args = parser.parse_args()
1174     except:
1175         parser.print_help()
1176         usage()
1177         sys.exit()
1178 
1179     return args
1180 
1181 # Prints usage information for the script.
1182 def usage():
1183     print("**--------------------------- Clang Tidy Visualizer --------------------------**\n\n \
1184     Generates an html file as a visual for clang-tidy checks.\n\n \
1185     Arguments: python clangtidy_visualizer.py [logfile.log]\n\n \
1186     \t\t-ex: python clangtidy_visualizer [logfile.log] \
1187     \n\n**------------------------------------------------------------------------**")
1188 
1189 # Header of the tidy.html file.
1190 def writeHeader(f):
1191     f.write("<!DOCTYPE html>\n")
1192     f.write("<html>\n")
1193     f.write("<head>\n")
1194     f.write("\t<title>Clang-Tidy Visualizer</title>\n\t<meta charset=\"UTF-8\">\n")
1195     f.write("\t<meta name=\"description\" content=\"Documentation tool for visualizing Clang-Tidy checks.\">\n")
1196     f.write(
1197         "\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n")
1198     f.write("\t<link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css\">\n")
1199     f.write("\t<script src=\"https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js\"></script>\n")
1200     f.write("\t<script src=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js\"></script>\n")
1201     f.write("</head>\n")
1202 
1203 # List the used checks found in the source code.
1204 def writeList(f, num_used_checks, names_of_used, args, external_link, external_name, total_num_checks):
1205     now = datetime.now()
1206     f.write(
1207         "<body style=\"background: rgb(220, 227, 230); width: 100%; height: 100%;\">\n")
1208     f.write("<div id=\"container\" style=\"margin-left: 2%; margin-right: 2%;\">\n")
1209     f.write("\t<div id=\"header\" style=\"height: 55px; display: flex; justify-content: left; position: relative;\">\n")
1210     f.write("\t\t<h3 style=\"text-align: center; color: #111; font-family: 'Helvetica Neue', sans-serif; font-weight: bold; \
1211     letter-spacing: 0.5px; line-height: 1;\">digiKam Clang-Tidy Checks - %s</h3>\n" % (now.strftime("%m/%d/%Y %H:%M:%S")))
1212     f.write("\t\t<div class=\"btn-group\" role=\"group\" style=\"position: absolute; right: 0;\">\n")
1213     f.write("\t\t</div>\n\t</div><br>\n")
1214     f.write("\t<ul id=\"list\" class=\"list-group\" align=\"left\" style=\"display: block; width: 25%; height: 0; margin-bottom: 0;\">\n")
1215 
1216     # Iterates through each used check's details and organizes them into the given <pre> sections.
1217     f.write("\t\t<a id=\"log\" href=\"#\" class=\"list-group-item list-group-item-success\" style=\"color: black; font-weight: bold; letter-spacing:0.4px;\" \
1218     onclick=\"toggleLog()\">%d Original Log</a>\n" % (total_num_checks))
1219 
1220     for line in range(0, num_used_checks):
1221         f.write("\t\t<a id=\"check%d\" style=\"color: black\" href=\"#\" class=\"list-group-item list-group-item-action\" \
1222         onclick=\"toggleInfo(%d)\">%d %s</a>\n" % (line, line, names_of_used[line].count, names_of_used[line].name))
1223 
1224     f.write("\t</ul>\n\n")
1225     f.write(
1226         "\t<div id=\"showLog\" style=\"display: none; width: 75%; float: right;\">\n")
1227     f.write(
1228         "\t\t<div style=\"display: flex; justify-content: left; position: relative;\">\n")
1229     f.write("\t\t\t<button id=\"collapse-btn0\" type=\"button\" class=\"btn nohover\" onclick=\"collapseSidebar()\" style=\"outline: none; \
1230     background-color: lightgray\" title=\"Collapse sidebar\">\n")
1231     f.write("\t\t\t<span id=\"collapse-img0\" class=\"glyphicon glyphicon-menu-left\"></button></span>\n")
1232     f.write("\t\t\t<h4 style=\"margin-top: 0; color: #111; position: absolute; left: 50%; transform: translateX(-50%); margin-bottom: 10;\">Original Log</h4>\n")
1233 
1234     f.write("\t\t</div>\n\t\t<pre>\n")
1235 
1236 # Sort through the used check logs for outputting the html.
1237 def sortLogs(f, contents, num_used_checks, names_of_used, args, external_link, external_name):
1238     for line in contents:
1239         line = line.replace('<', '&lt;')
1240         line = line.replace('>', '&gt;')
1241         f.write("%s" % (line))
1242 
1243     f.write("\n\t\t</pre>\n\t</div>\n")
1244 
1245     for check_idx in range(0, num_used_checks):
1246         collapse_idx = check_idx+1
1247         f.write("\t<div id=\"show%d\"" % (check_idx))
1248         f.write("style=\"display: none; width: 75%; float: right\">\n")
1249         f.write(
1250             "\t\t<div style=\"display: flex; justify-content: left; position: relative;\">\n")
1251         f.write("\t\t\t<button id=\"collapse-btn%d\" type=\"button\" class=\"btn nohover\" onclick=\"collapseSidebar()\" \
1252         style=\"outline: none; background-color: lightgray\" title=\"Collapse sidebar\">\n" % (collapse_idx))
1253         f.write("\t\t\t<span id=\"collapse-img%d\" class=\"glyphicon glyphicon-menu-left\"></button></span>\n" % (collapse_idx))
1254         f.write("\t\t\t<h4 style=\"margin-top: 0; color: #111; position: absolute; left: 50%; transform: translateX(-50%); margin-bottom: 10\">")
1255         f.write("%s</h4>\n" % (names_of_used[check_idx].name[1:-1]))
1256         f.write("\t\t</div>\n\t\t<pre>\n")
1257         names_of_used[check_idx].data = names_of_used[check_idx].data.replace('<', '&lt;')
1258         names_of_used[check_idx].data = names_of_used[check_idx].data.replace('>', '&gt;')
1259         f.write("%s\t\t</pre>\n\t</div>\n" % (names_of_used[check_idx].data))
1260 
1261     f.write("</div>\n</body>\n")
1262 
1263 # Writes Javascript and JQuery code to the html file for button and grouping functionalities.
1264 def writeScript(f, num_used_checks):
1265     f.write("<script>\nvar selected_idx;\nvar checks_arr = [];\nvar highlights = 'highlights';\n")
1266     f.write("// Retrieves local storage data on document load for highlighted checks.\n")
1267     f.write(
1268         "$(document).ready(function() {\n\tfor (var all_checks=0; all_checks<%d; all_checks++) {\n" % (num_used_checks))
1269     f.write("\t\tvar check_hl = document.getElementById(\"check\"+all_checks);\n")
1270     f.write(
1271         "\t\tswitch (JSON.parse(localStorage.getItem(highlights))[all_checks]) {\n")
1272     f.write("\t\t\tcase \"warning\":\n\t\t\tcheck_hl.classList.add('list-group-item-warning');\n")
1273     f.write(
1274         "\t\t\tchecks_arr[all_checks] = \"warning\"; break;\n\t\t\tcase \"danger\":\n")
1275     f.write(
1276         "\t\t\tcheck_hl.classList.add('list-group-item-danger');\n\t\t\tchecks_arr[all_checks] = \"danger\"; break;\n")
1277     f.write(
1278         "\t\t\tdefault:\n\t\t\tchecks_arr[all_checks] = \"action\";\n\t\t\tif (check_hl !== null) {\n")
1279     f.write("\t\t\t\tcheck_hl.classList.add('list-group-item-action');\n\t\t\t} break;\n\t\t}\n\t}\n")
1280     f.write("localStorage.setItem(highlights, JSON.stringify(checks_arr));\n});\n\n")
1281 
1282     f.write(
1283         "function toggleLog() {\n\tvar log = document.getElementById(\"showLog\");\n\tclearContent();\n")
1284     f.write(
1285         "\tif (log.style.display === \"none\") {\n\t\tlog.style.display = \"block\";\n\t} else {\n")
1286     f.write("\t\tlog.style.display = \"none\";\n\t}\n}\n\n")
1287 
1288     f.write(
1289         "function toggleInfo(check_position) {\n\tselected_idx = check_position;\n\tclearContent();\n")
1290     f.write("\t// Displays the chosen clang-tidy category.\n\tvar category = document.getElementById(\"show\"+check_position);\n")
1291     f.write(
1292         "\tif (category.style.display === \"none\") {\n\t\tcategory.style.display = \"block\";\n\t} else {\n")
1293     f.write("\t\tcategory.style.display = \"none\";\n\t}\n}\n\n")
1294 
1295     f.write(
1296         "// Clears document when choosing another selection.\nfunction clearContent() {\n")
1297     f.write(
1298         "\tfor (var all_checks=0; all_checks<%d; all_checks++) {\n\t\tvar clear = document.getElementById(\"show\"+all_checks);\n" % (num_used_checks))
1299     f.write(
1300         "\t\tif (clear.style.display === \"block\") {\n\t\tclear.style.display = \"none\";\n\t\t}\n\t}\n")
1301     f.write(
1302         "\tvar clearLog = document.getElementById(\"showLog\");\n\tif (clearLog.style.display === \"block\") {\n")
1303     f.write("\t\tclearLog.style.display = \"none\";\n\t}\n}\n\n")
1304 
1305     f.write(
1306         "// Type 1 used for highlighting danger checks and 0 for warnings.\nfunction highlightChecks(type) {\n")
1307     f.write(
1308         "\tvar check_hl = document.getElementById(\"check\"+selected_idx);\n\tif (check_hl !== null) {\n")
1309     f.write(
1310         "\t\tif (check_hl.classList.contains('list-group-item-action')) {\n\t\t\tcheck_hl.classList.remove('list-group-item-action');\n")
1311     f.write("\t\t\ttype == 1 ? check_hl.classList.add('list-group-item-danger') : check_hl.classList.add('list-group-item-warning');\n")
1312     f.write(
1313         "\t\t\ttype == 1 ? checks_arr[selected_idx] = \"danger\" : checks_arr[selected_idx] = \"warning\";\n")
1314     f.write(
1315         "\t\t} else if (check_hl.classList.contains('list-group-item-warning')) {\n\t\t\tcheck_hl.classList.remove('list-group-item-warning');\n")
1316     f.write("\t\t\ttype == 1 ? check_hl.classList.add('list-group-item-danger') : check_hl.classList.add('list-group-item-action');\n")
1317     f.write(
1318         "\t\t\ttype == 1 ? checks_arr[selected_idx] = \"danger\" : checks_arr[selected_idx] = \"action\";\n\t\t} else {\n")
1319     f.write("\t\t\tcheck_hl.classList.remove('list-group-item-danger');\n")
1320     f.write("\t\t\ttype == 1 ? check_hl.classList.add('list-group-item-action') : check_hl.classList.add('list-group-item-warning');\n")
1321     f.write(
1322         "\t\t\ttype == 1 ? checks_arr[selected_idx] = \"action\" : checks_arr[selected_idx] = \"warning\";\n\t\t}\n\t}\n")
1323     f.write("\t// Sets local storage for each occurrence of a highlighted check.\n\tlocalStorage.setItem(highlights, JSON.stringify(checks_arr));\n}\n\n")
1324 
1325     f.write(
1326         "function clearChecks(type) {\n\tfor (var all_checks=0; all_checks<%d; all_checks++) {\n" % (num_used_checks))
1327     f.write(
1328         "\t\tvar clear = (document.getElementById(\"check\"+all_checks));\n\t\tchecks_arr[all_checks] = \"action\";\n")
1329     f.write("\t\tif (clear !== null) {\n")
1330     f.write(
1331         "\t\t\tif (clear.classList.contains('list-group-item-warning')) {\n\t\t\t\tclear.classList.remove('list-group-item-warning');\n")
1332     f.write(
1333         "\t\t\t} else if (clear.classList.contains('list-group-item-danger')) {\n\t\t\t\tclear.classList.remove('list-group-item-danger');\n\t\t\t}\n")
1334     f.write("\t\t\tclear.classList.add('list-group-item-action');\n\t\t}\n\t}\n\t// Restores all checks to unhighlighted state on local storage.\n")
1335     f.write("\tlocalStorage.removeItem(highlights);\n}\n\n")
1336 
1337     f.write(
1338         "function collapseSidebar() {\n\tvar list = document.getElementById(\"list\"); var hasExpanded;\n")
1339     f.write("\tvar log_details = document.getElementById(\"showLog\");\n\tlist.style.display === \"block\" ? hasSidebar = true : hasSidebar = false;\n")
1340     f.write(
1341         "\thasSidebar ? list.style.display = \"none\" : list.style.display = \"block\";\n")
1342     f.write(
1343         "\tfor (var all_checks=0; all_checks<=%d; all_checks++) {\n\t\tvar collapse_img = document.getElementById(\"collapse-img\"+all_checks);\n" % (num_used_checks))
1344     f.write("\t\tvar collapse_btn = document.getElementById(\"collapse-btn\"+all_checks);\n\t\tvar check_details = document.getElementById(\"show\"+all_checks);\n")
1345     f.write(
1346         "\t\tif (collapse_img !== null) {\n\t\t\thasSidebar ? collapse_img.classList.remove('glyphicon-menu-left') : collapse_img.classList.remove('glyphicon-menu-right');\n")
1347     f.write("\t\t\thasSidebar ? collapse_img.classList.add('glyphicon-menu-right') : collapse_img.classList.add('glyphicon-menu-left');\n")
1348     f.write("\t\t\thasSidebar ? collapse_btn.title = \"Expand sidebar\" : collapse_btn.title = \"Collapse sidebar\";\n\t\t}\n")
1349     f.write(
1350         "\t\tif (check_details !== null) {hasSidebar ? check_details.style.width = \"100%\" : check_details.style.width = \"75%\";}\n\t}\n")
1351     f.write("\thasSidebar ? log_details.style.width = \"100%\" : log_details.style.width = \"75%\";\n}\n")
1352 
1353     # Begins writing style elements.
1354     f.write("</script>\n<style>\n\tpre {\n\t\twhite-space: pre-wrap;\n")
1355     f.write("\t\tword-break: keep-all;\n\t}\n\t#header {\n")
1356     f.write("\t\tborder-bottom: 2px solid darkgray\n\t}\n")
1357     f.write("</style>\n</html>")
1358 
1359 
1360 # Calls main function.
1361 if __name__ == "__main__":
1362     main()