diff options
| author | EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com> | 2021-11-27 20:06:29 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-11-27 15:06:29 -0500 |
| commit | 0966109a1402ac4a070345f9e151b93064d09fc9 (patch) | |
| tree | 58043fa7bd894bb57a61d843bca9e99492387df4 /ZAPD/WarningHandler.h | |
| parent | 6948306d97a8d87c5ecae23c409894383badfe67 (diff) | |
Warning system (#189)
* first draft
* take vt.h from mm repo
* Colors
* Fix argument types
* Add argument parser to errorhandler
* Rename ErrorHandler to WarningHandler
* Add -Wno- and more warning types
* header and body in warnings
* Small cleanup
* Replace a bunch of warnings with the new system
Co-authored-by: EllipticEllipsis <EllipticEllipsis@users.noreply.github.com>
* Move stuff around
* Move stuff to header
* Make some more VT macros, new Warning_Build function + macro, ZBackground
* Add remaining warnings
* Add ZResource* param to Warning_Resource
* Add warning help message
* Simplify help message a bit
* Refactor warnings into lots of helper functions
* Fix HANG_INDT in the wild
* Builds now
* Update macros to use bold
* Fix body printing and error colour
* Add -Werror=
* Add warningType to HANDLE_ERROR
* Change some throws into HANDLE_ERROR
* Create init and main maps and write new help printer
* Changed ZTextureAnimation to new w/e
* Typo
* Delete build warnings list file
* Use ERROR in ZResource and ZPath
* Remove extra structs
* Move ifdef into the InitMap, add descriptions
* Actually move into initMap and add descriptions...
* Remove Everything from the WarningType enum
* Make more of the handler arguments const for compatibility
* Fix warning
* Document macros a bit
* Add ImageBackend ERRRORs
* Note on Weverything, rename InvalidData to InvalidExtractedData
* add texture and mesh warnings/errors
* InvalidExtractedData
* Add description for InvalidPNG
* print which warnings are enabled by using debug verbosity
* Fix everything
* Fix some newlines
* Move help to the end, start some documentation
* Remove unnecessary `WarningHandler::`s
* Remove commented code
* Some more documentation
* Make first letters consistenty lowercase, more docs
* Consistently use lowercase, more docs
* Format consistently, more detail in documentation
* Simplify enabled warnings checks
* Rename HANDLE_WARNING_BUILD and add HANDLE_ERROR_PROCESS
* Delete BuildInfo.cpp
* Use PROCESS where possible, bit more documentation
* Add documenation to README, sort when printing help
* Add an example, escalate the rest of the invalids by default
* Format warning names in table
* format readme
* Remove old flags info
* Remove obsolete variables
* Format
* assert.h -> cassert
* Replace some asserts in ZTexture
* Remove test file
* Minor cleanup
* Bit more in the help
* Fix header includes
* Format
* One character in readme
* Update README.md
Co-authored-by: Anghelo Carvajal <angheloalf95@gmail.com>
* Some Morita inspiration
* Convert new errors
* Static warnings/errors
* Merge remote-tracking branch 'upstream/master' into errorlib
* Add explanation for switch control flow
* format
* whooops
* Fix segment warning that doesn't apply now we assume no segment means use VRAM
* Comment out MM in Jenkinsfile
Co-authored-by: Angie <angheloalf95@gmail.com>
Co-authored-by: EllipticEllipsis <EllipticEllipsis@users.noreply.github.com>
Diffstat (limited to 'ZAPD/WarningHandler.h')
| -rw-r--r-- | ZAPD/WarningHandler.h | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/ZAPD/WarningHandler.h b/ZAPD/WarningHandler.h new file mode 100644 index 0000000..bb0360a --- /dev/null +++ b/ZAPD/WarningHandler.h @@ -0,0 +1,145 @@ +#pragma once + +#include <array> +#include <string> +#include <string_view> +#include <unordered_map> + +#include "Utils/vt.h" +#include "ZFile.h" + +#ifdef _MSC_VER +#define __PRETTY_FUNCTION__ __FUNCSIG__ +#elif not defined(__GNUC__) +#define __PRETTY_FUNCTION__ __func__ +#endif + +// ======================================= +/* Formatting macros */ + +// TODO: move this somewhere else so it can be used by other help +#define HELP_DT_INDT " " + +/* Macros for formatting warnings/errors */ +#define VT_HILITE VT_BOLD_FGCOL(WHITE) +#define VT_WARN VT_BOLD_FGCOL(PURPLE) +#define VT_ERR VT_BOLD_FGCOL(RED) + +#define HILITE(string) (VT_HILITE string VT_RST) +#define WARN_FMT(string) (VT_WARN string VT_RST) +#define ERR_FMT(string) (VT_ERR string VT_RST) + +// Maybe make WARN_LF instead +// Currently 8 spaces +#define WARN_INDT " " +// Currently 16 spaces +#define HANG_INDT " " + +// ======================================= +/* Warning and error macros */ +// TODO: better names + +// General-purpose, plain style (only prints function,file,line in the preamble) +#define HANDLE_ERROR(warningType, header, body) \ + WarningHandler::Error_Plain(__FILE__, __LINE__, __PRETTY_FUNCTION__, warningType, header, body) +#define HANDLE_WARNING(warningType, header, body) \ + WarningHandler::Warning_Plain(__FILE__, __LINE__, __PRETTY_FUNCTION__, warningType, header, \ + body) + +// For processing XMLs or textures/blobs (preamble contains function,file,line; processed file) +#define HANDLE_ERROR_PROCESS(warningType, header, body) \ + WarningHandler::Error_Process(__FILE__, __LINE__, __PRETTY_FUNCTION__, warningType, header, \ + body) +#define HANDLE_WARNING_PROCESS(warningType, header, body) \ + WarningHandler::Warning_Process(__FILE__, __LINE__, __PRETTY_FUNCTION__, warningType, header, \ + body) + +// For ZResource-related stuff (preamble contains function,file,line; processed file; extracted file +// and offset) +#define HANDLE_ERROR_RESOURCE(warningType, parent, resource, offset, header, body) \ + WarningHandler::Error_Resource(__FILE__, __LINE__, __PRETTY_FUNCTION__, warningType, parent, \ + resource, offset, header, body) +#define HANDLE_WARNING_RESOURCE(warningType, parent, resource, offset, header, body) \ + WarningHandler::Warning_Resource(__FILE__, __LINE__, __PRETTY_FUNCTION__, warningType, parent, \ + resource, offset, header, body) + +// ======================================= + +enum class WarningType +{ + Always, // Warnings of this type are always printed, cannot be disabled. + Deprecated, + Unaccounted, + MissingOffsets, + Intersection, + MissingAttribute, + InvalidAttributeValue, + UnknownAttribute, + InvalidXML, + InvalidJPEG, + InvalidPNG, + InvalidExtractedData, + MissingSegment, + HardcodedPointer, + NotImplemented, + Max, +}; + +enum class WarningLevel +{ + Off, + Warn, + Err, +}; + +class WarningHandler +{ +public: + static void ConstructTypeToInfoMap(); + + static void Init(int argc, char* argv[]); + + static bool IsWarningEnabled(WarningType warnType); + static bool WasElevatedToError(WarningType warnType); + + static void FunctionPreamble(const char* filename, int32_t line, const char* function); + static void ProcessedFilePreamble(); + static void ExtractedFilePreamble(const ZFile* parent, const ZResource* res, + const uint32_t offset); + static std::string ConstructMessage(std::string message, const std::string& header, + const std::string& body); + + [[noreturn]] static void PrintErrorAndThrow(const std::string& header, const std::string& body); + static void PrintWarningBody(const std::string& header, const std::string& body); + + [[noreturn]] static void ErrorType(WarningType warnType, const std::string& header, + const std::string& body); + [[noreturn]] static void Error_Plain(const char* filename, int32_t line, const char* function, + WarningType warnType, const std::string& header, + const std::string& body); + [[noreturn]] static void Error_Process(const char* filename, int32_t line, const char* function, + WarningType warnType, const std::string& header, + const std::string& body); + [[noreturn]] static void Error_Resource(const char* filename, int32_t line, + const char* function, WarningType warnType, + const ZFile* parent, const ZResource* res, + const uint32_t offset, const std::string& header, + const std::string& body); + + static void WarningTypeAndChooseEscalate(WarningType warnType, const std::string& header, + const std::string& body); + + static void Warning_Plain(const char* filename, int32_t line, const char* function, + WarningType warnType, const std::string& header, + const std::string& body); + static void Warning_Process(const char* filename, int32_t line, const char* function, + WarningType warnType, const std::string& header, + const std::string& body); + static void Warning_Resource(const char* filename, int32_t line, const char* function, + WarningType warnType, const ZFile* parent, const ZResource* res, + const uint32_t offset, const std::string& header, + const std::string& body); + + static void PrintHelp(); + static void PrintWarningsDebugInfo(); +}; |
