Repository Analysis

ankitects/anki

Anki is a smart spaced repetition flashcard program

6.2 Low AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of ankitects/anki, a Rust project with 29,113 GitHub stars. SynthScan v2.0 examined 189,024 lines of code across 1394 source files, recording 1102 pattern matches distributed across 17 syntactic categories. The overall adjusted score of 6.2 places this repository in the Low AI signal 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).

6.2
Adjusted Score
6.2
Raw Score
100%
Time Factor
2026-07-13
Last Push
29.1K
Stars
Rust
Language
189.0K
Lines of Code
1.4K
Files
1.1K
Pattern Hits
2026-07-14
Scan Date
0.00
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

This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.

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 1HIGH 5MEDIUM 23LOW 1073

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 1102 distinct pattern matches across 17 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.

Unused Imports400 hits · 382 pts
SeverityFileLineSnippetContext
LOWtools/mintlify_hooks.py3CODE
LOWtools/__init__.py3CODE
LOWtools/tests/test_mintlify_hooks.py3CODE
LOWpylib/hatch_build.py5CODE
LOWpylib/hatch_build.py6CODE
LOWpylib/tools/hookslib.py8CODE
LOWpylib/tests/test_stats.py7CODE
LOWpylib/tests/test_exporting.py4CODE
LOWpylib/tests/test_exporting.py10CODE
LOWpylib/tests/test_schedv3.py5CODE
LOWpylib/tests/test_schedv3.py7CODE
LOWpylib/tests/test_schedv3.py8CODE
LOWpylib/tests/test_schedv3.py10CODE
LOWpylib/tests/test_schedv3.py12CODE
LOWpylib/tests/test_schedv3.py13CODE
LOWpylib/tests/test_collection.py8CODE
LOWpylib/tests/test_collection.py12CODE
LOWpylib/tests/shared.py4CODE
LOWpylib/tests/test_importing.py9CODE
LOWpylib/tests/test_importing.py11CODE
LOWpylib/tests/test_find.py8CODE
LOWpylib/tests/test_models.py6CODE
LOWpylib/tests/test_models.py11CODE
LOWpylib/tests/test_httpclient.py4CODE
LOWpylib/anki/tags.py12CODE
LOWpylib/anki/lang.py4CODE
LOWpylib/anki/sound.py10CODE
LOWpylib/anki/db.py12CODE
LOWpylib/anki/hooks.py14CODE
LOWpylib/anki/hooks.py22CODE
LOWpylib/anki/media.py4CODE
LOWpylib/anki/media.py15CODE
LOWpylib/anki/config.py20CODE
LOWpylib/anki/httpclient.py8CODE
LOWpylib/anki/models.py4CODE
LOWpylib/anki/models.py19CODE
LOWpylib/anki/_backend.py4CODE
LOWpylib/anki/_backend.py14CODE
LOWpylib/anki/stdmodels.py4CODE
LOWpylib/anki/cards.py4CODE
LOWpylib/anki/cards.py17CODE
LOWpylib/anki/notes.py4CODE
LOWpylib/anki/consts.py4CODE
LOWpylib/anki/exporting.py5CODE
LOWpylib/anki/utils.py4CODE
LOWpylib/anki/dbproxy.py4CODE
LOWpylib/anki/dbproxy.py13CODE
LOWpylib/anki/stats.py5CODE
LOWpylib/anki/stats.py15CODE
LOWpylib/anki/collection.py4CODE
LOWpylib/anki/collection.py78CODE
LOWpylib/anki/template.py29CODE
LOWpylib/anki/find.py5CODE
LOWpylib/anki/errors.py4CODE
LOWpylib/anki/rsbackend.py9CODE
LOWpylib/anki/rsbackend.py10CODE
LOWpylib/anki/rsbackend.py10CODE
LOWpylib/anki/rsbackend.py11CODE
LOWpylib/anki/rsbackend.py12CODE
LOWpylib/anki/rsbackend.py13CODE
340 more matches not shown…
Hyper-Verbose Identifiers320 hits · 340 pts
SeverityFileLineSnippetContext
LOWtools/tests/test_mintlify_hooks.py10def test_signature_includes_arguments_and_return_type() -> None:CODE
LOWtools/tests/test_mintlify_hooks.py22def test_render_hook_marks_deprecated_docstring() -> None:CODE
LOWtools/tests/test_mintlify_hooks.py45def test_render_hook_marks_obsolete_docstring() -> None:CODE
LOWtools/tests/test_mintlify_hooks.py56def test_safe_escapes_mdx_sensitive_text() -> None:CODE
LOWpylib/tests/test_utils.py52def test_int_version_rejects_garbage():CODE
LOWpylib/tests/test_schedv3.py627def test_filt_reviewing_early_normal():CODE
LOWpylib/tests/test_sound.py9def test_sound_tag_path_relative_joins_media_folder(tmp_path):CODE
LOWpylib/tests/test_sound.py14def test_sound_tag_path_absolute_ignores_media_folder():CODE
LOWpylib/tests/test_sound.py20def test_sound_tag_path_with_directory_separator_uses_abspath():CODE
LOWpylib/tests/test_sound.py29def test_sound_tag_path_applies_media_file_filter(monkeypatch, tmp_path):CODE
LOWpylib/tests/test_sound.py41def test_strip_av_refs_removes_play_tag():CODE
LOWpylib/tests/test_sound.py45def test_strip_av_refs_leaves_unrelated_text_unchanged():CODE
LOWpylib/tests/test_sound.py49def test_strip_av_refs_removes_multiple_tags():CODE
LOWpylib/tests/test_sound.py53def test_av_ref_re_matches_question_side():CODE
LOWpylib/tests/test_sound.py60def test_av_ref_re_matches_answer_side():CODE
LOWpylib/tests/test_sound.py67def test_av_ref_re_does_not_match_legacy_sound_tag():CODE
LOWpylib/tests/test_importing.py244def test_tsv_tag_multiple_tags():CODE
LOWpylib/tests/test_importing.py278def test_csv_tag_only_if_modified():CODE
LOWpylib/tests/test_hooks.py17def test_run_hook_calls_registered_callback():CODE
LOWpylib/tests/test_hooks.py26def test_hook_callback_is_retrievable_by_name():CODE
LOWpylib/tests/test_hooks.py35def test_run_filter_transforms_and_returns_value():CODE
LOWpylib/tests/test_hooks.py43def test_run_filter_chains_multiple_functions():CODE
LOWpylib/tests/test_hooks.py55def test_rem_hook_prevents_callback_from_being_called():CODE
LOWpylib/tests/test_hooks.py64def test_exception_in_hook_does_not_silently_swallow():CODE
LOWpylib/tests/test_hooks.py75def test_exception_in_hook_stops_subsequent_hooks():CODE
LOWpylib/tests/test_hooks.py92def test_exception_in_filter_does_not_silently_swallow():CODE
LOWpylib/tests/test_hooks.py101def test_wrap_after_calls_old_then_new():CODE
LOWpylib/tests/test_hooks.py117def test_wrap_before_calls_new_then_old():CODE
LOWpylib/tests/test_hooks.py133def test_wrap_around_receives_old_as_callable():CODE
LOWpylib/tests/test_cards.py68def test_empty_cards_special_fields():CODE
LOWpylib/tests/test_httpclient.py14def test_http_client_mounts_system_store_adapter() -> None:CODE
LOWpylib/tests/test_httpclient.py23def test_system_store_adapter_does_not_use_certifi_for_default_verification(CODE
LOWpylib/tests/test_httpclient.py26 def fail_if_parent_verification_is_used(*_args, **_kwargs) -> None:CODE
LOWpylib/tests/test_httpclient.py45def test_noverifyssl_disables_ssl_verification(CODE
LOWpylib/anki/lang.py245def without_unicode_isolation(string: str) -> str:CODE
LOWpylib/anki/lang.py249def with_collapsed_whitespace(string: str) -> str:CODE
LOWpylib/anki/media.py23def media_paths_from_col_path(col_path: str) -> tuple[str, str]:CODE
LOWpylib/anki/media.py103 def add_extension_based_on_mime(self, fname: str, content_type: str) -> str:CODE
LOWpylib/anki/media.py152 def extract_static_media_files(self, mid: NotetypeId) -> Sequence[str]:CODE
LOWpylib/anki/models.py380 def get_single_notetype_of_notes(CODE
LOWpylib/anki/models.py410 def restore_notetype_to_stock(CODE
LOWpylib/anki/_backend.py153 def compute_params_from_items(self, items: Iterable[FsrsItem]) -> Sequence[float]:CODE
LOWpylib/anki/_backend.py203def backend_exception_to_pylib(err: backend_pb2.BackendError) -> Exception:CODE
LOWpylib/anki/stdmodels.py74def _legacy_add_basic_typing_model(CODE
LOWpylib/anki/stdmodels.py82def _legacy_add_forward_reverse(CODE
LOWpylib/anki/stdmodels.py90def _legacy_add_forward_optional_reverse(CODE
LOWpylib/anki/cards.py206 def replay_question_audio_on_answer_side(self) -> bool:CODE
LOWpylib/anki/collection.py890 def load_browser_card_columns(self) -> list[str]:CODE
LOWpylib/anki/collection.py902 def load_browser_note_columns(self) -> list[str]:CODE
LOWpylib/anki/collection.py992 def _get_load_balancer_enabled(self) -> bool:CODE
LOWpylib/anki/collection.py995 def _set_load_balancer_enabled(self, value: bool) -> None:CODE
LOWpylib/anki/collection.py1002 def _get_enable_fsrs_short_term_with_steps(self) -> bool:CODE
LOWpylib/anki/collection.py1005 def _set_enable_fsrs_short_term_with_steps(self, value: bool) -> None:CODE
LOWpylib/anki/collection.py142 def initialize_backend_logging() -> None:CODE
LOWpylib/anki/collection.py360 def export_collection_package(CODE
LOWpylib/anki/collection.py431 def export_dataset_for_research(CODE
LOWpylib/anki/collection.py442 def add_image_occlusion_notetype(self) -> None:CODE
LOWpylib/anki/collection.py469 def update_image_occlusion_note(CODE
LOWpylib/anki/collection.py591 def default_deck_for_notetype(self, notetype_id: NotetypeId) -> DeckId | None:CODE
LOWpylib/anki/collection.py618 def remove_cards_and_orphaned_notes(CODE
260 more matches not shown…
Modern Structural Boilerplate155 hits · 162 pts
SeverityFileLineSnippetContext
LOWpylib/anki/lang.py186def set_lang(lang: str) -> None:CODE
LOWpylib/anki/db.py105 def set_progress_handler(self, *args: Any) -> None:CODE
LOWpylib/anki/db.py121 def set_autocommit(self, autocommit: bool) -> None:CODE
LOWpylib/anki/models.py104 def _update_cache(self, notetype: NotetypeDict) -> None:CODE
LOWpylib/anki/models.py327 def set_sort_index(self, notetype: NotetypeDict, idx: int) -> None:CODE
LOWpylib/anki/models.py537 def set_current(self, m: NotetypeDict) -> None:CODE
LOWpylib/anki/_backend.py24logger = logging.getLogger(__name__)CODE
LOWpylib/anki/cards.py172 def set_render_output(self, output: anki.template.TemplateRenderOutput) -> None:CODE
LOWpylib/anki/cards.py235 def set_user_flag(self, flag: int) -> None:CODE
LOWpylib/anki/notes.py193 def set_tags_from_str(self, tags: str) -> None:CODE
LOWpylib/anki/consts.py11logger = logging.getLogger(__name__)CODE
LOWpylib/anki/collection.py898 def set_browser_card_columns(self, columns: list[str]) -> None:CODE
LOWpylib/anki/collection.py910 def set_browser_note_columns(self, columns: list[str]) -> None:CODE
LOWpylib/anki/collection.py995 def _set_load_balancer_enabled(self, value: bool) -> None:CODE
LOWpylib/anki/collection.py1005 def _set_enable_fsrs_short_term_with_steps(self, value: bool) -> None:CODE
LOWpylib/anki/collection.py101logger = logging.getLogger(__name__)CODE
LOWpylib/anki/collection.py239 def set_v3_scheduler(self, enabled: bool) -> None:CODE
LOWpylib/anki/collection.py309 def set_schema_modified(self) -> None:CODE
LOWpylib/anki/collection.py1136 def set_wants_abort(self) -> None:CODE
LOWpylib/anki/decks.py327 def update_config(self, conf: DeckConfigDict, preserve_usn: bool = False) -> None:CODE
LOWpylib/anki/decks.py362 def set_config_id_for_deck_dict(self, deck: DeckDict, id: DeckConfigId) -> None:CODE
LOWpylib/anki/decks.py557 def set_deck(self, cids: list[anki.cards.CardId], did: DeckId) -> None:CODE
LOWpylib/anki/scheduler/legacy.py102 def _updateStats(self, card: Card, type: str, cnt: int = 1) -> None:CODE
LOWqt/hatch_build.py36 def _set_anki_dependency(self, version: str, build_data: Dict[str, Any]) -> None:CODE
LOWqt/aqt/package.py44 def update_progress(progress: Progress, update: ProgressUpdate) -> None:CODE
LOWqt/aqt/deckchooser.py40 def _setup_ui(self, show_label: bool) -> None:CODE
LOWqt/aqt/deckchooser.py86 def _update_button_label(self) -> None:CODE
LOWqt/aqt/sound.py784 def _setup_dialog(self) -> None:CODE
LOWqt/aqt/notetypechooser.py58 def _setup_ui(self, show_label: bool) -> None:CODE
LOWqt/aqt/notetypechooser.py160 def _update_button_label(self) -> None:CODE
LOWqt/aqt/theme.py98 def set_night_mode(self, val: bool) -> None:CODE
LOWqt/aqt/theme.py329 def _update_stat_colors(self) -> None:CODE
LOWqt/aqt/addons.py603 def update_supported_versions(self, items: list[AddonInfo]) -> None:CODE
LOWqt/aqt/addons.py658 def set_config_help_action(self, module: str, action: Callable[[], str]) -> None:CODE
LOWqt/aqt/addons.py1525 def update_info_received(future: Future) -> None:CODE
LOWqt/aqt/addons.py1596 def update_info_received(future: Future) -> None:CODE
LOWqt/aqt/schema_change_tracker.py38 def set_unchanged(self) -> None:CODE
LOWqt/aqt/editor_legacy.py587 def set_cloze_button(self) -> None:CODE
LOWqt/aqt/editor_legacy.py595 def set_image_occlusion_button(self) -> None:CODE
LOWqt/aqt/editor_legacy.py1242 def update_occlusions_field(self) -> None:CODE
LOWqt/aqt/editor_legacy.py1396 def _updateForegroundButton(self) -> None:CODE
LOWqt/aqt/editor_legacy.py730 def _update_duplicate_display(self, result: NoteFieldsCheckResult.V) -> None:STRING
LOWqt/aqt/mediacheck.py62 def _set_progress_enabled(self, enabled: bool) -> None:CODE
LOWqt/aqt/preferences.py75 def _setup_webview(self) -> None:CODE
LOWqt/aqt/preferences.py174 def update_collection(self, on_done: Callable[[], None]) -> None:CODE
LOWqt/aqt/preferences.py221 def update_profile(self) -> None:CODE
LOWqt/aqt/preferences.py255 def update_login_status(self) -> None:CODE
LOWqt/aqt/preferences.py316 def update_network(self) -> None:CODE
LOWqt/aqt/preferences.py402 def update_global(self) -> None:CODE
LOWqt/aqt/preferences.py477 def update_video_driver(self) -> None:CODE
LOWqt/aqt/__init__.py325 def _set_windows_shutdown_block_reason(self, reason: str) -> None:CODE
LOWqt/aqt/addcards_legacy.py62 def set_deck(self, deck_id: DeckId) -> None:CODE
LOWqt/aqt/addcards_legacy.py65 def set_note_type(self, note_type_id: NotetypeId) -> None:CODE
LOWqt/aqt/addcards_legacy.py68 def set_note(self, note: Note, deck_id: DeckId | None = None) -> None:CODE
LOWqt/aqt/deckdescription.py33 def _setup_and_show(self, deck: DeckDict) -> None:CODE
LOWqt/aqt/deckdescription.py41 def _setup_ui(self) -> None:CODE
LOWqt/aqt/clayout.py106 def update_current_ordinal_and_redraw(self, idx: int) -> None:CODE
LOWqt/aqt/debug_console.py83 def _setup_scripts(self) -> None:CODE
LOWqt/aqt/debug_console.py89 def _setup_actions(self) -> None:CODE
LOWqt/aqt/debug_console.py243 def _setup_context_menu(self) -> None:CODE
95 more matches not shown…
Excessive Try-Catch Wrapping98 hits · 100 pts
SeverityFileLineSnippetContext
MEDIUMtools/reload_webviews.py20 print(f"Error: {message}", file=sys.stderr)CODE
LOWtools/reload_webviews.py42except Exception as e:CODE
LOWpylib/tools/hookslib.py129 except Exception:CODE
LOWpylib/tools/hookslib.py165 except Exception:CODE
LOWpylib/tests/test_importing.py28 except Exception:CODE
LOWpylib/anki/lang.py212 except Exception:CODE
LOWpylib/anki/hooks.py37 except Exception:CODE
LOWpylib/anki/hooks.py48 except Exception:CODE
LOWpylib/anki/syncserver.py15 except Exception as exc:CODE
LOWpylib/anki/_backend.py120 except Exception as error:CODE
LOWpylib/anki/_backend.py163 except Exception as error:CODE
LOWpylib/anki/notes.py163 except Exception as exc:CODE
LOWpylib/anki/utils.py31except Exception:CODE
LOWpylib/anki/utils.py217 except Exception:CODE
LOWpylib/anki/utils.py291 except Exception:CODE
LOWpylib/anki/stats.py725 except Exception:CODE
LOWpylib/anki/latex.py173 except Exception:CODE
LOWpylib/anki/importing/apkg.py42 except Exception as exc:CODE
LOWpylib/anki/importing/csvfile.py101 except Exception:CODE
LOWpylib/anki/importing/csvfile.py104 except Exception:CODE
LOWpylib/anki/importing/csvfile.py109 except Exception:CODE
LOWpylib/anki/importing/csvfile.py128 except Exception:CODE
LOWqt/aqt/sync.py52 except Exception as e:CODE
LOWqt/aqt/sync.py112 except Exception as err:CODE
LOWqt/aqt/sync.py261 except Exception as err:CODE
LOWqt/aqt/sync.py293 except Exception as err:CODE
LOWqt/aqt/sync.py323 except Exception as err:CODE
LOWqt/aqt/deckconf.py270 except Exception:CODE
LOWqt/aqt/sound.py377 except Exception as e:CODE
LOWqt/aqt/sound.py390 except Exception as e:CODE
LOWqt/aqt/sound.py570 except Exception as e:CODE
LOWqt/aqt/sound.py870 except Exception as e:CODE
LOWqt/aqt/theme.py357 except Exception:CODE
LOWqt/aqt/importing.py213 except Exception as e:CODE
LOWqt/aqt/importing.py365 except Exception as e:CODE
LOWqt/aqt/importing.py404 except Exception as e:CODE
LOWqt/aqt/ankihub.py42 except Exception as exc:CODE
LOWqt/aqt/addons.py250 except Exception:CODE
LOWqt/aqt/addons.py343 except Exception:CODE
LOWqt/aqt/addons.py501 except Exception:CODE
LOWqt/aqt/addons.py655 except Exception:CODE
LOWqt/aqt/addons.py1134 except Exception as e:CODE
LOWqt/aqt/addons.py1607 except Exception as exc:CODE
LOWqt/aqt/addons.py1719 except Exception as e:CODE
LOWqt/aqt/editor_legacy.py874 except Exception as e:CODE
LOWqt/aqt/editor_legacy.py885 except Exception as e:CODE
LOWqt/aqt/editor_legacy.py1153 except Exception as e:CODE
LOWqt/aqt/preferences.py458 except Exception:CODE
LOWqt/aqt/mpv.py398 except Exception:CODE
LOWqt/aqt/tts.py499 except Exception as exc:CODE
LOWqt/aqt/tts.py515 except Exception:CODE
LOWqt/aqt/tts.py521 except Exception:CODE
LOWqt/aqt/__init__.py233 except Exception:CODE
LOWqt/aqt/__init__.py583 except Exception:CODE
LOWqt/aqt/__init__.py657 except Exception:CODE
LOWqt/aqt/__init__.py741 except Exception:CODE
LOWqt/aqt/debug_console.py351 except Exception:CODE
LOWqt/aqt/changenotetype.py91 except Exception as e:CODE
LOWqt/aqt/exporting.py194 except Exception as exc:CODE
LOWqt/aqt/utils.py1041 except Exception as exc:STRING
38 more matches not shown…
Deep Nesting64 hits · 58 pts
SeverityFileLineSnippetContext
LOWpylib/anki/_backend.py203CODE
LOWpylib/anki/exporting.py199CODE
LOWpylib/anki/utils.py272CODE
LOWpylib/anki/stats.py211CODE
LOWpylib/anki/stats.py959CODE
LOWpylib/anki/collection.py217CODE
LOWpylib/anki/foreign_data/mnemosyne.py175CODE
LOWpylib/anki/scheduler/v3.py66CODE
LOWpylib/anki/scheduler/v3.py152CODE
LOWpylib/anki/scheduler/v3.py188CODE
LOWpylib/anki/scheduler/v3.py216CODE
LOWpylib/anki/importing/noteimp.py116CODE
LOWpylib/anki/importing/anki2.py92CODE
LOWpylib/anki/importing/csvfile.py29CODE
LOWpylib/anki/importing/csvfile.py92CODE
LOWpylib/anki/importing/mnemo.py19CODE
LOWqt/aqt/sync.py138CODE
LOWqt/aqt/sound.py364CODE
LOWqt/aqt/customstudy.py90CODE
LOWqt/aqt/customstudy.py158CODE
LOWqt/aqt/customstudy.py177CODE
LOWqt/aqt/theme.py211CODE
LOWqt/aqt/importing.py338CODE
LOWqt/aqt/importing.py165CODE
LOWqt/aqt/importing.py389CODE
LOWqt/aqt/editor_legacy.py434CODE
LOWqt/aqt/editor_legacy.py1004CODE
LOWqt/aqt/editor_legacy.py1056CODE
LOWqt/aqt/editor_legacy.py1711CODE
LOWqt/aqt/preferences.py484CODE
LOWqt/aqt/mpv.py173CODE
LOWqt/aqt/mpv.py249CODE
LOWqt/aqt/__init__.py479CODE
LOWqt/aqt/__init__.py408CODE
LOWqt/aqt/__init__.py491CODE
LOWqt/aqt/addcards_legacy.py218CODE
LOWqt/aqt/addcards_legacy.py314CODE
LOWqt/aqt/studydeck.py104CODE
LOWqt/aqt/overview.py96CODE
LOWqt/aqt/overview.py152CODE
LOWqt/aqt/utils.py290CODE
LOWqt/aqt/utils.py940CODE
LOWqt/aqt/utils.py127CODE
LOWqt/aqt/reviewer.py203CODE
LOWqt/aqt/reviewer.py221CODE
LOWqt/aqt/reviewer.py502CODE
LOWqt/aqt/reviewer.py675CODE
LOWqt/aqt/editor.py341CODE
LOWqt/aqt/webview.py635CODE
LOWqt/aqt/main.py876CODE
LOWqt/aqt/deckbrowser.py105CODE
LOWqt/aqt/mediasrv.py338CODE
LOWqt/aqt/mediasrv.py450CODE
LOWqt/aqt/mediasrv.py498CODE
LOWqt/aqt/browser/browser.py183CODE
LOWqt/aqt/browser/browser.py220CODE
LOWqt/aqt/browser/previewer.py206CODE
LOWqt/aqt/browser/sidebar/tree.py273CODE
LOWqt/aqt/browser/sidebar/tree.py455CODE
LOWqt/aqt/browser/sidebar/tree.py519CODE
4 more matches not shown…
Over-Commented Block23 hits · 23 pts
SeverityFileLineSnippetContext
LOWftl/copy-core-string.sh1#!/bin/bashCOMMENT
LOWftl/remove-unused.sh1#!/bin/bashCOMMENT
LOWftl/src/main.rs21COMMENT
LOWpylib/tests/test_schedv3.py61 # t = mm.new_template("Reverse")COMMENT
LOWqt/aqt/addons.py181 "properties": {COMMENT
LOWqt/aqt/mpv.py1# ------------------------------------------------------------------------------COMMENT
LOW…ux-template/{{ cookiecutter.format }}/bootstrap/main.c1//COMMENT
LOWrslib/linkchecker/src/lib.rs1// Copyright: Ankitects Pty Ltd and contributorsCOMMENT
LOWrslib/proto_gen/src/lib.rs21use prost_reflect::MessageDescriptor;COMMENT
LOWrslib/src/import_export/text/csv/metadata.rs201 }COMMENT
LOWrslib/src/scheduler/fsrs/params.rs381 (items, card_ids, review_count)COMMENT
LOWrslib/src/sync/version.rs21///COMMENT
LOWrslib/src/revlog/mod.rs41 /// - 0 represents manual rescheduling.COMMENT
LOWts/lib/domlib/surround/surround.test.ts281 });COMMENT
LOWts/lib/domlib/surround/surround.test.ts301// expect(removedNodes).toHaveLength(0);COMMENT
LOWts/lib/domlib/surround/surround.test.ts321// });COMMENT
LOWts/lib/domlib/surround/surround.test.ts341COMMENT
LOWts/lib/domlib/surround/unsurround.test.ts21 unsurround(range, body, easyBold);COMMENT
LOWts/lib/domlib/surround/unsurround.test.ts61 });COMMENT
LOWts/lib/domlib/surround/unsurround.test.ts81// });COMMENT
LOWts/lib/domlib/surround/unsurround.test.ts121 unsurround(range, body, easyBold);COMMENT
LOWts/routes/graphs/graph-styles.ts1// Copyright: Ankitects Pty Ltd and contributorsCOMMENT
LOWts/routes/tmp/_page.ts1// Copyright: Ankitects Pty Ltd and contributorsCOMMENT
Cross-Language Confusion5 hits · 22 pts
SeverityFileLineSnippetContext
HIGHqt/aqt/url_schemes.py57 tr.preferences_url_scheme_warning(link=url.toString(), scheme=url.scheme())CODE
HIGHqt/aqt/editor_legacy.py1703 url = qurl.toString()CODE
HIGHqt/aqt/webview.py972 f"if(globalThis.anki && globalThis.anki.onOperationDidExecute) globalThis.anki.onOperationDidExecute({changeCODE
HIGHqt/aqt/profiles.py415(name text primary key collate nocase, data blob not null);"""STRING
HIGHqt/tests/launch_anki_for_e2e.py69 "create table profiles (name text primary key collate nocase, data blob not null)"CODE
Self-Referential Comments8 hits · 22 pts
SeverityFileLineSnippetContext
MEDIUMpylib/tools/genhooks.py133# This file is automatically generated; edit tools/genhooks.py instead.COMMENT
MEDIUMqt/tools/genhooks_gui.py18# This file is automatically generated; edit tools/genhooks_gui.py instead.COMMENT
MEDIUMqt/aqt/sound.py651 # Create the audio source with the chosen formatCOMMENT
MEDIUMqt/aqt/log.py42 # Create a new add-on loggerCOMMENT
MEDIUMqt/aqt/webview.py159 # Create a new profile if not cachedSTRING
MEDIUMqt/mac/build.sh15# Create the wheel using uvCOMMENT
MEDIUMrslib/i18n/python.rs67# This file is automatically generated from the *.ftl files.COMMENT
MEDIUM.github/scripts/setup_apple_signing.sh9# Create a temporary keychainCOMMENT
Decorative Section Separators6 hits · 20 pts
SeverityFileLineSnippetContext
MEDIUMqt/aqt/mpv.py1# ------------------------------------------------------------------------------COMMENT
MEDIUMqt/aqt/mpv.py25# ------------------------------------------------------------------------------COMMENT
MEDIUMts/tests/e2e/context-switching.spec.ts168// ─── 1. Chooser UI and session behaviour ─────────────────────────────────────COMMENT
MEDIUMts/tests/e2e/context-switching.spec.ts200// ─── 2. addNote payload ───────────────────────────────────────────────────────COMMENT
MEDIUMts/tests/e2e/context-switching.spec.ts242// ─── 3. Mode B: context behaviour (default) ──────────────────────────────────COMMENT
MEDIUMts/tests/e2e/context-switching.spec.ts386// ─── 4. Mode A: reopen context (deck-centric) ────────────────────────────────COMMENT
Hallucination Indicators1 hit · 10 pts
SeverityFileLineSnippetContext
CRITICALqt/aqt/editor_legacy.py1788 path = os.path.join(self.editor.mw.col.media.dir(), file_name)CODE
Verbosity Indicators4 hits · 9 pts
SeverityFileLineSnippetContext
LOWts/tests/e2e/context-switching.spec.ts251 // Step 1: Establish _nt_{cloze}_lastDeck = testDeckId.COMMENT
LOWts/tests/e2e/context-switching.spec.ts258 // Step 2: Reset to Basic + Default so the starting state is deterministic.COMMENT
LOWts/tests/e2e/context-switching.spec.ts264 // Step 3: Switch to Cloze. NoteEditor reads _nt_{cloze}_lastDeck andCOMMENT
LOWts/tests/e2e/context-switching.spec.ts268 // Step 4: Deck chooser must update on its own.COMMENT
Structural Annotation Overuse4 hits · 9 pts
SeverityFileLineSnippetContext
LOWts/tests/e2e/context-switching.spec.ts251 // Step 1: Establish _nt_{cloze}_lastDeck = testDeckId.COMMENT
LOWts/tests/e2e/context-switching.spec.ts258 // Step 2: Reset to Basic + Default so the starting state is deterministic.COMMENT
LOWts/tests/e2e/context-switching.spec.ts264 // Step 3: Switch to Cloze. NoteEditor reads _nt_{cloze}_lastDeck andCOMMENT
LOWts/tests/e2e/context-switching.spec.ts268 // Step 4: Deck chooser must update on its own.COMMENT
AI Slop Vocabulary3 hits · 6 pts
SeverityFileLineSnippetContext
LOWqt/hatch_build.py56 # For editable installs, just add anki without version constraintCOMMENT
MEDIUMqt/tests/launch_anki_for_e2e.py102 # Headless Qt: the e2e harness only needs mediasrv's HTTP stack,COMMENT
MEDIUMts/licenses.json789 "repository": "https://github.com/mourner/robust-predicates",CODE
Redundant / Tautological Comments4 hits · 6 pts
SeverityFileLineSnippetContext
LOWqt/aqt/sound.py705 # Check if we need to convert float samples to int16COMMENT
LOWqt/aqt/importing.py142 # Check if the entered value is valid and if not fallback to defaultCOMMENT
LOWdocs/syncserver/entrypoint.sh15# Check if group exists, create if notCOMMENT
LOWdocs/syncserver/entrypoint.sh20# Check if user exists, create if notCOMMENT
AI Structural Patterns5 hits · 4 pts
SeverityFileLineSnippetContext
LOWpylib/anki/media.py182CODE
LOWqt/aqt/studydeck.py30CODE
LOWqt/aqt/utils.py342CODE
LOWqt/aqt/utils.py127CODE
LOWqt/aqt/mediasrv.py744CODE
Dead Code1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMqt/aqt/importing.py446CODE
Overly Generic Function Names1 hit · 1 pts
SeverityFileLineSnippetContext
LOWqt/aqt/mediasrv.py450def handle_request(pathin: str) -> Response:CODE