LÖVE is an awesome 2D game framework for Lua.
This report summarizes scanner evidence for love2d/love, a C++ project with 8,895 GitHub stars. SynthScan examined 602,179 lines of code across 1061 source files, recording 1288 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 2.1 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 1240 finding(s).
Are imports declared and package/API names verified? 0 finding(s).
Are wrappers, guards, and repeated structures necessary? 53 finding(s).
Which changes need focused human review? 1288 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 1288 distinct pattern matches across 9 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | CMakeLists.txt | 1 | # | COMMENT |
| LOW | CMakeLists.txt | 1341 | # | COMMENT |
| LOW | CMakeLists.txt | 1781 | # | COMMENT |
| LOW | CMakeLists.txt | 1801 | # | COMMENT |
| LOW | CMakeLists.txt | 1821 | # vulkan headers | COMMENT |
| LOW | CMakeLists.txt | 1841 | # src/libraries/vulkanheaders/vulkan_ios.h | COMMENT |
| LOW | testing/resources/vk_layer_settings.txt | 1 | COMMENT | |
| LOW | testing/resources/vk_layer_settings.txt | 21 | # ===================== | COMMENT |
| LOW | testing/resources/vk_layer_settings.txt | 41 | COMMENT | |
| LOW | testing/resources/vk_layer_settings.txt | 61 | # Handle Wrapping | COMMENT |
| LOW | testing/resources/vk_layer_settings.txt | 81 | COMMENT | |
| LOW | testing/resources/vk_layer_settings.txt | 101 | # ===================== | COMMENT |
| LOW | testing/resources/vk_layer_settings.txt | 121 | # ===================== | COMMENT |
| LOW | testing/resources/vk_layer_settings.txt | 141 | # ===================== | COMMENT |
| LOW | testing/resources/vk_layer_settings.txt | 161 | # <LayerIdentifier>.gpuav_max_buffer_device_addresses | COMMENT |
| LOW | testing/resources/vk_layer_settings.txt | 181 | # with GPU-AV enabled in the VkShaderModuleCreateInfo pNext | COMMENT |
| LOW | testing/resources/vk_layer_settings.txt | 201 | # commands | COMMENT |
| LOW | testing/resources/vk_layer_settings.txt | 221 | # Specifies that the validation layers reserve a descriptor set binding slot for | COMMENT |
| LOW | testing/resources/vk_layer_settings.txt | 241 | #khronos_validation.gpuav_debug_validate_instrumented_shaders = false | COMMENT |
| LOW | testing/resources/vk_layer_settings.txt | 261 | COMMENT | |
| LOW | testing/resources/vk_layer_settings.txt | 281 | # ===================== | COMMENT |
| LOW | testing/resources/vk_layer_settings.txt | 301 | # <LayerIdentifier>.enable_message_limit | COMMENT |
| LOW | .github/workflows/main.yml | 381 | name: test-output-windows-${{ steps.vars.outputs.arch }}-opengles-${{ steps.report2.outputs.conclusion }} | COMMENT |
| LOW | .github/workflows/main.yml | 401 | # powershell.exe C:/VulkanSDK/1.3.231.1/runtime/x64/vulkaninfo.exe --summary | COMMENT |
| LOW | src/love.cpp | 21 | #include "common/version.h" | COMMENT |
| LOW | src/love.cpp | 41 | #include <windows.h> | COMMENT |
| LOW | src/libraries/enet/enet.cpp | 21 | * THE SOFTWARE. | COMMENT |
| LOW | src/libraries/enet/libenet/unix.c | 1 | /** | COMMENT |
| LOW | src/libraries/enet/libenet/unix.c | 21 | COMMENT | |
| LOW | src/libraries/enet/libenet/unix.c | 41 | #ifndef HAS_GETADDRINFO | COMMENT |
| LOW | src/libraries/enet/libenet/include/enet/enet.h | 21 | #include "enet/types.h" | COMMENT |
| LOW | src/libraries/enet/libenet/include/enet/win32.h | 1 | /** | COMMENT |
| LOW | src/libraries/enet/libenet/include/enet/win32.h | 41 | #else | COMMENT |
| LOW | src/libraries/enet/libenet/include/enet/unix.h | 1 | /** | COMMENT |
| LOW | src/libraries/enet/libenet/include/enet/unix.h | 41 | #define ENET_SOCKETSET_EMPTY(sockset) FD_ZERO (& (sockset)) | COMMENT |
| LOW | src/libraries/Wuff/wuff.h | 21 | #define WUFF_EXPORT __declspec(dllexport) | COMMENT |
| LOW | src/libraries/Wuff/wuff.h | 241 | COMMENT | |
| LOW | src/libraries/Wuff/wuff_internal.h | 1 | #ifndef WUFF_INTERNAL_H | COMMENT |
| LOW | src/libraries/Wuff/wuff_config.h | 1 | #ifndef WUFF_CONFIG_H | COMMENT |
| LOW | src/libraries/tinyexr/tinyexr.h | 21 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | COMMENT |
| LOW | src/libraries/tinyexr/tinyexr.h | 41 | // notice, this list of conditions and the following disclaimer. | COMMENT |
| LOW | src/libraries/tinyexr/tinyexr.h | 61 | // | COMMENT |
| LOW | src/libraries/tinyexr/tinyexr.h | 81 | // #include "tinyexr.h" | COMMENT |
| LOW | src/libraries/tinyexr/tinyexr.h | 101 | #endif | COMMENT |
| LOW | src/libraries/tinyexr/tinyexr.h | 121 | COMMENT | |
| LOW | src/libraries/tinyexr/tinyexr.h | 261 | int width; | COMMENT |
| LOW | src/libraries/tinyexr/tinyexr.h | 281 | extern int IsEXR(const char *filename); | COMMENT |
| LOW | src/libraries/tinyexr/tinyexr.h | 341 | const char *filename, | COMMENT |
| LOW | src/libraries/tinyexr/tinyexr.h | 361 | extern int LoadEXRImageFromFile(EXRImage *image, const EXRHeader *header, | COMMENT |
| LOW | src/libraries/tinyexr/tinyexr.h | 381 | // error | COMMENT |
| LOW | src/libraries/tinyexr/tinyexr.h | 401 | const unsigned char *memory, | COMMENT |
| LOW | src/libraries/tinyexr/tinyexr.h | 421 | const EXRHeader *exr_header, | COMMENT |
| LOW | src/libraries/tinyexr/tinyexr.h | 441 | // Loads multi-part OpenEXR deep image. | COMMENT |
| LOW | src/libraries/tinyexr/tinyexr.h | 461 | COMMENT | |
| LOW | src/libraries/tinyexr/tinyexr.h | 481 | #if __cplusplus > 199711L | COMMENT |
| LOW | src/libraries/tinyexr/tinyexr.h | 501 | namespace tinyexr { | COMMENT |
| LOW | src/libraries/tinyexr/tinyexr.h | 521 | #if TINYEXR_USE_MINIZ | COMMENT |
| LOW | src/libraries/tinyexr/tinyexr.h | 541 | #if __has_warning("-Wmacro-redefined") | COMMENT |
| LOW | src/libraries/tinyexr/tinyexr.h | 821 | COMMENT | |
| LOW | src/libraries/tinyexr/tinyexr.h | 841 | // API's. | COMMENT |
| 1144 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 5 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 13 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 21 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 29 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 36 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 43 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 49 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 56 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 62 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 69 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 76 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 83 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 92 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 101 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 109 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 115 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 121 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 127 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 133 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 141 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 148 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 154 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 160 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 166 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 172 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 178 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 185 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 192 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 198 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 205 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 212 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 219 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 229 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 238 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 244 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 250 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 257 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 263 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 269 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 275 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 281 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 287 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 293 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 300 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 306 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 312 | # ===================== | COMMENT |
| MEDIUM⚡ | testing/resources/vk_layer_settings.txt | 319 | # ===================== | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/libraries/ddsparse/ddsparse.cpp | 63 | // likely written by D3DX. The more robust solution is to use the 'DX10' | COMMENT |
| MEDIUM | src/libraries/tinyexr/tinyexr.h | 7808 | // TODO(syoyo): Add more robust out-of-bounds check in `rleUncompress`. | COMMENT |
| MEDIUM | src/libraries/spirv_cross/spirv_glsl.cpp | 346 | // Sanity check the iteration count to be robust against a certain class of bugs where | COMMENT |
| MEDIUM | src/libraries/spirv_cross/spirv_glsl.cpp | 12383 | // Essentially, we can only remove one set of swizzles, since that's what we have control over ... | COMMENT |
| MEDIUM | src/libraries/spirv_cross/spirv_glsl.cpp | 12642 | // We can look at result type which is more robust. | COMMENT |
| MEDIUM | src/libraries/spirv_cross/spirv_glsl.cpp | 20958 | // Definitely not. | COMMENT |
| MEDIUM | src/libraries/spirv_cross/spirv_msl.cpp | 18658 | // We don't always use proper type hierarchy for synthesized types, so be robust. | COMMENT |
| MEDIUM | src/libraries/spirv_cross/spirv_cross.cpp | 4045 | // Essentially a map of block -> { variables accessed in the basic block } | COMMENT |
| MEDIUM | src/libraries/spirv_cross/spirv_hlsl.cpp | 1843 | // Sort input and output variables based on, from more robust to less robust: | COMMENT |
| MEDIUM | src/libraries/glslang/SPIRV/GlslangToSpv.cpp | 6668 | // TODO: It would be more robust to do a full recursive verification of the types satisfying SPIR-V rules. | COMMENT |
| MEDIUM | …ies/glslang/glslang/MachineIndependent/ParseHelper.cpp | 9943 | // for the parameter to the constructor (passed to this function). Essentially, it converts | COMMENT |
| MEDIUM | src/modules/filesystem/physfs/Filesystem.cpp | 329 | // more robust and more performant, so they should be favored, if possible. | COMMENT |
| MEDIUM | src/modules/font/BMFontRasterizer.cpp | 67 | // This is not entirely robust... | COMMENT |
| MEDIUM | src/modules/graphics/opengl/Graphics.cpp | 327 | // Always enable seamless cubemap filtering when possible. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/libraries/lodepng/lodepng.cpp | 70 | lodepng source code. Don't forget to remove "static" if you copypaste them | CODE |
| LOW | src/libraries/physfs/physfs.h | 1140 | * Don't forget to call PHYSFS_freeList() with the return value from this | COMMENT |
| MEDIUM | src/libraries/box2d/common/b2_settings.cpp | 45 | // You can modify this to use your logging facility. | COMMENT |
| LOW | src/libraries/vma/vk_mem_alloc.h | 16842 | // At the end, don't forget to: | COMMENT |
| LOW | src/libraries/vma/vk_mem_alloc.h | 18895 | // At the end, don't forget to destroy it! | COMMENT |
| LOW | src/libraries/vma/vk_mem_alloc.h | 18930 | // At the end, don't forget to destroy it! | COMMENT |
| LOW | src/libraries/vma/vk_mem_alloc.h | 680 | To prepare for this possibility, don't forget to add appropriate flags like | CODE |
| LOW | src/libraries/vma/vk_mem_alloc.h | 2678 | don't forget to free them. | CODE |
| LOW | src/libraries/vma/vk_mem_alloc.h | 2725 | don't forget to free it as well. | CODE |
| LOW | src/libraries/vma/vk_mem_alloc.h | 16879 | Don't forget to destroy your buffer and allocation objects when no longer needed: | CODE |
| LOW | src/libraries/vma/vk_mem_alloc.h | 18041 | If you allocated a new object to be used as the custom pointer, don't forget to delete that object before freeing the al | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/libraries/vma/vk_mem_alloc.h | 1545 | To be used with function vmaBeginDefragmentationPass(). | CODE |
| LOW | src/libraries/vma/vk_mem_alloc.h | 17115 | The easiest way to copy data from a host pointer to an allocation is to use convenience function vmaCopyMemoryToAllocati | CODE |
| LOW | src/libraries/vma/vk_mem_alloc.h | 17144 | Copy in the other direction - from an allocation to a host pointer can be performed the same way using function vmaCopyA | CODE |
| LOW | src/libraries/vma/vk_mem_alloc.h | 17592 | using default pools with dedicated function vmaCreateBufferWithAlignment(). | CODE |
| LOW | src/libraries/vma/vk_mem_alloc.h | 18257 | use special function vmaCreateBufferWithAlignment(), which takes additional parameter `minAlignment`. | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/libraries/dr/dr_flac.h | 5974 | /* We found a FLAC frame. We need to check if it contains the sample we're looking for. */ | COMMENT |
| LOW | src/libraries/glslang/SPIRV/SpvBuilder.cpp | 4418 | // Step 2: Construct a matrix from that array. | COMMENT |
| LOW | src/libraries/box2d/b2_world.h | 105 | /// The purpose of this function is to support sub-stepping. Sub-stepping is often used to maintain | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/libraries/glslang/SPIRV/SpvBuilder.cpp | 4418 | // Step 2: Construct a matrix from that array. | COMMENT |
| LOW | src/libraries/glslang/SPIRV/GlslangToSpv.cpp | 6639 | // NOTE: This function can handle any store request; if it's not special it | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/modules/love/boot.lua | 503 | print("Error: " .. tostring(main)) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …es/glslang/glslang/MachineIndependent/linkValidate.cpp | 233 | // TODO: implement support for geometry passthrough | COMMENT |