Repository Analysis

zufuliu/notepad4

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.

3.5 Likely human-written View on GitHub

Analysis Overview

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).

3.5
Adjusted Score
3.5
Raw Score
100%
Time Factor
2026-07-14
Last Push
4.8K
Stars
C++
Language
164.4K
Lines of Code
337
Files
638
Pattern Hits
2026-07-14
Scan Date
0.02
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

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.

No multi-scan history yet — run the scanner again to build trend data.

Severity Breakdown

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.

CRITICAL 0HIGH 7MEDIUM 1LOW 630

Directory Score Breakdown

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.

Pattern Findings

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.

Over-Commented Block478 hits · 400 pts
SeverityFileLineSnippetContext
LOWversion.sh1#!/bin/bashCOMMENT
LOWLicense.txt121COMMENT
LOWLicense.txt161COMMENT
LOWtools/ResourceFile.py81COMMENT
LOWtools/ImageTool.py361COMMENT
LOWtools/KeywordHelper.py201# https://github.com/w3c/csswg-drafts/COMMENT
LOWtools/lang/C.c41#elifCOMMENT
LOWtools/lang/POSIX.c1// https://en.wikipedia.org/wiki/C_POSIX_libraryCOMMENT
LOWtools/lang/Swift.swift81#endifCOMMENT
LOWtools/lang/Swift.swift101#colorLiteral(red: expression, green: expression, blue: expression, alpha: expression)COMMENT
LOWtools/lang/JavaScript.js1// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammarCOMMENT
LOWtools/lang/JavaScript.js41COMMENT
LOWtools/lang/Rust.rs101format_args_nl!()COMMENT
LOWtools/lang/Rust.rs121#[macro_use]COMMENT
LOWtools/lang/Rust.rs141#![crate_type]COMMENT
LOWtools/lang/Rust.rs161#![no_implicit_prelude]COMMENT
LOWtools/lang/CSS.css1// 2026 https://www.w3.org/TR/CSS/ 26 March 2026COMMENT
LOWtools/lang/Bash.sh1#!/bin/bashCOMMENT
LOWtools/lang/CSharp.cs61#nullable enableCOMMENT
LOWtools/lang/PHP.php41enum resource numericCOMMENT
LOWmatepath/src/Helpers.cpp21#include <windows.h>COMMENT
LOWmatepath/src/Helpers.cpp2281// me a line if you use them!COMMENT
LOWmatepath/src/Helpers.cpp2301#define IDANI_CLOSE 2COMMENT
LOWmatepath/src/Helpers.cpp2361COMMENT
LOWmatepath/src/matepath.cpp21#include <windows.h>COMMENT
LOWmatepath/src/version.h21COMMENT
LOWmatepath/src/version.h41#define VERSION_BUILD_TOOL_MAJOR (__INTEL_LLVM_COMPILER / 10000)COMMENT
LOWmatepath/src/version.h61#define VERSION_BUILD_TOOL_MINOR ((__INTEL_COMPILER_BUILD_DATE / 100) % 100)COMMENT
LOWmatepath/src/version.h81 #define VERSION_FILEVERSION_ARCH L" (avx2) "COMMENT
LOWmatepath/src/compiler.h41#elseCOMMENT
LOWmatepath/src/compiler.h61#define _WIN32_WINNT_WIN7 0x0601COMMENT
LOWmatepath/src/config.h1// This file is part of Notepad4.COMMENT
LOWmatepath/src/DarkMode.cpp1// This file is part of Notepad4.COMMENT
LOWmatepath/src/Dialogs.cpp21#define OEMRESOURCE // use OBM_ resource constantsCOMMENT
LOWmatepath/src/Dialogs.cpp2201 }COMMENT
LOWmatepath/src/Dlapi.cpp21#include <windows.h>COMMENT
LOWmatepath/src/Dlapi.cpp81 // Initialize default icons - done in DirList_Fill()COMMENT
LOWmatepath/src/Dlapi.cpp741COMMENT
LOWmatepath/src/Dlapi.cpp1021COMMENT
LOWmatepath/src/Dlapi.h41COMMENT
LOWmatepath/src/VersionRev.h1#define VERSION_MINOR 26COMMENT
LOWmatepath/src/resource.h1//{{NO_DEPENDENCIES}}COMMENT
LOWmatepath/src/resource.h21#define IDB_TOOLBAR48 104COMMENT
LOWmatepath/src/resource.h41#define IDC_NEW_PAGE_LINK 103COMMENT
LOWmatepath/src/resource.h61#define IDC_BROWSEFILTER 101COMMENT
LOWmatepath/src/resource.h81#define IDC_TRACKSELECT 101COMMENT
LOWmatepath/src/resource.h101#define IDC_ESCFUNCTION 107COMMENT
LOWmatepath/src/resource.h121#define IDC_BROWSE_F 103COMMENT
LOWmatepath/src/resource.h141// Find WindowCOMMENT
LOWmatepath/src/resource.h161#define IDS_OPENWITH 11008COMMENT
LOWmatepath/src/resource.h181#define IDM_FILE_DELETE3 40015COMMENT
LOWmatepath/src/resource.h201#define IDM_VIEW_STATUSBAR 40213COMMENT
LOWmatepath/src/resource.h221#define IDS_LANG_ENGLISH_US 40901COMMENT
LOWmatepath/src/resource.h241#define ACC_SELECTTARGET 41007COMMENT
LOWmatepath/src/resource.h261COMMENT
LOWmatepath/src/resource.h281#define IDS_ERR_INICREATE 50019COMMENT
LOWmatepath/src/Helpers.h221#elseCOMMENT
LOWmatepath/src/Helpers.h261}COMMENT
LOWmatepath/src/Helpers.h501 CenterDlgInParentEx(hDlg, GetParent(hDlg));COMMENT
LOWmatepath/src/matepath.h61 RBS_VARHEIGHT | RBS_BANDBORDERS /*| RBS_FIXEDORDER */ | \COMMENT
418 more matches not shown…
Deep Nesting93 hits · 77 pts
SeverityFileLineSnippetContext
LOWtools/StringSwitch.py84CODE
LOWtools/StringSwitch.py114CODE
LOWtools/Misc.py3CODE
LOWtools/CountColor.py35CODE
LOWtools/ImageTool.py44CODE
LOWtools/KeywordHelper.py88CODE
LOWtools/KeywordHelper.py156CODE
LOWtools/KeywordCore.py71CODE
LOWtools/KeywordCore.py195CODE
LOWtools/KeywordCore.py262CODE
LOWtools/KeywordCore.py295CODE
LOWtools/KeywordCore.py343CODE
LOWtools/KeywordCore.py447CODE
LOWtools/KeywordCore.py547CODE
LOWtools/KeywordCore.py596CODE
LOWtools/KeywordCore.py657CODE
LOWtools/KeywordCore.py790CODE
LOWtools/KeywordCore.py840CODE
LOWtools/KeywordCore.py1011CODE
LOWtools/KeywordCore.py1096CODE
LOWtools/KeywordCore.py1201CODE
LOWtools/KeywordCore.py1293CODE
LOWtools/KeywordCore.py1353CODE
LOWtools/KeywordCore.py1475CODE
LOWtools/KeywordCore.py1512CODE
LOWtools/KeywordCore.py1555CODE
LOWtools/KeywordCore.py1751CODE
LOWtools/KeywordCore.py1799CODE
LOWtools/KeywordCore.py1865CODE
LOWtools/KeywordCore.py1913CODE
LOWtools/KeywordCore.py1972CODE
LOWtools/KeywordCore.py1999CODE
LOWtools/KeywordCore.py2055CODE
LOWtools/KeywordCore.py2158CODE
LOWtools/KeywordCore.py2182CODE
LOWtools/KeywordCore.py2260CODE
LOWtools/KeywordCore.py2356CODE
LOWtools/KeywordCore.py2374CODE
LOWtools/KeywordCore.py2419CODE
LOWtools/KeywordCore.py2463CODE
LOWtools/KeywordCore.py2585CODE
LOWtools/KeywordCore.py2663CODE
LOWtools/KeywordCore.py2727CODE
LOWtools/KeywordCore.py2767CODE
LOWtools/KeywordCore.py2873CODE
LOWtools/KeywordCore.py2898CODE
LOWtools/Bitmap.py428CODE
LOWtools/Bitmap.py597CODE
LOWtools/Bitmap.py646CODE
LOWtools/Bitmap.py752CODE
LOWtools/AccessKey.py4CODE
LOWtools/AccessKey.py25CODE
LOWlocale/Locale.py462CODE
LOWlocale/Locale.py198CODE
LOWlocale/Locale.py331CODE
LOWscintilla/test/BatchTest.py4CODE
LOWscintilla/test/DBCSFoldMap.py8CODE
LOWscintilla/scripts/GenerateCharTable.py140CODE
LOWscintilla/scripts/GenerateCharacterCategory.py371CODE
LOWscintilla/scripts/GenerateCharacterCategory.py473CODE
33 more matches not shown…
Cross-Language Confusion6 hits · 35 pts
SeverityFileLineSnippetContext
HIGHscintilla/test/EncodingDump.py105 print(f'code page {codePage} total undefined: {undefined} diff: {diff} control: {control}\n')CODE
HIGHscintilla/test/EncodingDump.py136 print(f'code page {codePage} total undefined: {undefined} diff: {diff} control: {control}\n')CODE
HIGHscintilla/scripts/GenerateCharacterCategory.py257 # undefined, treat as Cn, Not assignedCOMMENT
HIGHscintilla/scripts/GenerateCharacterCategory.py423 if (character < 0 || character > maxUnicode) {CODE
HIGHscintilla/scripts/GenerateCharacterCategory.py467 # undefined, treat as Cn, Not assignedCOMMENT
HIGHscintilla/scripts/UnicodeData.py65 length = WideCharToMultiByte(self.codePage, self.flags, ctypes.c_wchar_p(source), srcLen, result, size, null, null)CODE
Hyper-Verbose Identifiers36 hits · 33 pts
SeverityFileLineSnippetContext
LOWtools/StringSwitch.py108def _get_switch_default_return(switch_type, option_set):CODE
LOWtools/ResourceFile.py19def increase_style_resource_id_value(doc, delta=100):CODE
LOWtools/ResourceFile.py23def generate_lexer_menu_resource_id(doc):CODE
LOWtools/ResourceFile.py73def remove_use_xp_file_dialog(doc):CODE
LOWtools/ImageTool.py171def resize_toolbar_bitmap_whole(path, percent, method=ResizeMethod.Bicubic, out_path=None):CODE
LOWtools/ImageTool.py187def resize_toolbar_bitmap_each(path, percent, method=ResizeMethod.Bicubic, out_path=None):CODE
LOWtools/ImageTool.py213def make_matepath_toolbar_bitmap(size):CODE
LOWtools/ImageTool.py234def make_all_matepath_toolbar_bitmap():CODE
LOWtools/ImageTool.py322def make_matepath_icon_and_cursor():CODE
LOWtools/KeywordHelper.py156def group_powershell_commands(path):STRING
LOWtools/KeywordHelper.py178def find_new_texinfo_commands(path, lang):STRING
LOWtools/KeywordCore.py262def parse_actionscript_api_file(path):CODE
LOWtools/KeywordCore.py295def parse_autohotkey_api_file(pathList):CODE
LOWtools/KeywordCore.py635def parse_coffeescript_api_file(path):CODE
LOWtools/KeywordCore.py1353def parse_inno_setup_api_file(path):CODE
LOWtools/KeywordCore.py1555def parse_javascript_api_file(path):CODE
LOWtools/KeywordCore.py1825def parse_mathematica_api_file(path):CODE
LOWtools/KeywordCore.py1972def parse_powerbuilder_api_file(path):CODE
LOWtools/KeywordCore.py1999def parse_powershell_api_file(path):CODE
LOWtools/KeywordCore.py2205def parse_resource_script_api_file(path):CODE
LOWtools/KeywordCore.py2551def parse_typescript_api_file(path):CODE
LOWtools/KeywordCore.py2663def parse_visual_basic_api_file(pathList):CODE
LOWtools/KeywordCore.py2767def parse_wasm_lexer_keywords(path):CODE
LOWtools/lang/Ruby.rb182 def singleton_method_undefined(symbol) =CODE
LOWtools/lang/Ruby.rb267 def protected_instance_methods(include_super=true) = arrayCODE
LOWlocale/Locale.py40def update_resource_include_path(path, matepath):CODE
LOWlocale/Locale.py100def restore_resource_include_path(path, matepath):CODE
LOWlocale/Locale.py117def copy_back_localized_resources(language):CODE
LOWscintilla/scripts/LaTeXInput.py41def find_word_contains_punctuation(items):CODE
LOWscintilla/scripts/LaTeXInput.py141def update_latex_input_data_hash(input_name, input_map, multiplier, hash_size):CODE
LOWscintilla/scripts/LaTeXInput.py231def update_all_latex_input_data_hash(latex_map=None, emoji_map=None):CODE
LOWscintilla/scripts/LaTeXInput.py262def update_latex_input_data_linear(input_name, input_map, path, param):CODE
LOWscintilla/scripts/LaTeXInput.py408def update_all_latex_input_data_linear(latex_map=None, emoji_map=None):STRING
LOWscintilla/scripts/LaTeXInput.py462def update_latex_input_header(latex_map, emoji_map):STRING
LOWscintilla/scripts/LaTeXInput.py514def parse_julia_unicode_input_html(path):STRING
LOWscintilla/scripts/LaTeXInput.py584def parse_iamcal_emoji_data_json(path):STRING
Unused Imports16 hits · 16 pts
SeverityFileLineSnippetContext
LOWtools/ImageTool.py4CODE
LOWtools/KeywordCore.py9CODE
LOWtools/KeywordUpdate.py1CODE
LOWscintilla/test/DBCSFoldMap.py4CODE
LOWscintilla/test/EncodingDump.py5CODE
LOWscintilla/scripts/GenerateCharacterCategory.py10CODE
LOWscintilla/scripts/GenerateCharacterCategory.py11CODE
LOWscintilla/scripts/DBCS.py4CODE
LOWscintilla/scripts/GenerateCaseConvert.py25CODE
LOWscintilla/scripts/GenerateCaseConvert.py26CODE
LOWscintilla/scripts/GenerateLineBreak.py9CODE
LOWscintilla/scripts/GenerateLineBreak.py10CODE
LOWscintilla/scripts/GenerateGraphemeBreak.py5CODE
LOWscintilla/scripts/GenerateGraphemeBreak.py6CODE
LOWscintilla/scripts/EastAsianWidth.py4CODE
LOWscintilla/scripts/EastAsianWidth.py5CODE
Cross-Language Confusion (JS/TS)1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHtools/lang/JavaScript.js1081 print()CODE
Excessive Try-Catch Wrapping4 hits · 4 pts
SeverityFileLineSnippetContext
LOWtools/Bitmap.py906 except Exception:CODE
LOWtools/AccessKey.py59 except Exception as ex:CODE
LOWlocale/Locale.py402 except Exception:CODE
LOWscintilla/test/BashTest.py40 except Exception:CODE
Self-Referential Comments1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMversion.sh4# This file is part of MPC-HC.COMMENT
AI Structural Patterns2 hits · 2 pts
SeverityFileLineSnippetContext
LOWtools/LexerConfig.py1545CODE
LOWscintilla/scripts/GenerateCaseConvert.py141CODE
Modern Structural Boilerplate1 hit · 1 pts
SeverityFileLineSnippetContext
LOWtools/Bitmap.py8__all__ = ['Bitmap', 'Color', 'Icon', 'Image', 'ResizeMethod', 'QuantizeMethod']CODE