AI Slop Code Risk Monitor

ankitects/anki

SlopCodeMonitor badge for ankitects/anki Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

Anki is a smart spaced repetition flashcard program

7.4 Moderate pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for ankitects/anki, a Rust project with 32,424 GitHub stars. SynthScan examined 200,530 lines of code across 1424 source files, recording 1266 pattern matches distributed across 18 syntactic categories. The legacy adjusted pattern signal is 7.4 (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.4
Adjusted Signal
7.4
Raw Pattern Score
100%
Time Factor
2026-10-29
Last Push
32.4K
Stars
Rust
Language
200.5K
Lines of Code
1.4K
Files
1.3K
Pattern Hits
2026-10-31
Scan Date
0.02
HC Hit Rate

Risk Review · Payload v1

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

Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.

Cognitive Ownership Risk 14.4/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 9.3/100 · LOW

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

Agent Over-Engineering Ratio 21.2/100 · LOW

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

PR Review Velocity Impact 31.1/100 · MEDIUM

Which changes need focused human review? 1266 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 47LOW 1193

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 1266 distinct pattern matches across 18 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 Identifiers466 hits · 482 pts
SeverityFileLineSnippetContext
LOWtools/docs.py257def escape_text_preserve_html(raw: str) -> str:CODE
LOWtools/docs.py709def update_language_tabs_from_english(CODE
LOW⚡tools/prepare_release.py168def update_version_and_commit(version: str) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py232 def test_braces_escaped_in_plain_text(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py236 def test_double_braced_field_still_escaped(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py240 def test_anchor_braces_not_escaped(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py245 def test_anchor_braces_not_escaped_with_complex_name(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py252 def test_dollar_escaped_in_plain_text(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py256 def test_double_dollar_not_escaped(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py261 def test_braces_not_escaped_inside_fenced_code(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py267 def test_dollars_not_escaped_inside_fenced_code(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py273 def test_braces_not_escaped_inside_inline_code(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py277 def test_dollars_not_escaped_inside_inline_code(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py283 def test_html_comment_converted_to_mdx(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py289 def test_comment_inside_fenced_code_untouched(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py296 def test_angle_brackets_escaped_in_plain_text(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py301 def test_angle_brackets_not_escaped_inside_fenced_code(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py306 def test_angle_brackets_not_escaped_inside_inline_code(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py312 def test_br_becomes_self_closing(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py316 def test_br_closing_tag_dropped(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py320 def test_img_becomes_self_closing(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py324 def test_source_becomes_self_closing(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py334 def test_hr_becomes_self_closing(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py340 def test_unquoted_attr_gets_quoted(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py355 def test_title_quotes_escaped(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py359 def test_original_heading_removed(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py372 def test_md_extension_removed(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py377 def test_html_extension_removed(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py382 def test_md_extension_removed_with_anchor(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py386 def test_md_extension_removed_with_query(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py390 def test_non_md_link_unchanged(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py394 def test_relative_nested_link_gets_dot_slash_prefix(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py398 def test_dot_slash_link_is_not_double_prefixed(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py402 def test_root_relative_link_is_not_prefixed(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py406 def test_root_relative_html_extension_removed_with_query_and_anchor(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py410 def test_absolute_html_extension_removed_with_query_and_anchor(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py425 def test_heading_anchor_not_escaped(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py437 def test_url_autolink_expanded(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py441 def test_email_autolink_gets_mailto(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py452 def test_note_admonish_converted(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py459 def test_warning_admonish_converted(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py464 def test_danger_admonish_converted(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py469 def test_summary_admonish_gets_heading(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py475 def test_info_admonish_converted(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py480 def test_caution_admonish_maps_to_warning(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py485 def test_example_admonish_maps_to_info(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py497 def test_docs_ankiweb_net_converted(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py502 def test_betas_domain_converted(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py507 def test_faqs_domain_converted(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py522 def test_ankimobile_domain_converted(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py526 def test_addon_docs_domain_converted(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py530 def test_anchor_preserved_after_conversion(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py534 def test_language_prefix_prepended(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py538 def test_autolink_url_also_converted(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py551 def test_unrecognised_domain_not_converted(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py566 def test_toc_comment_case_insensitive(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py577 def test_angle_brackets_not_escaped_in_indented_block(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py581 def test_braces_escaped_in_indented_block(self) -> None:CODE
LOW⚡tools/tests/test_docs_converter.py585 def test_dollars_escaped_in_indented_block(self) -> None:CODE
LOWtools/tests/test_docs_converter.py39 def test_convert_subcommand_parses(self) -> None:CODE
406 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 Boilerplate156 hits · 162 pts
SeverityFileLineSnippetContext
LOW⚡tools/prepare_release.py168def update_version_and_commit(version: str) -> None:CODE
LOWpylib/tests/test_lang.py22 def set_locale(code: str) -> None:CODE
LOWpylib/anki/lang.py188def 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.py332 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.py1535 def update_info_received(future: Future) -> None:CODE
LOWqt/aqt/addons.py1606 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
96 more matches not shown…
Decorative Section Separators28 hits · 112 pts
SeverityFileLineSnippetContext
MEDIUMtools/docs.py570# ---------------------------------------------------------------------------COMMENT
MEDIUMtools/docs.py572# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py226# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py228# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py345# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py347# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py366# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py368# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py419# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py421# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py431# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py433# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py446# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py448# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py491# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py493# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py556# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py558# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py571# ===========================================================================COMMENT
MEDIUM⚡tools/tests/test_docs_converter.py573# ===========================================================================COMMENT
MEDIUMtools/tests/test_docs_converter.py18# ---------------------------------------------------------------------------COMMENT
MEDIUMtools/tests/test_docs_converter.py20# ---------------------------------------------------------------------------COMMENT
MEDIUMqt/aqt/mpv.py1# ------------------------------------------------------------------------------COMMENT
MEDIUMqt/aqt/mpv.py25# ------------------------------------------------------------------------------COMMENT
MEDIUMts/tests/e2e/context-switching.spec.ts162// ─── 1. Chooser UI and session behaviour ─────────────────────────────────────COMMENT
MEDIUMts/tests/e2e/context-switching.spec.ts194// ─── 2. addNote payload ───────────────────────────────────────────────────────COMMENT
MEDIUM⚡ts/tests/e2e/context-switching.spec.ts232// ─── 3. Mode B: context behaviour (default) ──────────────────────────────────COMMENT
MEDIUMts/tests/e2e/context-switching.spec.ts356// ─── 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.py214 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.py360 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.py1617 except Exception as exc:CODE
LOWqt/aqt/addons.py1729 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.py501 except Exception as exc:CODE
LOWqt/aqt/tts.py517 except Exception:CODE
LOWqt/aqt/tts.py523 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.py257CODE
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 Block29 hits · 29 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
LOWqt/audio/macos/test-in-vm.sh1#!/usr/bin/env bashCOMMENT
LOWqt/audio/macos/check-binaries.sh1#!/usr/bin/env bashCOMMENT
LOWqt/audio/macos/build-deps.sh1#!/usr/bin/env bashCOMMENT
LOWqt/audio/macos/smoke-test.sh1#!/usr/bin/env bashCOMMENT
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/tests/e2e/helpers.ts81// Bridge call inspectionCOMMENT
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.ts241 // Step 1: Establish _nt_{cloze}_lastDeck = testDeckId.COMMENT
LOW⚡ts/tests/e2e/context-switching.spec.ts248 // Step 2: Reset to Basic + Default so the starting state is deterministic.COMMENT
LOW⚡ts/tests/e2e/context-switching.spec.ts254 // Step 3: Switch to Cloze. NoteEditor reads _nt_{cloze}_lastDeck andCOMMENT
LOW⚡ts/tests/e2e/context-switching.spec.ts258 // Step 4: Deck chooser must update on its own.COMMENT
Structural Annotation Overuse4 hits · 9 pts
SeverityFileLineSnippetContext
LOW⚡ts/tests/e2e/context-switching.spec.ts241 // Step 1: Establish _nt_{cloze}_lastDeck = testDeckId.COMMENT
LOW⚡ts/tests/e2e/context-switching.spec.ts248 // Step 2: Reset to Basic + Default so the starting state is deterministic.COMMENT
LOW⚡ts/tests/e2e/context-switching.spec.ts254 // Step 3: Switch to Cloze. NoteEditor reads _nt_{cloze}_lastDeck andCOMMENT
LOW⚡ts/tests/e2e/context-switching.spec.ts258 // 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
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWqt/audio/macos/smoke-test.sh5# Usage:COMMENT
Overly Generic Function Names1 hit · 1 pts
SeverityFileLineSnippetContext
LOWqt/aqt/mediasrv.py493def handle_request(pathin: str) -> Response:CODE