Notepad4 (Notepad2⨯2, Notepad2++) is a light-weight Scintilla based text editor for Windows with syntax highlighting, code folding, auto-completion and API list for many programming languages and documents, bundled with file browser plugin matepath.
This report summarizes scanner evidence for zufuliu/notepad4, a C++ project with 5,089 GitHub stars. SynthScan examined 164,666 lines of code across 338 source files, recording 645 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 3.8 (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? 607 finding(s).
Are imports declared and package/API names verified? 23 finding(s).
Are wrappers, guards, and repeated structures necessary? 53 finding(s).
Which changes need focused human review? 645 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 645 distinct pattern matches across 11 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 | version.sh | 1 | #!/bin/bash | COMMENT |
| LOW | License.txt | 121 | COMMENT | |
| LOW | License.txt | 161 | COMMENT | |
| LOW | tools/ResourceFile.py | 81 | COMMENT | |
| LOW | tools/ImageTool.py | 361 | COMMENT | |
| LOW | tools/KeywordHelper.py | 201 | # https://github.com/w3c/csswg-drafts/ | COMMENT |
| LOW | tools/lang/C.c | 41 | #elif | COMMENT |
| LOW | tools/lang/POSIX.c | 1 | // https://en.wikipedia.org/wiki/C_POSIX_library | COMMENT |
| LOW | tools/lang/Swift.swift | 81 | #endif | COMMENT |
| LOW | tools/lang/Swift.swift | 101 | #colorLiteral(red: expression, green: expression, blue: expression, alpha: expression) | COMMENT |
| LOW | tools/lang/JavaScript.js | 1 | // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar | COMMENT |
| LOW | tools/lang/JavaScript.js | 41 | COMMENT | |
| LOW | tools/lang/Rust.rs | 101 | format_args_nl!() | COMMENT |
| LOW | tools/lang/Rust.rs | 121 | #[macro_use] | COMMENT |
| LOW | tools/lang/Rust.rs | 141 | #![crate_type] | COMMENT |
| LOW | tools/lang/Rust.rs | 161 | #![no_implicit_prelude] | COMMENT |
| LOW | tools/lang/CSS.css | 1 | // 2026 https://www.w3.org/TR/CSS/ 26 March 2026 | COMMENT |
| LOW | tools/lang/Bash.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tools/lang/CSharp.cs | 61 | #nullable enable | COMMENT |
| LOW | tools/lang/PHP.php | 41 | enum resource numeric | COMMENT |
| LOW | matepath/src/Helpers.cpp | 21 | #include <windows.h> | COMMENT |
| LOW | matepath/src/Helpers.cpp | 1341 | COMMENT | |
| LOW | matepath/src/Helpers.cpp | 2261 | // 1.1 01.07.2000 The window retains its place in the Z-order of windows | COMMENT |
| LOW | matepath/src/Helpers.cpp | 2281 | #define IDANI_CAPTION 3 | COMMENT |
| LOW | matepath/src/Helpers.cpp | 2421 | // Remove the tray icon. As described above, remove the icon after the | COMMENT |
| LOW | matepath/src/matepath.cpp | 21 | #include <windows.h> | COMMENT |
| LOW | matepath/src/version.h | 21 | COMMENT | |
| LOW | matepath/src/version.h | 41 | #define VERSION_BUILD_TOOL_MAJOR (__INTEL_LLVM_COMPILER / 10000) | COMMENT |
| LOW | matepath/src/version.h | 61 | #define VERSION_BUILD_TOOL_MINOR ((__INTEL_COMPILER_BUILD_DATE / 100) % 100) | COMMENT |
| LOW | matepath/src/version.h | 81 | #define VERSION_FILEVERSION_ARCH L" (avx2) " | COMMENT |
| LOW | matepath/src/compiler.h | 41 | #else | COMMENT |
| LOW | matepath/src/compiler.h | 61 | #define _WIN32_WINNT_WIN7 0x0601 | COMMENT |
| LOW | matepath/src/config.h | 1 | // This file is part of Notepad4. | COMMENT |
| LOW | matepath/src/DarkMode.cpp | 1 | // This file is part of Notepad4. | COMMENT |
| LOW | matepath/src/Dialogs.cpp | 21 | #define OEMRESOURCE // use OBM_ resource constants | COMMENT |
| LOW | matepath/src/Dialogs.cpp | 2081 | ti.hwnd = hwnd; | COMMENT |
| LOW | matepath/src/Dialogs.cpp | 2181 | // bool bEnableOK = false; | COMMENT |
| LOW | matepath/src/Dlapi.cpp | 21 | #include <windows.h> | COMMENT |
| LOW | matepath/src/Dlapi.cpp | 421 | } | COMMENT |
| LOW | matepath/src/Dlapi.h | 41 | COMMENT | |
| LOW | matepath/src/VersionRev.h | 1 | #define VERSION_MINOR 26 | COMMENT |
| LOW | matepath/src/resource.h | 1 | //{{NO_DEPENDENCIES}} | COMMENT |
| LOW | matepath/src/resource.h | 21 | #define IDB_TOOLBAR48 104 | COMMENT |
| LOW | matepath/src/resource.h | 41 | #define IDC_NEW_PAGE_LINK 103 | COMMENT |
| LOW | matepath/src/resource.h | 61 | #define IDC_BROWSEFILTER 101 | COMMENT |
| LOW | matepath/src/resource.h | 81 | #define IDC_TRACKSELECT 101 | COMMENT |
| LOW | matepath/src/resource.h | 101 | #define IDC_ESCFUNCTION 107 | COMMENT |
| LOW | matepath/src/resource.h | 121 | #define IDC_BROWSE_F 103 | COMMENT |
| LOW | matepath/src/resource.h | 141 | // Find Window | COMMENT |
| LOW | matepath/src/resource.h | 161 | #define IDS_OPENWITH 11008 | COMMENT |
| LOW | matepath/src/resource.h | 181 | #define IDM_FILE_DELETE3 40015 | COMMENT |
| LOW | matepath/src/resource.h | 201 | #define IDM_VIEW_UPDATE 40035 | COMMENT |
| LOW | matepath/src/resource.h | 221 | #define ACC_TOGGLE_FOCUSEDIT 40054 | COMMENT |
| LOW | matepath/src/resource.h | 241 | #define IDT_FILE_DELETE_RECYCLE 40082 | COMMENT |
| LOW | matepath/src/resource.h | 261 | #define IDS_ERR_FILE 50001 | COMMENT |
| LOW | matepath/src/resource.h | 281 | #define IDS_CHANGE_LANG_RESTART 50021 | COMMENT |
| LOW | matepath/src/Helpers.h | 521 | #else | COMMENT |
| LOW | matepath/src/Helpers.h | 541 | #endif | COMMENT |
| LOW | matepath/src/Helpers.h | 581 | // High DPI Reference | COMMENT |
| LOW | matepath/src/Helpers.h | 621 | return GetBitmapResourceIdForDPI(resourceId, g_uCurrentDPI); | COMMENT |
| 414 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/StringSwitch.py | 84 | CODE | |
| LOW | tools/StringSwitch.py | 114 | CODE | |
| LOW | tools/Misc.py | 3 | CODE | |
| LOW | tools/CountColor.py | 35 | CODE | |
| LOW | tools/ImageTool.py | 44 | CODE | |
| LOW | tools/KeywordHelper.py | 88 | CODE | |
| LOW | tools/KeywordHelper.py | 156 | CODE | |
| LOW | tools/KeywordCore.py | 71 | CODE | |
| LOW | tools/KeywordCore.py | 198 | CODE | |
| LOW | tools/KeywordCore.py | 265 | CODE | |
| LOW | tools/KeywordCore.py | 298 | CODE | |
| LOW | tools/KeywordCore.py | 346 | CODE | |
| LOW | tools/KeywordCore.py | 450 | CODE | |
| LOW | tools/KeywordCore.py | 550 | CODE | |
| LOW | tools/KeywordCore.py | 599 | CODE | |
| LOW | tools/KeywordCore.py | 660 | CODE | |
| LOW | tools/KeywordCore.py | 793 | CODE | |
| LOW | tools/KeywordCore.py | 843 | CODE | |
| LOW | tools/KeywordCore.py | 1014 | CODE | |
| LOW | tools/KeywordCore.py | 1099 | CODE | |
| LOW | tools/KeywordCore.py | 1204 | CODE | |
| LOW | tools/KeywordCore.py | 1296 | CODE | |
| LOW | tools/KeywordCore.py | 1358 | CODE | |
| LOW | tools/KeywordCore.py | 1480 | CODE | |
| LOW | tools/KeywordCore.py | 1517 | CODE | |
| LOW | tools/KeywordCore.py | 1560 | CODE | |
| LOW | tools/KeywordCore.py | 1756 | CODE | |
| LOW | tools/KeywordCore.py | 1804 | CODE | |
| LOW | tools/KeywordCore.py | 1870 | CODE | |
| LOW | tools/KeywordCore.py | 1918 | CODE | |
| LOW | tools/KeywordCore.py | 1979 | CODE | |
| LOW | tools/KeywordCore.py | 2006 | CODE | |
| LOW | tools/KeywordCore.py | 2062 | CODE | |
| LOW | tools/KeywordCore.py | 2165 | CODE | |
| LOW | tools/KeywordCore.py | 2189 | CODE | |
| LOW | tools/KeywordCore.py | 2267 | CODE | |
| LOW | tools/KeywordCore.py | 2363 | CODE | |
| LOW | tools/KeywordCore.py | 2381 | CODE | |
| LOW | tools/KeywordCore.py | 2426 | CODE | |
| LOW | tools/KeywordCore.py | 2470 | CODE | |
| LOW | tools/KeywordCore.py | 2592 | CODE | |
| LOW | tools/KeywordCore.py | 2670 | CODE | |
| LOW | tools/KeywordCore.py | 2734 | CODE | |
| LOW | tools/KeywordCore.py | 2774 | CODE | |
| LOW | tools/KeywordCore.py | 2882 | CODE | |
| LOW | tools/KeywordCore.py | 2907 | CODE | |
| LOW | tools/Bitmap.py | 428 | CODE | |
| LOW | tools/Bitmap.py | 597 | CODE | |
| LOW | tools/Bitmap.py | 646 | CODE | |
| LOW | tools/Bitmap.py | 752 | CODE | |
| LOW | tools/AccessKey.py | 4 | CODE | |
| LOW | tools/AccessKey.py | 25 | CODE | |
| LOW | locale/Locale.py | 462 | CODE | |
| LOW | locale/Locale.py | 198 | CODE | |
| LOW | locale/Locale.py | 331 | CODE | |
| LOW | scintilla/test/BatchTest.py | 4 | CODE | |
| LOW | scintilla/test/DBCSFoldMap.py | 8 | CODE | |
| LOW | scintilla/scripts/GenerateCharTable.py | 140 | CODE | |
| LOW | scintilla/scripts/GenerateCharTable.py | 178 | CODE | |
| LOW | scintilla/scripts/GenerateCharacterCategory.py | 371 | CODE | |
| 34 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tools/Bitmap.py | 906 | except Exception: | CODE |
| HIGH | scintilla/test/DBCSFoldMap.py | 37 | except UnicodeEncodeError: | CODE |
| HIGH | scintilla/test/EncodingDump.py | 41 | except UnicodeDecodeError: | CODE |
| HIGH | scintilla/test/EncodingDump.py | 47 | except UnicodeDecodeError: | CODE |
| HIGH | scintilla/test/BashTest.py | 40 | except Exception: | CODE |
| HIGH | scintilla/scripts/GenerateCharacterCategory.py | 230 | except UnicodeEncodeError: | CODE |
| HIGH | scintilla/scripts/DBCS.py | 139 | except UnicodeDecodeError: | CODE |
| HIGH | scintilla/scripts/DBCS.py | 173 | except UnicodeDecodeError: | CODE |
| HIGH | scintilla/scripts/DBCS.py | 182 | except UnicodeDecodeError: | CODE |
| HIGH | scintilla/scripts/HFacer.py | 51 | except ValueError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scintilla/test/EncodingDump.py | 105 | print(f'code page {codePage} total undefined: {undefined} diff: {diff} control: {control}\n') | CODE |
| HIGH | scintilla/test/EncodingDump.py | 136 | print(f'code page {codePage} total undefined: {undefined} diff: {diff} control: {control}\n') | CODE |
| HIGH | scintilla/scripts/GenerateCharacterCategory.py | 257 | # undefined, treat as Cn, Not assigned | COMMENT |
| HIGH | scintilla/scripts/GenerateCharacterCategory.py | 423 | if (character < 0 || character > maxUnicode) { | CODE |
| HIGH | scintilla/scripts/GenerateCharacterCategory.py | 467 | # undefined, treat as Cn, Not assigned | COMMENT |
| HIGH | scintilla/scripts/UnicodeData.py | 65 | length = WideCharToMultiByte(self.codePage, self.flags, ctypes.c_wchar_p(source), srcLen, result, size, null, null) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/StringSwitch.py | 108 | def _get_switch_default_return(switch_type, option_set): | CODE |
| LOW | tools/ResourceFile.py | 19 | def increase_style_resource_id_value(doc, delta=100): | CODE |
| LOW | tools/ResourceFile.py | 23 | def generate_lexer_menu_resource_id(doc): | CODE |
| LOW | tools/ResourceFile.py | 73 | def remove_use_xp_file_dialog(doc): | CODE |
| LOW | tools/ImageTool.py | 171 | def resize_toolbar_bitmap_whole(path, percent, method=ResizeMethod.Bicubic, out_path=None): | CODE |
| LOW | tools/ImageTool.py | 187 | def resize_toolbar_bitmap_each(path, percent, method=ResizeMethod.Bicubic, out_path=None): | CODE |
| LOW | tools/ImageTool.py | 213 | def make_matepath_toolbar_bitmap(size): | CODE |
| LOW | tools/ImageTool.py | 234 | def make_all_matepath_toolbar_bitmap(): | CODE |
| LOW | tools/ImageTool.py | 322 | def make_matepath_icon_and_cursor(): | CODE |
| LOW | tools/KeywordHelper.py | 156 | def group_powershell_commands(path): | STRING |
| LOW | tools/KeywordHelper.py | 178 | def find_new_texinfo_commands(path, lang): | STRING |
| LOW | tools/KeywordCore.py | 265 | def parse_actionscript_api_file(path): | CODE |
| LOW | tools/KeywordCore.py | 298 | def parse_autohotkey_api_file(pathList): | CODE |
| LOW | tools/KeywordCore.py | 638 | def parse_coffeescript_api_file(path): | CODE |
| LOW | tools/KeywordCore.py | 1358 | def parse_inno_setup_api_file(path): | CODE |
| LOW | tools/KeywordCore.py | 1560 | def parse_javascript_api_file(path): | CODE |
| LOW | tools/KeywordCore.py | 1830 | def parse_mathematica_api_file(path): | CODE |
| LOW | tools/KeywordCore.py | 1979 | def parse_powerbuilder_api_file(path): | CODE |
| LOW | tools/KeywordCore.py | 2006 | def parse_powershell_api_file(path): | CODE |
| LOW | tools/KeywordCore.py | 2212 | def parse_resource_script_api_file(path): | CODE |
| LOW | tools/KeywordCore.py | 2558 | def parse_typescript_api_file(path): | CODE |
| LOW | tools/KeywordCore.py | 2670 | def parse_visual_basic_api_file(pathList): | CODE |
| LOW | tools/KeywordCore.py | 2774 | def parse_wasm_lexer_keywords(path): | CODE |
| LOW | tools/lang/Ruby.rb | 182 | def singleton_method_undefined(symbol) = | CODE |
| LOW | tools/lang/Ruby.rb | 267 | def protected_instance_methods(include_super=true) = array | CODE |
| LOW | locale/Locale.py | 40 | def update_resource_include_path(path, matepath): | CODE |
| LOW | locale/Locale.py | 100 | def restore_resource_include_path(path, matepath): | CODE |
| LOW | locale/Locale.py | 117 | def copy_back_localized_resources(language): | CODE |
| LOW | scintilla/scripts/LaTeXInput.py | 41 | def find_word_contains_punctuation(items): | CODE |
| LOW | scintilla/scripts/LaTeXInput.py | 141 | def update_latex_input_data_hash(input_name, input_map, multiplier, hash_size): | CODE |
| LOW | scintilla/scripts/LaTeXInput.py | 231 | def update_all_latex_input_data_hash(latex_map=None, emoji_map=None): | CODE |
| LOW | scintilla/scripts/LaTeXInput.py | 262 | def update_latex_input_data_linear(input_name, input_map, path, param): | CODE |
| LOW | scintilla/scripts/LaTeXInput.py | 408 | def update_all_latex_input_data_linear(latex_map=None, emoji_map=None): | STRING |
| LOW | scintilla/scripts/LaTeXInput.py | 462 | def update_latex_input_header(latex_map, emoji_map): | STRING |
| LOW | scintilla/scripts/LaTeXInput.py | 514 | def parse_julia_unicode_input_html(path): | STRING |
| LOW | scintilla/scripts/LaTeXInput.py | 584 | def parse_iamcal_emoji_data_json(path): | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/ImageTool.py | 4 | CODE | |
| LOW | tools/KeywordCore.py | 9 | CODE | |
| LOW | tools/KeywordUpdate.py | 1 | CODE | |
| LOW | scintilla/test/DBCSFoldMap.py | 4 | CODE | |
| LOW | scintilla/test/EncodingDump.py | 5 | CODE | |
| LOW | scintilla/scripts/GenerateCharacterCategory.py | 10 | CODE | |
| LOW | scintilla/scripts/GenerateCharacterCategory.py | 11 | CODE | |
| LOW | scintilla/scripts/DBCS.py | 4 | CODE | |
| LOW | scintilla/scripts/GenerateCaseConvert.py | 25 | CODE | |
| LOW | scintilla/scripts/GenerateCaseConvert.py | 26 | CODE | |
| LOW | scintilla/scripts/GenerateLineBreak.py | 9 | CODE | |
| LOW | scintilla/scripts/GenerateLineBreak.py | 10 | CODE | |
| LOW | scintilla/scripts/GenerateGraphemeBreak.py | 5 | CODE | |
| LOW | scintilla/scripts/GenerateGraphemeBreak.py | 6 | CODE | |
| LOW | scintilla/scripts/EastAsianWidth.py | 4 | CODE | |
| LOW | scintilla/scripts/EastAsianWidth.py | 5 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tools/lang/JavaScript.js | 1081 | print() | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/Bitmap.py | 906 | except Exception: | CODE |
| LOW | tools/AccessKey.py | 59 | except Exception as ex: | CODE |
| LOW | locale/Locale.py | 402 | except Exception: | CODE |
| LOW | scintilla/test/BashTest.py | 40 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | version.sh | 4 | # This file is part of MPC-HC. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/LexerConfig.py | 1562 | CODE | |
| LOW | scintilla/scripts/GenerateCaseConvert.py | 141 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/Bitmap.py | 8 | __all__ = ['Bitmap', 'Color', 'Icon', 'Image', 'ResizeMethod', 'QuantizeMethod'] | CODE |