Repository Analysis

vnotex/vnote

A pleasant note-taking platform in native C++.

1.2 Likely human-written View on GitHub
1.2
Adjusted Score
1.2
Raw Score
100%
Time Factor
2026-05-29
Last Push
12,827
Stars
C++
Language
401,381
Lines of Code
1440
Files
434
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 0HIGH 0MEDIUM 6LOW 428

Pattern Findings

434 matches across 7 categories. Click a row to expand file-level details.

Over-Commented Block361 hits · 361 pts
SeverityFileLineSnippet
LOWtests/CMakeLists.txt1# =============================================================================
LOWtests/core/test_sync_hooks.cpp1// Tests for the F4.5 sync hook surface (vnote.sync.before_enable,
LOWtests/core/test_sync_hooks.cpp21#include <QCoreApplication>
LOWtests/core/test_bootstrap_and_persist.cpp1// Tests for SyncService::bootstrapAndPersist (Task 13.4 / F1.6).
LOWtests/core/test_bootstrap_and_persist.cpp21#include <QJsonObject>
LOWtests/core/test_notebook_hooks.cpp1#include <QFile>
LOWtests/core/test_sync_signal_baseline.cpp1// Characterization test (T1 of sync-queue-convergence plan).
LOWtests/core/test_sync_signal_baseline.cpp21#include <QSignalSpy>
LOWtests/core/test_sync_signal_auto_baseline.cpp1// T2 — Characterization test: current AUTO sync signal sequence.
LOWtests/core/test_sync_signal_auto_baseline.cpp21// This test is a REGRESSION DETECTOR for Wave 2 (T7/T9). If a future change
LOWtests/core/test_sync_signal_auto_baseline.cpp181
LOWtests/core/test_buffer.cpp1#include <QtTest>
LOWtests/core/test_sync_close_block.cpp1// T27 (sync-queue-convergence): NotebookBeforeClose hook refuses to close a
LOWtests/core/stubs_textviewwindowcontroller.cpp1// Stubs for symbols referenced by textviewwindowcontroller.cpp but not
LOWtests/core/test_synccredentialsstore.cpp1// test_synccredentialsstore.cpp - Unit tests for SyncCredentialsStore (T4)
LOWtests/core/test_synccredentialsstore.cpp261// These tests cover the in-memory existence cache introduced for the UI
LOWtests/core/test_vnote3migrationservice.cpp1#include <QtTest>
LOWtests/core/test_notebookcoreservice_sync.cpp1// Tests for the sync wrapper methods on NotebookCoreService.
LOWtests/core/test_eventbridge_sync.cpp1// T17 — EventBridge sync event routing.
LOWtests/core/test_sync_ops.cpp1// T12 (sync-queue-convergence): exercise SyncOps::disableSync — a stateless
LOWtests/core/test_markdowneditorcontroller.cpp1#include <QtTest>
LOWtests/core/test_tagviewer2.cpp1#include <QtTest>
LOWtests/core/test_tagservice.cpp1#include <QtTest>
LOWtests/core/test_textviewwindowcontroller.cpp1#include <QtTest>
LOWtests/core/test_syncservice.cpp1// test_syncservice.cpp - Unit tests for SyncService empty-PAT/URL guards (Task 3)
LOWtests/core/test_sync_auto_route.cpp1// T31 — Auto-sync route end-to-end test.
LOWtests/core/test_sync_auto_route.cpp21#include <core/servicelocator.h>
LOWtests/integration/test_sync_e2e.cpp1// T16 — End-to-end test for the sync conflict resolution flow + retry cap.
LOWtests/integration/test_sync_e2e.cpp21#include <QApplication>
LOWtests/models/test_historylistmodel.cpp1#include <QtTest>
LOWtests/gui/test_navigationmodeservice.cpp1#include <QtTest>
LOWtests/gui/test_themeservice.cpp81
LOWtests/controllers/test_syncconflictcontroller.cpp1// Tests for SyncConflictController (T13) — controller orchestrating
LOWtests/controllers/test_syncconflictcontroller.cpp21#include <QStringList>
LOWtests/controllers/test_syncconflictcontroller.cpp141 // Click OK. This drives the dialog's accepted -> onAccepted() chain which
LOWtests/controllers/test_syncconflictcontroller.cpp201 }
LOWtests/controllers/test_exportcontroller.cpp1#include <QtTest>
LOWtests/controllers/test_bootstrap.cpp1// Tests for NewNotebookController::bootstrapSync (T14).
LOWtests/controllers/test_bootstrap.cpp21#include <QDir>
LOWtests/controllers/test_searchcontroller.cpp1#include <QtTest>
LOWtests/controllers/test_notebooksyncinfocontroller.cpp1// Tests for NotebookSyncInfoController (T11) — controller orchestrating
LOWtests/controllers/test_notebooksyncinfocontroller.cpp21#include <QJsonObject>
LOWtests/controllers/test_notebooksyncinfocontroller.cpp341 // flat keys: syncEnabled is either false or absent).
LOWtests/controllers/test_notebooksyncinfocontroller.cpp841// different URL leaves the on-disk git remote stale → split-brain. The only
LOWtests/controllers/test_openvnote3notebookcontroller.cpp1#include <QtTest>
LOW…ontrollers/test_notebooknodecontroller_multiselect.cpp1#include <QDir>
LOWtests/helpers/test_helper.h1#ifndef TEST_HELPER_H
LOW…ts/widgets/test_notebooksyncinfodialog2_url_change.cpp1// Tests for NotebookSyncInfoDialog2 B1 fix — wiring of the controller's
LOW…ts/widgets/test_notebooksyncinfodialog2_url_change.cpp21#include <QTimer>
LOW…ts/widgets/test_notebooksyncinfodialog2_url_change.cpp121
LOWtests/widgets/test_mainwindow_stub.cpp1// Stub implementations for vnotex::MainWindow.
LOWtests/widgets/test_notebooknodeview_state.cpp1// Tests for NotebookNodeView::getExpandedFolders() and replayExpandedFolders().
LOWtests/widgets/test_syncservice_lifecycle.cpp1// T17: SyncService lifecycle (NotebookBeforeClose hook + bounded shutdown)
LOWtests/widgets/test_syncservice_lifecycle.cpp21// VNOTE_KEYCHAIN_AVAILABLE compile gate).
LOWtests/widgets/test_notebook_explorer_sync_state.cpp1// Tests for NotebookExplorer2 sync state classifier predicates.
LOWtests/widgets/test_notebook_explorer_sync_state.cpp21//
LOWtests/widgets/test_notebooksyncinfodialog2_error.cpp1// Tests for NotebookSyncInfoDialog2 B2 fix — wiring of the controller's
LOWtests/widgets/test_notebooksyncinfodialog2_error.cpp21#include <QtTest>
LOWtests/widgets/test_notebookexplorer2_multiselect.cpp1#include <QtTest>
LOWtests/widgets/test_settings_navigation.cpp1// test_settings_navigation.cpp - Verify SettingsWidget::navigateTo() logic.
301 more matches not shown…
Verbosity Indicators31 hits · 56 pts
SeverityFileLineSnippet
LOWscripts/init.sh19# Step 1: Initialize and update git submodules
LOWscripts/init.sh37# Step 2: Install pre-commit hook for main repository
LOWscripts/init.sh55# Step 3: Install pre-commit hook for vtextedit submodule
LOWsrc/core/services/bufferservice.cpp88 // Step 1: Resolve UUID to notebookId + relativePath (NO buffer opened here).
LOWsrc/core/services/bufferservice.cpp96 // Step 2: Delegate to existing openBuffer() which fires FileBeforeOpen BEFORE
LOWsrc/utils/headingslugger.cpp47 // Step 1: Strip VNote heading sequence numbers.
LOWsrc/utils/headingslugger.cpp55 // Step 2: Unicode-aware lowercase.
LOWsrc/utils/headingslugger.cpp58 // Step 3: Remove characters not in keep-set.
LOWsrc/utils/headingslugger.cpp90 // Step 4: Replace spaces with hyphens.
LOWsrc/controllers/openvnote3notebookcontroller.cpp95 // Step 1: Require user confirmation.
LOWsrc/controllers/openvnote3notebookcontroller.cpp102 // Step 2: Inspect source folder.
LOWsrc/controllers/openvnote3notebookcontroller.cpp110 // Step 3: Validate destination folder.
LOWsrc/controllers/openvnote3notebookcontroller.cpp119 // Step 4: Run conversion.
LOWsrc/controllers/openvnote3notebookcontroller.cpp141 // Step 5: Open the converted notebook via OpenNotebookController.
LOWsrc/controllers/viewareacontroller.cpp885 // Step 1: Get workspace's buffer list from vxcore.
LOWsrc/controllers/viewareacontroller.cpp889 // Step 2: Close each ViewWindow one-by-one with abort-on-cancel.
LOWsrc/controllers/viewareacontroller.cpp910 // Step 3: Remove remaining buffers from vxcore workspace.
LOWsrc/controllers/viewareacontroller.cpp923 // Step 4: Post-removal — find a replacement for the split.
LOWsrc/controllers/viewareacontroller.cpp971 // Step 5: Delete the workspace in vxcore.
LOWsrc/controllers/viewareacontroller.cpp975 // Step 6: Destroy the WorkspaceWrapper.
LOWsrc/controllers/viewareacontroller.cpp1039 // Step 1: HIDE current workspace — take windows from split into wrapper.
LOWsrc/controllers/viewareacontroller.cpp1051 // Step 2: Update split identity (old workspace ID -> new workspace ID).
LOWsrc/controllers/viewareacontroller.cpp1056 // Step 3: SHOW target workspace.
LOWsrc/data/extra/web/js/markdownit.js338 // Step 1: Strip VNote heading sequence numbers.
LOWsrc/data/extra/web/js/markdownit.js342 // Step 2: Unicode-aware lowercase.
LOWsrc/data/extra/web/js/markdownit.js345 // Step 3: Remove characters NOT in keep-set.
LOWsrc/data/extra/web/js/markdownit.js351 // Step 4: Replace spaces with hyphens.
LOWsrc/data/extra/web/js/markdownit.js354 // Step 5: Deduplicate.
LOWsrc/widgets/mainwindow2.cpp918 // Step 1: Apply stylesheet
LOWsrc/widgets/mainwindow2.cpp932 // Step 2: Refresh UI
LOWsrc/widgets/mainwindow2.cpp941 // Step 3: Done
Hyper-Verbose Identifiers34 hits · 34 pts
SeverityFileLineSnippet
LOWsrc/data/extra/web/pdf.js/web/viewer.js3093function webViewerPresentationMode() {
LOWsrc/data/extra/web/pdf.js/web/viewer.js3096function webViewerSwitchAnnotationEditorMode(evt) {
LOWsrc/data/extra/web/pdf.js/web/viewer.js3099function webViewerSwitchAnnotationEditorParams(evt) {
LOWsrc/data/extra/web/pdf.js/web/viewer.js3151function webViewerOptionalContentConfig(evt) {
LOWsrc/data/extra/web/pdf.js/web/viewer.js3154function webViewerSwitchScrollMode(evt) {
LOWsrc/data/extra/web/pdf.js/web/viewer.js3157function webViewerSwitchSpreadMode(evt) {
LOWsrc/data/extra/web/pdf.js/web/viewer.js3160function webViewerDocumentProperties() {
LOWsrc/data/extra/web/pdf.js/web/viewer.js302function backtrackBeforeAllVisibleElements(index, views, top) {
LOWsrc/data/extra/web/pdf.js/web/viewer.js333 function isElementBottomAfterViewTop(view) {
LOWsrc/data/extra/web/pdf.js/web/viewer.js338 function isElementNextAfterViewHorizontally(view) {
LOWsrc/data/extra/web/pdf.js/web/viewer.js407function normalizeWheelEventDirection(evt) {
LOWsrc/data/extra/web/pdf.js/web/viewer.js507function getActiveOrFocusedElement() {
LOWsrc/data/extra/web/pdf.js/web/viewer.js517function apiPageLayoutToViewerModes(layout) {
LOWsrc/data/extra/web/pdf.js/web/viewer.js576 (function checkCanvasSizeLimitation() {
LOWsrc/data/extra/web/pdf.js/web/viewer.js2638 function addWindowResolutionChange() {
LOWsrc/data/extra/web/pdf.js/web/viewer.js2996function webViewerPresentationModeChanged(evt) {
LOWsrc/data/extra/web/pdf.js/web/viewer.js2999function webViewerSidebarViewChanged(_ref8) {
LOWsrc/data/extra/web/pdf.js/web/viewer.js3029function webViewerScrollModeChanged(evt) {
LOWsrc/data/extra/web/pdf.js/web/viewer.js3035function webViewerSpreadModeChanged(evt) {
LOWsrc/data/extra/web/pdf.js/web/viewer.js3133function webViewerPageNumberChanged(evt) {
LOWsrc/data/extra/web/pdf.js/web/viewer.js3176function webViewerUpdateFindMatchesCount(_ref10) {
LOWsrc/data/extra/web/pdf.js/web/viewer.js3186function webViewerUpdateFindControlState(_ref11) {
LOWsrc/data/extra/web/pdf.js/web/viewer.js3208function webViewerRotationChanging(evt) {
LOWsrc/data/extra/web/pdf.js/web/viewer.js3224function webViewerResolutionChange(evt) {
LOWsrc/data/extra/web/pdf.js/web/viewer.js3227function webViewerVisibilityChange(evt) {
LOWsrc/data/extra/web/pdf.js/web/viewer.js3553function webViewerAnnotationEditorStatesChanged(data) {
LOWsrc/data/extra/web/pdf.js/web/viewer.js4237 function findFocusableElementWithin(hostElement) {
LOWsrc/data/extra/web/pdf.js/web/viewer.js9185function isValidAnnotationEditorMode(mode) {
LOWsrc/data/extra/web/js/computed-style-to-inline-style.js19 function computedStyleToInlineStyle(element) {
LOWsrc/data/extra/web/js/viz.js/viz.js193 function svgXmlToImageElementFabric(svgXml) {
LOW…a/web/js/markdown-it/markdown-it-inject-linenumbers.js28 function injectLineNumbersForFence(tokens, idx, options, env, slf) {
LOW…a/web/js/markdown-it/markdown-it-inject-linenumbers.js39 function injectLineNumbersForCodeBlock(tokens, idx, options, env, slf) {
LOW…ata/extra/web/js/markdown-it/markdown-it-imsize.min.js1(function webpackUniversalModuleDefinition(root,factory){if(typeof exports==="object"&&typeof module==="object")module.e
LOWsrc/data/extra/web/js/markdown-it/xss.min.js1(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)ret
Decorative Section Separators5 hits · 15 pts
SeverityFileLineSnippet
MEDIUMCMakeLists.txt25# -----------------------------------------------------------------------------
MEDIUMCMakeLists.txt27# -----------------------------------------------------------------------------
MEDIUMtests/CMakeLists.txt1# =============================================================================
MEDIUMtests/CMakeLists.txt3# =============================================================================
MEDIUMtests/CMakeLists.txt15# =============================================================================
AI Slop Vocabulary1 hit · 2 pts
SeverityFileLineSnippet
MEDIUMsrc/data/extra/web/js/prism/prism.min.js79!function(a){var n="(?:\r?\n|\r)[ \t]*\\|.+\\|.*";Prism.languages.gherkin={pystring:{pattern:/("""|''')[\s\S]+?\1/,alias
Redundant / Tautological Comments1 hit · 2 pts
SeverityFileLineSnippet
LOWscripts/init.sh60# Check if vtextedit is using .git file (submodule) or directory
Slop Phrases1 hit · 1 pts
SeverityFileLineSnippet
LOWsrc/data/extra/syntax-highlighting/syntax/prolog.xml179 add it to "predefined_ops" above (don't forget to escape it).