AI Slop Code RIsk Monitor

ankitects/anki

Anki is a smart spaced repetition flashcard program

7.3 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for ankitects/anki, a Rust project with 31,901 GitHub stars. SynthScan examined 198,689 lines of code across 1410 source files, recording 1241 pattern matches distributed across 17 syntactic categories. The legacy adjusted pattern signal is 7.3 (Moderate 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.

7.3
Adjusted Signal
7.3
Raw Pattern Score
100%
Time Factor
2026-10-09
Last Push
31.9K
Stars
Rust
Language
198.7K
Lines of Code
1.4K
Files
1.2K
Pattern Hits
2026-10-12
Scan Date
0.02
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 14.0/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 562 finding(s).

Hallucinated Dependency & Supply Chain Risk 9.4/100 · LOW

Are imports declared and package/API names verified? 386 finding(s).

Agent Over-Engineering Ratio 21.0/100 · LOW

Are wrappers, guards, and repeated structures necessary? 748 finding(s).

PR Review Velocity Impact 30.8/100 · MEDIUM

Which changes need focused human review? 1241 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

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.

Severity Breakdown

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.

CRITICAL 1HIGH 25MEDIUM 45LOW 1170

Directory Score Breakdown

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.

Pattern Findings

The scanner identified 1241 distinct pattern matches across 17 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.

Hyper-Verbose Identifiers450 hits · 466 pts
SeverityFileLineSnippetContext
LOW⚡tools/prepare_release.py168def update_version_and_commit(version: str) -> None:CODE
LOWtools/docs_converter.py255def escape_text_preserve_html(raw: str) -> str:CODE
LOW⚡tools/tests/test_docs_converter.py36 def test_braces_escaped_in_plain_text(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py40 def test_double_braced_field_still_escaped(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py44 def test_anchor_braces_not_escaped(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py49 def test_anchor_braces_not_escaped_with_complex_name(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py56 def test_dollar_escaped_in_plain_text(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py60 def test_double_dollar_not_escaped(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py65 def test_braces_not_escaped_inside_fenced_code(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py71 def test_dollars_not_escaped_inside_fenced_code(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py77 def test_braces_not_escaped_inside_inline_code(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py81 def test_dollars_not_escaped_inside_inline_code(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py87 def test_html_comment_converted_to_mdx(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py93 def test_comment_inside_fenced_code_untouched(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py100 def test_angle_brackets_escaped_in_plain_text(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py105 def test_angle_brackets_not_escaped_inside_fenced_code(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py110 def test_angle_brackets_not_escaped_inside_inline_code(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py116 def test_br_becomes_self_closing(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py120 def test_br_closing_tag_dropped(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py124 def test_img_becomes_self_closing(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py128 def test_source_becomes_self_closing(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py138 def test_hr_becomes_self_closing(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py144 def test_unquoted_attr_gets_quoted(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py159 def test_title_quotes_escaped(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py163 def test_original_heading_removed(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py176 def test_md_extension_removed(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py181 def test_html_extension_removed(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py186 def test_md_extension_removed_with_anchor(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py190 def test_md_extension_removed_with_query(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py194 def test_non_md_link_unchanged(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py198 def test_relative_nested_link_gets_dot_slash_prefix(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py202 def test_dot_slash_link_is_not_double_prefixed(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py206 def test_root_relative_link_is_not_prefixed(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py210 def test_root_relative_html_extension_removed_with_query_and_anchor(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py214 def test_absolute_html_extension_removed_with_query_and_anchor(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py229 def test_heading_anchor_not_escaped(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py241 def test_url_autolink_expanded(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py245 def test_email_autolink_gets_mailto(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py256 def test_note_admonish_converted(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py263 def test_warning_admonish_converted(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py268 def test_danger_admonish_converted(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py273 def test_summary_admonish_gets_heading(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py279 def test_info_admonish_converted(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py284 def test_caution_admonish_maps_to_warning(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py289 def test_example_admonish_maps_to_info(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py301 def test_docs_ankiweb_net_converted(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py306 def test_faqs_domain_converted(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py321 def test_ankimobile_domain_converted(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py325 def test_addon_docs_domain_converted(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py329 def test_anchor_preserved_after_conversion(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py333 def test_language_prefix_prepended(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py337 def test_autolink_url_also_converted(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py350 def test_unrecognised_domain_not_converted(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py365 def test_toc_comment_case_insensitive(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py376 def test_angle_brackets_not_escaped_in_indented_block(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py380 def test_braces_escaped_in_indented_block(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py384 def test_dollars_escaped_in_indented_block(self) -> None:CODE
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
390 more matches not shown…
Unused Imports380 hits · 361 pts
SeverityFileLineSnippetContext
LOWtools/mintlify_hooks.py3CODE
LOWtools/__init__.py3CODE
LOWtools/tests/test_docs_converter.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_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_find.py8CODE
LOWpylib/tests/test_config.py4CODE
LOWpylib/tests/test_models.py6CODE
LOWpylib/tests/test_models.py11CODE
LOWpylib/tests/test_httpclient.py4CODE
LOWpylib/tests/test_stdmodels.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/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
LOWpylib/anki/rsbackend.py13CODE
LOWpylib/anki/decks.py4CODE
320 more matches not shown…
Modern Structural Boilerplate155 hits · 162 pts
SeverityFileLineSnippetContext
LOW⚡tools/prepare_release.py168def update_version_and_commit(version: str) -> None:CODE
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
LOW⚡pylib/anki/collection.py898 def set_browser_card_columns(self, columns: list[str]) -> None:CODE
LOW⚡pylib/anki/collection.py910 def set_browser_note_columns(self, columns: list[str]) -> None:CODE
LOW⚡pylib/anki/collection.py995 def _set_load_balancer_enabled(self, value: bool) -> None:CODE
LOW⚡pylib/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.py606 def update_supported_versions(self, items: list[AddonInfo]) -> None:CODE
LOWqt/aqt/addons.py661 def set_config_help_action(self, module: str, action: Callable[[], str]) -> None:CODE
LOWqt/aqt/addons.py1531 def update_info_received(future: Future) -> None:CODE
LOWqt/aqt/addons.py1602 def update_info_received(future: Future) -> None:CODE
LOWqt/aqt/schema_change_tracker.py38 def set_unchanged(self) -> None:CODE
LOW⚡qt/aqt/editor_legacy.py587 def set_cloze_button(self) -> None:CODE
LOW⚡qt/aqt/editor_legacy.py595 def set_image_occlusion_button(self) -> None:CODE
LOWqt/aqt/editor_legacy.py1240 def update_occlusions_field(self) -> None:CODE
LOWqt/aqt/editor_legacy.py1394 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/__init__.py353 def _set_windows_shutdown_block_reason(self, reason: str) -> None:CODE
LOW⚡qt/aqt/addcards_legacy.py62 def set_deck(self, deck_id: DeckId) -> None:CODE
LOW⚡qt/aqt/addcards_legacy.py65 def set_note_type(self, note_type_id: NotetypeId) -> None:CODE
LOW⚡qt/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…
Decorative Section Separators26 hits · 106 pts
SeverityFileLineSnippetContext
MEDIUM⚡tools/tests/test_docs_converter.py30# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py32# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py149# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py151# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py170# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py172# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py223# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py225# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py235# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py237# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py250# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py252# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py295# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py297# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py355# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py357# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py370# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py372# ===========================================================================COMMENT
MEDIUMtools/tests/test_docs_converter.py10# ---------------------------------------------------------------------------COMMENT
MEDIUMtools/tests/test_docs_converter.py12# ---------------------------------------------------------------------------COMMENT
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
MEDIUM⚡ts/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
Empty Error Handlers20 hits · 100 pts
SeverityFileLineSnippetContext
HIGHpylib/tests/test_collection.py23except OSError:CODE
HIGHpylib/tests/test_models.py401except NotFoundError:CODE
HIGHpylib/anki/media.py66except FileNotFoundError:CODE
HIGHpylib/anki/utils.py176except FileExistsError:CODE
HIGHpylib/anki/utils.py193except OSError:CODE
HIGHqt/runanki.py14except ImportError:CODE
HIGHqt/aqt/sound.py297except ImportError:CODE
HIGHqt/aqt/sound.py394except subprocess.TimeoutExpired:CODE
HIGHqt/aqt/addons.py248except AbortAddonImport:CODE
HIGHqt/aqt/mediacheck.py86except AttributeError:CODE
HIGHqt/aqt/mpv.py156except ProcessLookupError:CODE
HIGHqt/aqt/mpv.py226except OSError:CODE
HIGHqt/aqt/__init__.py257except Exception:CODE
HIGHqt/aqt/clayout.py305except ValueError:CODE
HIGHqt/aqt/utils.py1105except RuntimeError:CODE
HIGHqt/aqt/utils.py1112except RuntimeError:CODE
HIGHqt/aqt/tagedit.py154except ValueError:CODE
HIGHqt/aqt/profiles.py400except Exception:CODE
HIGHqt/aqt/mediasrv.py264except KeyError:CODE
HIGHqt/installer/app/src/anki/__main__.py16except Exception:CODE
Excessive Try-Catch Wrapping92 hits · 97 pts
SeverityFileLineSnippetContext
MEDIUMtools/reload_webviews.py20 print(f"Error: {message}", file=sys.stderr)CODE
LOWtools/reload_webviews.py42except Exception as e:CODE
MEDIUMtools/prepare_release.py151 print(f"Error: tag '{version}' already exists", file=sys.stderr)CODE
MEDIUM⚡tools/prepare_release.py162 print(f"Error: GitHub release '{version}' already exists", file=sys.stderr)CODE
MEDIUMtools/prepare_release.py219 print(f"Error: {exc}", file=sys.stderr)CODE
LOWpylib/tools/hookslib.py129 except Exception:CODE
LOWpylib/tools/hookslib.py165 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
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/ankihub.py42 except Exception as exc:CODE
LOWqt/aqt/addons.py250 except Exception:CODE
LOWqt/aqt/addons.py343 except Exception:CODE
LOWqt/aqt/addons.py504 except Exception:CODE
LOWqt/aqt/addons.py658 except Exception:CODE
LOWqt/aqt/addons.py1140 except Exception as e:CODE
LOWqt/aqt/addons.py1613 except Exception as exc:CODE
LOWqt/aqt/addons.py1725 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.py1151 except Exception as e:CODE
LOWqt/aqt/preferences.py457 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__.py257 except Exception:CODE
LOWqt/aqt/__init__.py533 except Exception:CODE
LOWqt/aqt/__init__.py649 except Exception:CODE
LOWqt/aqt/__init__.py723 except Exception:CODE
LOWqt/aqt/__init__.py818 except Exception:CODE
LOWqt/aqt/debug_console.py351 except Exception:CODE
LOWqt/aqt/changenotetype.py91 except Exception as e:CODE
LOWqt/aqt/utils.py1041 except Exception as exc:STRING
LOWqt/aqt/filtered_deck.py249 except Exception as err:CODE
LOWqt/aqt/dbcheck.py56 except Exception as e:CODE
LOWqt/aqt/editor.py509 except Exception as e:CODE
MEDIUMqt/aqt/webview.py106 print(f"Error opening '{qwebchannel}': {jsfile.error()}", file=sys.stderr)CODE
MEDIUMqt/aqt/main.py648def loadCollection(self) -> bool:CODE
LOWqt/aqt/main.py201 except Exception:CODE
32 more matches not shown…
Deep Nesting60 hits · 53 pts
SeverityFileLineSnippetContext
LOWtools/docs_converter.py255CODE
LOWpylib/anki/_backend.py203CODE
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
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/editor_legacy.py434CODE
LOWqt/aqt/editor_legacy.py1004CODE
LOWqt/aqt/editor_legacy.py1056CODE
LOWqt/aqt/editor_legacy.py1709CODE
LOWqt/aqt/preferences.py485CODE
LOWqt/aqt/mpv.py173CODE
LOWqt/aqt/mpv.py249CODE
LOWqt/aqt/__init__.py538CODE
LOWqt/aqt/__init__.py436CODE
LOWqt/aqt/__init__.py551CODE
LOWqt/aqt/addcards_legacy.py218CODE
LOWqt/aqt/addcards_legacy.py315CODE
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.py204CODE
LOWqt/aqt/reviewer.py222CODE
LOWqt/aqt/reviewer.py501CODE
LOWqt/aqt/reviewer.py674CODE
LOWqt/aqt/reviewer.py707CODE
LOWqt/aqt/editor.py341CODE
LOWqt/aqt/webview.py694CODE
LOWqt/aqt/main.py875CODE
LOWqt/aqt/deckbrowser.py105CODE
LOWqt/aqt/mediasrv.py376CODE
LOWqt/aqt/mediasrv.py441CODE
LOWqt/aqt/mediasrv.py493CODE
LOWqt/aqt/mediasrv.py547CODE
LOWqt/aqt/browser/browser.py182CODE
LOWqt/aqt/browser/browser.py219CODE
LOWqt/aqt/browser/previewer.py206CODE
LOWqt/aqt/browser/sidebar/tree.py273CODE
LOWqt/aqt/browser/sidebar/tree.py455CODE
LOWqt/aqt/browser/sidebar/tree.py519CODE
LOWqt/aqt/browser/sidebar/tree.py924CODE
LOWqt/aqt/browser/sidebar/item.py141CODE
LOWqt/aqt/browser/table/model.py346CODE
LOWqt/tests/qwebengine_csp_smoke.py786CODE
LOWqt/tests/qwebengine_csp_smoke.py240CODE
LOWdocs/cogdocs.py7CODE
Over-Commented Block24 hits · 24 pts
SeverityFileLineSnippetContext
LOWCargo.toml181# TODO: consider setting once caching issues are fixed (#5318)COMMENT
LOWftl/copy-core-string.sh1#!/usr/bin/env bashCOMMENT
LOWftl/remove-unused.sh1#!/usr/bin/env 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.py1701 url = qurl.toString()CODE
HIGHqt/aqt/webview.py1033 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.py127# 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.py46 # Create a new add-on loggerCOMMENT
MEDIUMqt/aqt/webview.py180 # 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
Hallucination Indicators1 hit · 10 pts
SeverityFileLineSnippetContext
CRITICALqt/aqt/editor_legacy.py1782 path = os.path.join(self.editor.mw.col.media.dir(), file_name)CODE
Verbosity Indicators4 hits · 9 pts
SeverityFileLineSnippetContext
LOW⚡ts/tests/e2e/context-switching.spec.ts251 // Step 1: Establish _nt_{cloze}_lastDeck = testDeckId.COMMENT
LOW⚡ts/tests/e2e/context-switching.spec.ts258 // Step 2: Reset to Basic + Default so the starting state is deterministic.COMMENT
LOW⚡ts/tests/e2e/context-switching.spec.ts264 // Step 3: Switch to Cloze. NoteEditor reads _nt_{cloze}_lastDeck andCOMMENT
LOW⚡ts/tests/e2e/context-switching.spec.ts268 // Step 4: Deck chooser must update on its own.COMMENT
Structural Annotation Overuse4 hits · 9 pts
SeverityFileLineSnippetContext
LOW⚡ts/tests/e2e/context-switching.spec.ts251 // Step 1: Establish _nt_{cloze}_lastDeck = testDeckId.COMMENT
LOW⚡ts/tests/e2e/context-switching.spec.ts258 // Step 2: Reset to Basic + Default so the starting state is deterministic.COMMENT
LOW⚡ts/tests/e2e/context-switching.spec.ts264 // Step 3: Switch to Cloze. NoteEditor reads _nt_{cloze}_lastDeck andCOMMENT
LOW⚡ts/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
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.py806CODE
Redundant / Tautological Comments3 hits · 4 pts
SeverityFileLineSnippetContext
LOWqt/aqt/sound.py705 # Check if we need to convert float samples to int16COMMENT
LOWdocs/syncserver/entrypoint.sh15# Check if group exists, create if notCOMMENT
LOWdocs/syncserver/entrypoint.sh20# Check if user exists, create if notCOMMENT
Overly Generic Function Names1 hit · 1 pts
SeverityFileLineSnippetContext
LOWqt/aqt/mediasrv.py493def handle_request(pathin: str) -> Response:CODE