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 presents the forensic synthetic code analysis of zufuliu/notepad4, a C++ project with 4,815 GitHub stars. SynthScan v2.0 examined 164,442 lines of code across 337 source files, recording 638 pattern matches distributed across 10 syntactic categories. The overall adjusted score of 3.5 places this repository in the Likely human-written band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 638 distinct pattern matches across 10 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| 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 | 2281 | // me a line if you use them! | COMMENT |
| LOW | matepath/src/Helpers.cpp | 2301 | #define IDANI_CLOSE 2 | COMMENT |
| LOW | matepath/src/Helpers.cpp | 2361 | 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 | 2201 | } | COMMENT |
| LOW | matepath/src/Dlapi.cpp | 21 | #include <windows.h> | COMMENT |
| LOW | matepath/src/Dlapi.cpp | 81 | // Initialize default icons - done in DirList_Fill() | COMMENT |
| LOW | matepath/src/Dlapi.cpp | 741 | COMMENT | |
| LOW | matepath/src/Dlapi.cpp | 1021 | 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_STATUSBAR 40213 | COMMENT |
| LOW | matepath/src/resource.h | 221 | #define IDS_LANG_ENGLISH_US 40901 | COMMENT |
| LOW | matepath/src/resource.h | 241 | #define ACC_SELECTTARGET 41007 | COMMENT |
| LOW | matepath/src/resource.h | 261 | COMMENT | |
| LOW | matepath/src/resource.h | 281 | #define IDS_ERR_INICREATE 50019 | COMMENT |
| LOW | matepath/src/Helpers.h | 221 | #else | COMMENT |
| LOW | matepath/src/Helpers.h | 261 | } | COMMENT |
| LOW | matepath/src/Helpers.h | 501 | CenterDlgInParentEx(hDlg, GetParent(hDlg)); | COMMENT |
| LOW | matepath/src/matepath.h | 61 | RBS_VARHEIGHT | RBS_BANDBORDERS /*| RBS_FIXEDORDER */ | \ | COMMENT |
| 418 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 | 195 | CODE | |
| LOW | tools/KeywordCore.py | 262 | CODE | |
| LOW | tools/KeywordCore.py | 295 | CODE | |
| LOW | tools/KeywordCore.py | 343 | CODE | |
| LOW | tools/KeywordCore.py | 447 | CODE | |
| LOW | tools/KeywordCore.py | 547 | CODE | |
| LOW | tools/KeywordCore.py | 596 | CODE | |
| LOW | tools/KeywordCore.py | 657 | CODE | |
| LOW | tools/KeywordCore.py | 790 | CODE | |
| LOW | tools/KeywordCore.py | 840 | CODE | |
| LOW | tools/KeywordCore.py | 1011 | CODE | |
| LOW | tools/KeywordCore.py | 1096 | CODE | |
| LOW | tools/KeywordCore.py | 1201 | CODE | |
| LOW | tools/KeywordCore.py | 1293 | CODE | |
| LOW | tools/KeywordCore.py | 1353 | CODE | |
| LOW | tools/KeywordCore.py | 1475 | CODE | |
| LOW | tools/KeywordCore.py | 1512 | CODE | |
| LOW | tools/KeywordCore.py | 1555 | CODE | |
| LOW | tools/KeywordCore.py | 1751 | CODE | |
| LOW | tools/KeywordCore.py | 1799 | CODE | |
| LOW | tools/KeywordCore.py | 1865 | CODE | |
| LOW | tools/KeywordCore.py | 1913 | CODE | |
| LOW | tools/KeywordCore.py | 1972 | CODE | |
| LOW | tools/KeywordCore.py | 1999 | CODE | |
| LOW | tools/KeywordCore.py | 2055 | CODE | |
| LOW | tools/KeywordCore.py | 2158 | CODE | |
| LOW | tools/KeywordCore.py | 2182 | CODE | |
| LOW | tools/KeywordCore.py | 2260 | CODE | |
| LOW | tools/KeywordCore.py | 2356 | CODE | |
| LOW | tools/KeywordCore.py | 2374 | CODE | |
| LOW | tools/KeywordCore.py | 2419 | CODE | |
| LOW | tools/KeywordCore.py | 2463 | CODE | |
| LOW | tools/KeywordCore.py | 2585 | CODE | |
| LOW | tools/KeywordCore.py | 2663 | CODE | |
| LOW | tools/KeywordCore.py | 2727 | CODE | |
| LOW | tools/KeywordCore.py | 2767 | CODE | |
| LOW | tools/KeywordCore.py | 2873 | CODE | |
| LOW | tools/KeywordCore.py | 2898 | 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/GenerateCharacterCategory.py | 371 | CODE | |
| LOW | scintilla/scripts/GenerateCharacterCategory.py | 473 | CODE | |
| 33 more matches not shown… | ||||
| 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 | 262 | def parse_actionscript_api_file(path): | CODE |
| LOW | tools/KeywordCore.py | 295 | def parse_autohotkey_api_file(pathList): | CODE |
| LOW | tools/KeywordCore.py | 635 | def parse_coffeescript_api_file(path): | CODE |
| LOW | tools/KeywordCore.py | 1353 | def parse_inno_setup_api_file(path): | CODE |
| LOW | tools/KeywordCore.py | 1555 | def parse_javascript_api_file(path): | CODE |
| LOW | tools/KeywordCore.py | 1825 | def parse_mathematica_api_file(path): | CODE |
| LOW | tools/KeywordCore.py | 1972 | def parse_powerbuilder_api_file(path): | CODE |
| LOW | tools/KeywordCore.py | 1999 | def parse_powershell_api_file(path): | CODE |
| LOW | tools/KeywordCore.py | 2205 | def parse_resource_script_api_file(path): | CODE |
| LOW | tools/KeywordCore.py | 2551 | def parse_typescript_api_file(path): | CODE |
| LOW | tools/KeywordCore.py | 2663 | def parse_visual_basic_api_file(pathList): | CODE |
| LOW | tools/KeywordCore.py | 2767 | 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 | 1545 | 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 |