AI Slop Code Risk Monitor

renpy/renpy

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

The Ren'Py Visual Novel Engine

25.1 Elevated pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for renpy/renpy, a Ren'Py project with 6,957 GitHub stars. SynthScan examined 185,098 lines of code across 390 source files, recording 4568 pattern matches distributed across 19 syntactic categories. The legacy adjusted pattern signal is 25.1 (Elevated 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.

25.1
Adjusted Signal
25.1
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
7.0K
Stars
Ren'Py
Language
185.1K
Lines of Code
390
Files
4.6K
Pattern Hits
2026-10-31
Scan Date
0.45
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 25.1/100 · MEDIUM

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

Hallucinated Dependency & Supply Chain Risk 47.4/100 · MEDIUM

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

Agent Over-Engineering Ratio 34.6/100 · MEDIUM

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

PR Review Velocity Impact 78.1/100 · CRITICAL

Which changes need focused human review? 4568 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 173MEDIUM 90LOW 4304

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 4568 distinct pattern matches across 19 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.

Unused Imports2941 hits · 2278 pts
SeverityFileLineSnippetContext
LOWdistribute.py4CODE
LOWdistribute.py4CODE
LOWdistribute.py4CODE
LOWdistribute.py4CODE
LOWdistribute.py4CODE
LOWdistribute.py18CODE
LOWadd.py2CODE
LOWadd.py9CODE
LOWrenpy.py27CODE
LOWrenpy.py27CODE
LOWmain.py27CODE
LOWmain.py27CODE
LOWlauncher/game/webserver.py1CODE
LOWlauncher/game/change_icon.py25CODE
LOWlauncher/game/change_icon.py26CODE
LOWlauncher/game/gui7/code.py22CODE
LOWlauncher/game/gui7/__init__.py22CODE
LOWlauncher/game/gui7/__init__.py22CODE
LOWlauncher/game/gui7/__init__.py22CODE
LOWlauncher/game/gui7/images.py26CODE
LOWrenpy/bootstrap.py475CODE
LOWrenpy/ecsign.py23CODE
LOWrenpy/scriptedit.py25CODE
LOWrenpy/scriptedit.py25CODE
LOWrenpy/scriptedit.py25CODE
LOWrenpy/scriptedit.py25CODE
LOWrenpy/scriptedit.py25CODE
LOWrenpy/scriptedit.py26CODE
LOWrenpy/scriptedit.py26CODE
LOWrenpy/scriptedit.py26CODE
LOWrenpy/scriptedit.py26CODE
LOWrenpy/scriptedit.py26CODE
LOWrenpy/scriptedit.py26CODE
LOWrenpy/scriptedit.py26CODE
LOWrenpy/scriptedit.py26CODE
LOWrenpy/scriptedit.py26CODE
LOWrenpy/scriptedit.py26CODE
LOWrenpy/scriptedit.py31CODE
LOWrenpy/execution.py29CODE
LOWrenpy/config.py26CODE
LOWrenpy/config.py26CODE
LOWrenpy/config.py26CODE
LOWrenpy/config.py26CODE
LOWrenpy/config.py26CODE
LOWrenpy/config.py27CODE
LOWrenpy/config.py27CODE
LOWrenpy/config.py27CODE
LOWrenpy/config.py27CODE
LOWrenpy/config.py27CODE
LOWrenpy/config.py27CODE
LOWrenpy/config.py27CODE
LOWrenpy/config.py27CODE
LOWrenpy/config.py27CODE
LOWrenpy/config.py27CODE
LOWrenpy/config.py27CODE
LOWrenpy/config.py29CODE
LOWrenpy/config.py29CODE
LOWrenpy/savelocation.py27CODE
LOWrenpy/savelocation.py27CODE
LOWrenpy/savelocation.py27CODE
2881 more matches not shown…
Empty Error Handlers156 hits · 780 pts
SeverityFileLineSnippetContext
HIGHdistribute.py23except ImportError:CODE
HIGHlauncher/game/installer.py58except Exception:CODE
HIGHlauncher/game/installer.py373except Exception:CODE
HIGHlauncher/game/installer.py132except Exception:CODE
HIGHlauncher/game/installer.py126except Exception:CODE
HIGHlauncher/game/installer.py368except Exception:CODE
HIGHlauncher/game/gui7/images.py54except Exception:CODE
HIGHlauncher/game/gui7/images.py122except Exception:CODE
HIGHrenpy/bootstrap.py55except Exception:CODE
HIGHrenpy/bootstrap.py554except renpy.game.ParseErrorException:CODE
HIGHrenpy/execution.py207except Exception:CODE
HIGHrenpy/execution.py566except Exception:CODE
HIGHrenpy/execution.py559except Exception:CODE
HIGHrenpy/savelocation.py117except Exception:CODE
HIGHrenpy/savelocation.py461except Exception:CODE
HIGHrenpy/savelocation.py733except Exception:CODE
HIGHrenpy/savelocation.py184except Exception:CODE
HIGHrenpy/savelocation.py282except Exception:CODE
HIGHrenpy/savelocation.py288except Exception:CODE
HIGHrenpy/error.py1643except Exception:CODE
HIGHrenpy/error.py1649except Exception:CODE
HIGHrenpy/error.py1699except Exception:CODE
HIGHrenpy/error.py1709except Exception:CODE
HIGHrenpy/error.py1735except Exception:CODE
HIGHrenpy/error.py1741except Exception:CODE
HIGHrenpy/error.py1752except Exception:CODE
HIGHrenpy/savetoken.py209except Exception:CODE
HIGHrenpy/memory.py80except Exception:CODE
HIGHrenpy/log.py288except Exception:CODE
HIGHrenpy/log.py119except Exception:CODE
HIGHrenpy/log.py270except Exception:CODE
HIGHrenpy/log.py125except Exception:CODE
HIGHrenpy/pyanalysis.py957except Exception:CODE
HIGHrenpy/pyanalysis.py973except Exception:CODE
HIGHrenpy/util.py35except Exception:CODE
HIGHrenpy/util.py48except Exception:CODE
HIGHrenpy/game.py413except EndReplay:CODE
HIGHrenpy/arguments.py39except Exception:CODE
HIGHrenpy/__init__.py604except ImportError:CODE
HIGHrenpy/__init__.py105except Exception:CODE
HIGHrenpy/rollback.py149except Exception:CODE
HIGHrenpy/rollback.py167except Exception:CODE
HIGHrenpy/rollback.py174except Exception:CODE
HIGHrenpy/rollback.py659except RuntimeError:CODE
HIGHrenpy/substitutions.py87except KeyError:CODE
HIGHrenpy/loadsave.py281except Exception:CODE
HIGHrenpy/loadsave.py188except Exception:CODE
HIGHrenpy/loadsave.py68except FileNotFoundError:CODE
HIGHrenpy/dump.py242except Exception:CODE
HIGHrenpy/parser.py1816except Exception:CODE
HIGHrenpy/parser.py1804except Exception:CODE
HIGHrenpy/add_from.py112except Exception:CODE
HIGHrenpy/loader.py56except Exception:CODE
HIGHrenpy/loader.py751except Exception:CODE
HIGHrenpy/loader.py859except Exception:CODE
HIGHrenpy/loader.py541except Exception:CODE
HIGHrenpy/loader.py597except IOError:CODE
HIGHrenpy/lexer.py37except ImportError:CODE
HIGHrenpy/lexer.py148except Exception:CODE
HIGHrenpy/lexer.py154except Exception:CODE
96 more matches not shown…
Excessive Try-Catch Wrapping411 hits · 398 pts
SeverityFileLineSnippetContext
LOWdistribute.py135 except Exception:CODE
LOWrenpy.py121 except Exception:CODE
LOWrenpy.py158 except Exception:CODE
MEDIUMrenpy.py114def test_writable(d):CODE
LOWmain.py121 except Exception:CODE
LOWmain.py158 except Exception:CODE
MEDIUMmain.py114def test_writable(d):CODE
LOWlauncher/Visual Studio Code.edit.py99 except Exception:CODE
LOWlauncher/Visual Studio Code (System).edit.py99 except Exception:CODE
LOWlauncher/VSCodium (System).edit.py99 except Exception:CODE
LOWlauncher/game/webserver.py135 except Exception:CODE
LOWlauncher/game/installer.py58 except Exception:CODE
LOWlauncher/game/installer.py126 except Exception:CODE
LOWlauncher/game/installer.py132 except Exception:CODE
LOWlauncher/game/installer.py163 except Exception:CODE
LOWlauncher/game/installer.py368 except Exception:CODE
LOWlauncher/game/installer.py373 except Exception:CODE
LOWlauncher/game/installer.py436 except Exception as e:CODE
LOWlauncher/game/gui7/images.py54 except Exception:CODE
LOWlauncher/game/gui7/images.py122 except Exception:CODE
LOWrenpy/bootstrap.py55 except Exception:CODE
LOWrenpy/bootstrap.py136 except Exception:CODE
LOWrenpy/bootstrap.py451 except Exception as e:CODE
LOWrenpy/bootstrap.py476 except Exception as e:STRING
LOWrenpy/bootstrap.py517 except Exception:STRING
LOWrenpy/bootstrap.py557 except Exception as e:STRING
MEDIUMrenpy/bootstrap.py48def null_files():CODE
LOWrenpy/scriptedit.py529 except Exception:CODE
LOWrenpy/color.py373 except Exception:CODE
LOW⚡renpy/color.py385 except Exception:CODE
LOW⚡renpy/color.py395 except Exception:CODE
LOW⚡renpy/color.py405 except Exception:CODE
LOWrenpy/execution.py207 except Exception:CODE
LOWrenpy/execution.py559 except Exception:CODE
LOWrenpy/execution.py566 except Exception:CODE
LOWrenpy/execution.py690 except Exception:CODE
LOWrenpy/execution.py964 except Exception:CODE
LOWrenpy/execution.py1087 except Exception:CODE
MEDIUMrenpy/execution.py196def __repr__(self):CODE
LOW⚡renpy/savelocation.py282 except Exception:CODE
LOW⚡renpy/savelocation.py288 except Exception:CODE
LOW⚡renpy/savelocation.py292 except Exception:CODE
LOWrenpy/savelocation.py117 except Exception:CODE
LOWrenpy/savelocation.py132 except Exception:CODE
LOWrenpy/savelocation.py184 except Exception:CODE
LOWrenpy/savelocation.py264 except Exception:CODE
LOWrenpy/savelocation.py314 except Exception:CODE
LOWrenpy/savelocation.py317 except Exception:CODE
LOWrenpy/savelocation.py461 except Exception:CODE
LOWrenpy/savelocation.py733 except Exception:CODE
LOWrenpy/savelocation.py740 except Exception as e:CODE
LOWrenpy/importer.py330 except Exception as e:CODE
MEDIUMrenpy/error.py208def getvalue(self):CODE
LOW⚡renpy/error.py439 except Exception:CODE
LOW⚡renpy/error.py441 except Exception:CODE
LOWrenpy/error.py398 except Exception:CODE
LOWrenpy/error.py464 except Exception:CODE
LOWrenpy/error.py809 except Exception:CODE
LOWrenpy/error.py938 except Exception:CODE
LOWrenpy/error.py981 except Exception:CODE
351 more matches not shown…
Hyper-Verbose Identifiers321 hits · 318 pts
SeverityFileLineSnippetContext
LOWrenpy/bootstrap.py199def disable_requests_ca_bundle(adapters) -> None:CODE
LOWrenpy/scriptedit.py414def nodes_on_line_at_or_after(filename, linenumber):CODE
LOWrenpy/config.py1039def say_attribute_transition_callback(*args):CODE
LOW⚡renpy/error.py451def normalize_renpy_line_offset(filename: str, linenumber: int, offset: int, line: str):CODE
LOWrenpy/__init__.py32def _install_system_python_hook():CODE
LOWrenpy/rollback.py1166 def get_identifier_checkpoints(self, identifier):CODE
LOWrenpy/webloader.py204def process_downloaded_resources():CODE
LOWrenpy/easy.py38def lookup_displayable_prefix(d: str) -> Displayable | None:CODE
LOWrenpy/parser.py102def parse_simple_expression_list(l, image=False):CODE
LOWrenpy/asynctask.py134 def _check_slow_task_threshold(self) -> None:CODE
LOWrenpy/loader.py397def scandirfiles_from_remote_file(add, seen):CODE
LOWrenpy/loader.py427def scandirfiles_from_filesystem(add, seen):CODE
LOWrenpy/loader.py456def scandirfiles_from_archives(add, seen):CODE
LOWrenpy/loader.py518def load_from_file_open_callback(name):CODE
LOWrenpy/python.py452def find_starred_match_patterns(node):CODE
LOWrenpy/character.py289def compute_widget_properties(who_args, what_args, window_args, properties, variant=None, multiple=None):CODE
LOWrenpy/persistent.py502def _background_save_completed(write):CODE
LOWrenpy/ast.py560def probably_side_effect_free(expr: str) -> bool:CODE
LOWrenpy/parameter.py231 def with_pos_only_as_pos_or_kw(self):CODE
LOWrenpy/lint.py684def check_style_property_displayable(name, property, d):CODE
LOWrenpy/lint.py1038def check_orphan_translations(none_lang_identifiers, translation_identifiers):CODE
LOWrenpy/test/testexecution.py270def evaluate_enabled_expressions() -> None:CODE
LOWrenpy/test/testexecution.py521 def dispatch_exception_to_control_frame(self, exc: Exception) -> bool:CODE
LOWrenpy/test/testexecution.py528 def move_to_next_node_if_possible(self) -> None:CODE
LOWrenpy/test/testparser.py623def one_line_python_statement(l: Lexer, loc: NodeLocation) -> testast.Python:CODE
LOWrenpy/test/testparser.py712def parse_testcase_parameters(l: Lexer, loc: NodeLocation) -> list[dict[str, Any]]:CODE
LOWrenpy/test/testreporter.py347 def get_outcome_by_test_block(self, test_block: BaseTestBlock) -> BaseOutcome:CODE
LOWrenpy/test/testreporter.py408def get_assertion_error_string(epc: renpy.error.ExceptionPrintContext, assert_node: Assert, node_name: str) -> str:CODE
LOWrenpy/test/testreporter.py521 def _format_with_status_color(self, msg: str, status: OutcomeStatus | None) -> str:CODE
LOWrenpy/test/testreporter.py587 def _print_summarized_outcomes(self, outcome: OutcomeManager) -> None:CODE
LOWrenpy/test/testast.py246 def current_parameterized_name(self) -> str:CODE
LOWrenpy/test/testast.py251 def current_full_parameterized_path(self) -> str:CODE
LOWrenpy/test/testast.py293 def current_full_parameterized_path(self) -> str:CODE
LOWrenpy/test/testast.py331 def generate_parameter_combinations(self, parameters: list[list[dict[str, Any]]] | None) -> list[dict[str, Any]]:CODE
LOWrenpy/test/testast.py349 def advance_to_next_parameter_set(self):CODE
LOWrenpy/test/testast.py378 def has_all_parameters_been_processed(self) -> bool:CODE
LOWrenpy/test/testast.py478 def advance_to_next_parameter_set(self):CODE
LOWrenpy/test/testast.py530 def has_completed_all_subtests(self) -> bool:CODE
LOWrenpy/test/testast.py592 def element_not_found_during_perform(self) -> None:CODE
LOWrenpy/test/testast.py706 def element_not_found_during_perform(self) -> None:CODE
LOWrenpy/test/testast.py770 def element_not_found_during_perform(self) -> None:CODE
LOWrenpy/test/testast.py1905def format_parameterized_name(name: str, parameters: dict[str, Any]) -> str:CODE
LOWrenpy/translation/__init__.py896def get_translation_identifier():CODE
LOWrenpy/sl2/slparser.py130def update_incompatible_props(prefix, prop):CODE
LOWrenpy/sl2/slparser.py544 def add_prefix_style_property(self, prefix, name):CODE
LOWrenpy/exports/fetchexports.py133def get_fetch_requests_progress() -> float:CODE
LOWrenpy/exports/fetchexports.py275def get_fetch_emscripten_progress() -> float:CODE
LOWrenpy/exports/sayexports.py249def count_seen_dialogue_blocks():CODE
LOWrenpy/exports/sayexports.py260def count_newly_seen_dialogue_blocks():CODE
LOWrenpy/exports/statementexports.py362def execute_default_statement(start=False):CODE
LOWrenpy/exports/rollbackexports.py242def get_identifier_checkpoints(identifier):CODE
LOWrenpy/exports/displayexports.py34def count_displayables_in_layer(layer):CODE
LOWrenpy/common/00sshtransition_ren.py47def _scene_show_hide_transition_callback(statement):CODE
LOWrenpy/display/screen.py1619def get_displayable_properties(id, screen=None, layer=None):CODE
LOWrenpy/display/behavior.py1956 def get_caret_above_below_pos(self):CODE
LOWrenpy/display/layout.py1522def dynamic_displayable_compat(st, at, expr):CODE
LOWrenpy/display/predict.py131def predict_registered_shaders():CODE
LOWrenpy/display/core.py1381 def check_background_screenshot(self):CODE
LOWrenpy/display/core.py2121 def set_text_editing_candidates(self, candidates: "IMECandidates | None"):CODE
LOWrenpy/display/core.py2134 def update_ime_candidates_screen(self):CODE
261 more matches not shown…
Over-Commented Block242 hits · 239 pts
SeverityFileLineSnippetContext
LOWrenpy.py1#!/usr/bin/env pythonCOMMENT
LOWsetup.py1#!/usr/bin/env pythonCOMMENT
LOWmain.py1#!/usr/bin/env pythonCOMMENT
LOWlauncher/game/change_icon.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWlauncher/game/change_icon.py361 #COMMENT
LOWlauncher/game/installer.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWlauncher/game/gui7/code.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWlauncher/game/gui7/__init__.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWlauncher/game/gui7/images.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWlauncher/game/gui7/parameters.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/bootstrap.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/ecsign.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/scriptedit.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/color.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/execution.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/config.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/config.py101COMMENT
LOWrenpy/config.py241# choice from a menu. This can be used for making a demo version of aCOMMENT
LOWrenpy/savelocation.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/importer.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/error.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/error.py541 # Binary ops, subscripts, and calls are expressions, soCOMMENT
LOWrenpy/screenlang.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/savetoken.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/memory.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/object.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/log.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/pyanalysis.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/revertable.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/util.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/ui.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/game.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/arguments.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/preferences.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/__init__.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/rollback.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/types.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/substitutions.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/loadsave.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/webloader.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/dump.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/easy.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/parser.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/asynctask.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/atl.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/atl.py541COMMENT
LOWrenpy/atl.py581 # if args_param_name:COMMENT
LOWrenpy/atl.py841 # trans is the transform we're working on.COMMENT
LOWrenpy/atl.py1161# This can become one of four things:COMMENT
LOWrenpy/add_from.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/loader.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/curry.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/debug.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/lexer.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/python.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/character.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/persistent.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/ast.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/warp.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
LOWrenpy/versions.py1# Copyright 2004-2026 Tom Rothamel <pytom@bishoujo.us>COMMENT
182 more matches not shown…
Deep Nesting310 hits · 236 pts
SeverityFileLineSnippetContext
LOWdistribute.py51CODE
LOWrenpy.py232CODE
LOWmain.py232CODE
LOWlauncher/Visual Studio Code.edit.py14CODE
LOWlauncher/Visual Studio Code.edit.py79CODE
LOWlauncher/Visual Studio Code (System).edit.py14CODE
LOWlauncher/Visual Studio Code (System).edit.py79CODE
LOWlauncher/VSCodium (System).edit.py14CODE
LOWlauncher/VSCodium (System).edit.py79CODE
LOWlauncher/game/installer.py112CODE
LOWlauncher/game/installer.py144CODE
LOWlauncher/game/installer.py174CODE
LOWlauncher/game/installer.py349CODE
LOWlauncher/game/gui7/code.py293CODE
LOWrenpy/bootstrap.py345CODE
LOWrenpy/ecsign.py252CODE
LOWrenpy/scriptedit.py74CODE
LOWrenpy/color.py174CODE
LOWrenpy/execution.py1043CODE
LOWrenpy/execution.py591CODE
LOWrenpy/execution.py784CODE
LOWrenpy/execution.py887CODE
LOWrenpy/savelocation.py715CODE
LOWrenpy/savelocation.py820CODE
LOWrenpy/savelocation.py161CODE
LOWrenpy/savelocation.py267CODE
LOWrenpy/savelocation.py295CODE
LOWrenpy/error.py451CODE
LOWrenpy/error.py817CODE
LOWrenpy/error.py862CODE
LOWrenpy/error.py887CODE
LOWrenpy/error.py1314CODE
LOWrenpy/error.py1458CODE
LOWrenpy/error.py1517CODE
LOWrenpy/savetoken.py99CODE
LOWrenpy/savetoken.py264CODE
LOWrenpy/memory.py91CODE
LOWrenpy/memory.py430CODE
LOWrenpy/memory.py500CODE
LOWrenpy/memory.py97CODE
LOWrenpy/memory.py510CODE
LOWrenpy/pyanalysis.py258CODE
LOWrenpy/pyanalysis.py551CODE
LOWrenpy/ui.py1117CODE
LOWrenpy/rollback.py111CODE
LOWrenpy/rollback.py399CODE
LOWrenpy/rollback.py515CODE
LOWrenpy/rollback.py542CODE
LOWrenpy/rollback.py614CODE
LOWrenpy/rollback.py736CODE
LOWrenpy/rollback.py939CODE
LOWrenpy/substitutions.py47CODE
LOWrenpy/substitutions.py131CODE
LOWrenpy/webloader.py178CODE
LOWrenpy/webloader.py204CODE
LOWrenpy/dump.py63CODE
LOWrenpy/easy.py56CODE
LOWrenpy/easy.py100CODE
LOWrenpy/easy.py146CODE
LOWrenpy/parser.py125CODE
250 more matches not shown…
Self-Referential Comments59 hits · 175 pts
SeverityFileLineSnippetContext
MEDIUMrenpy.py3# This file is part of Ren'Py. The license below applies to Ren'Py only.COMMENT
MEDIUMmain.py3# This file is part of Ren'Py. The license below applies to Ren'Py only.COMMENT
MEDIUMrenpy/scriptedit.py22# This file contains code to add and remove statements from the ASTCOMMENT
MEDIUMrenpy/execution.py22# This file contains code responsible for managing the execution of aCOMMENT
MEDIUMrenpy/error.py22# This file contains code for formatting tracebacks.COMMENT
MEDIUMrenpy/memory.py22# This file contains functions used to help debug memory leaks. They aren'tCOMMENT
MEDIUMrenpy/log.py22# This module handles the logging of messages to a file.COMMENT
MEDIUMrenpy/revertable.py22# This file contains code that handles the execution of python codeCOMMENT
MEDIUMrenpy/ui.py22# This file contains functions that can be used to display a UI on theCOMMENT
MEDIUMrenpy/game.py22# This module is intended to be used as a singleton object.COMMENT
MEDIUMrenpy/arguments.py22# This file handles argument parsing. Argument parsing takes place inCOMMENT
MEDIUMrenpy/__init__.py628 # Create the store.COMMENT
MEDIUMrenpy/rollback.py22# This file contains code that handles the execution of python codeCOMMENT
MEDIUMrenpy/types.py22# This file contains the various types that Ren'Py uses.COMMENT
MEDIUMrenpy/substitutions.py22# This file contains support for string translation and string formattingCOMMENT
MEDIUMrenpy/loadsave.py22# This file contains functions that load and save the game state.COMMENT
MEDIUMrenpy/dump.py22# This file contains code to write the reflect.json file. This file containsCOMMENT
MEDIUMrenpy/parser.py22# This module contains the parser for the Ren'Py script language. It'sCOMMENT
MEDIUMrenpy/atl.py1539 # Create a new transform state, and apply the propertyCOMMENT
MEDIUMrenpy/debug.py22# This file contains debugging code that isn't enabled in normal Ren'PyCOMMENT
MEDIUMrenpy/python.py22# This file contains code that handles the execution of python codeCOMMENT
MEDIUMrenpy/python.py231 # Create the dict.COMMENT
MEDIUMrenpy/character.py720 # Create a callback object specific to this pause.COMMENT
MEDIUMrenpy/character.py774 # Create the callback that is called when the slow text is done.COMMENT
MEDIUMrenpy/persistent.py279 # Create the backup of the persistent data.COMMENT
MEDIUMrenpy/ast.py22# This file contains the AST for the Ren'Py script language. Each classCOMMENT
MEDIUMrenpy/statements.py22# This module contains code to support user-defined statements.COMMENT
MEDIUMrenpy/main.py470 # Initialize persistent variables.COMMENT
MEDIUMrenpy/script.py22# This file contains code that is responsible for storing and executing aCOMMENT
MEDIUMrenpy/update/generate.py146 # Create a list of files by reverse mtime. The idea is that the newerCOMMENT
MEDIUMrenpy/sl2/slast.py46# This file contains the abstract syntax tree for a screen languageCOMMENT
MEDIUMrenpy/sl2/slast.py942 # Create the context.COMMENT
MEDIUMrenpy/sl2/slast.py2062 # Create an old-style displayable name for this call site.COMMENT
MEDIUMrenpy/exports/__init__.py22# This file contains functions that are exported to the script namespace asCOMMENT
MEDIUMrenpy/common/00sshtransition_ren.py22# This file contains support for a transition after a sequence ofCOMMENT
MEDIUMrenpy/display/anim.py22# This file contains support for state-machine controlled animations.COMMENT
MEDIUMrenpy/display/error.py22# This file contains code to handle GUI-based error reporting.COMMENT
MEDIUMrenpy/display/behavior.py2007# This class contains information about an adjustment that can change theCOMMENT
MEDIUMrenpy/display/emulator.py22# This file contains code to emulate various other devices on the PC.COMMENT
MEDIUMrenpy/display/layout.py22# This file contains classes that handle layout of displayables onCOMMENT
MEDIUMrenpy/display/predict.py22# This file contains the routines that manage image prediction.COMMENT
MEDIUMrenpy/display/core.py955 # Create a cache of the mouse information.COMMENT
MEDIUMrenpy/display/imagemap.py22# This file handles imagemap caching.COMMENT
MEDIUMrenpy/display/pgrender.py48 # Create a sample surface.COMMENT
MEDIUMrenpy/display/pgrender.py62 # Create the sample surface.COMMENT
MEDIUMrenpy/display/viewport.py22# This file contains classes that handle layout of displayables onCOMMENT
MEDIUMrenpy/display/im.py22# This file contains the new image code, which includes provisions forCOMMENT
MEDIUMrenpy/display/motion.py22# This file contains displayables that move, zoom, rotate, or otherwiseCOMMENT
MEDIUMrenpy/display/transform.py22# This file contains displayables that move, zoom, rotate, or otherwiseCOMMENT
MEDIUMrenpy/display/imagelike.py22# This file contains displayables that are image-like, because they takeCOMMENT
MEDIUMrenpy/display/image.py22# This file contains some miscellaneous displayables that involve images.COMMENT
MEDIUMrenpy/display/focus.py22# This file contains code to manage focus on the display.COMMENT
MEDIUMrenpy/text/emoji_trie.py3# This file is generated by module/emoji/make_emoji_trie.py. Do notCOMMENT
MEDIUMrenpy/text/text.py1048 # Create the texture.COMMENT
MEDIUMsphinx/source/conf.py6# This file is execfile()d with the current directory set to its containing dir.COMMENT
MEDIUMsphinx/source/fill-translator-credits.py4# This file is part of Ren'Py. The license below applies to Ren'Py only.COMMENT
MEDIUMscripts/generate_styles.py438# This file is generated by generate_styles.py.COMMENT
MEDIUMscripts/unicode/make_emoji_trie.py174# This file is generated by module/emoji/make_emoji_trie.py. Do notSTRING
MEDIUMscripts/sdl3/main.py78 # This file is automatically generated by scripts/sdl3/main.py. Do not edit manually.COMMENT
Cross-Language Confusion17 hits · 88 pts
SeverityFileLineSnippetContext
HIGHrenpy/ecsign.py347 Returns the uncompressed 64-byte binary representation (X || Y).STRING
HIGHrenpy/ecsign.py488 Signs `data` with ECDSA (NIST256p). Returns a 64-byte binary signature (r || s).STRING
HIGHrenpy/webloader.py63 if (xhr.status == 200 || xhr.status == 304 || xhr.status == 206 || (xhr.status == 0 && xhr.response)) {CODE
HIGHrenpy/webloader.py63 if (xhr.status == 200 || xhr.status == 304 || xhr.status == 206 || (xhr.status == 0 && xhr.response)) {CODE
HIGHrenpy/atl.py1474 if (old_child is not None) and (old_child is not renpy.display.motion.null) and (self.transition is not None):CODE
HIGHrenpy/main.py251 || (navigator.userAgent.indexOf("Mac") != -1 && navigator.maxTouchPoints > 1)"""CODE
HIGHrenpy/exports/fetchexports.py234 command = """fetchFile("{method}", "{url}", null, "{fn}", null, "{headers}")""".format(CODE
HIGHrenpy/common/00textshader_ren.py206 if (u__duration <= 0.0 || u_text_time < u__duration) {CODE
HIGH⚡renpy/audio/webaudio.py42 emscripten.run_script("renpyAudio.{}.apply(null, {});".format(function, dumps(args)))CODE
HIGH⚡renpy/audio/webaudio.py50 return emscripten.run_script_int("renpyAudio.{}.apply(null, {});".format(function, dumps(args)))CODE
HIGH⚡renpy/audio/webaudio.py58 rv = emscripten.run_script_string("renpyAudio.{}.apply(null, {});".format(function, dumps(args)))CODE
HIGHrenpy/display/behavior.py2807 return render(self.null, width, height, st, at)CODE
HIGHrenpy/display/layout.py569 self.add(null)CODE
HIGHrenpy/display/tts.py463 language = locale.toString().replace("_", "-")CODE
HIGHrenpy/display/core.py2820 ld.add(null)CODE
HIGHrenpy/display/viewport.py777 self.add(null)CODE
HIGHrenpy/gl2/live2d.py124window.live2d_csm.ccall("csmInitializeAmountOfMemory", null, ["number"], [{renpy.config.live2d_max_memory}]);CODE
AI Structural Patterns69 hits · 52 pts
SeverityFileLineSnippetContext
LOWrenpy/revertable.py349CODE
LOWrenpy/ui.py842CODE
LOWrenpy/ui.py930CODE
LOWrenpy/ui.py1248CODE
LOWrenpy/preferences.py379CODE
LOWrenpy/parser.py850CODE
LOWrenpy/parser.py874CODE
LOWrenpy/parser.py1236CODE
LOWrenpy/parser.py1245CODE
LOWrenpy/lexer.py1797CODE
LOWrenpy/character.py342CODE
LOWrenpy/character.py1428CODE
LOWrenpy/statements.py37CODE
LOWrenpy/test/testparser.py537CODE
LOWrenpy/test/testparser.py562CODE
LOWrenpy/test/testast.py405CODE
LOWrenpy/test/testast.py768CODE
LOWrenpy/update/common.py100CODE
LOWrenpy/update/common.py117CODE
LOWrenpy/update/common.py152CODE
LOWrenpy/translation/generation.py419CODE
LOWrenpy/sl2/slast.py699CODE
LOWrenpy/sl2/slast.py1854CODE
LOWrenpy/sl2/slast.py1871CODE
LOWrenpy/sl2/slast.py1917CODE
LOWrenpy/sl2/slparser.py740CODE
LOWrenpy/exports/fetchexports.py285CODE
LOWrenpy/exports/displayexports.py371CODE
LOWrenpy/exports/displayexports.py1349CODE
LOWrenpy/exports/menuexports.py202CODE
LOWrenpy/exports/inputexports.py68CODE
LOWrenpy/audio/webaudio.py60CODE
LOWrenpy/audio/music.py36CODE
LOWrenpy/audio/audio.py951CODE
LOWrenpy/display/screen.py226CODE
LOWrenpy/display/anim.py466CODE
LOWrenpy/display/behavior.py876CODE
LOWrenpy/display/behavior.py999CODE
LOWrenpy/display/behavior.py1327CODE
LOWrenpy/display/behavior.py1515CODE
LOWrenpy/display/behavior.py2050CODE
LOWrenpy/display/behavior.py2371CODE
LOWrenpy/display/displayable.py676CODE
LOWrenpy/display/movetransition.py457CODE
LOWrenpy/display/transition.py488CODE
LOWrenpy/display/transition.py841CODE
LOWrenpy/display/dragdrop.py327CODE
LOWrenpy/display/core.py2456CODE
LOWrenpy/display/pgrender.py189CODE
LOWrenpy/display/pgrender.py86CODE
LOWrenpy/display/viewport.py77CODE
LOWrenpy/display/motion.py61CODE
LOWrenpy/display/motion.py439CODE
LOWrenpy/display/motion.py637CODE
LOWrenpy/display/particle.py666CODE
LOWrenpy/display/module.py215CODE
LOWrenpy/display/video.py655CODE
LOWrenpy/display/imagelike.py202CODE
LOWrenpy/display/scenelists.py350CODE
LOWrenpy/display/scale.py70CODE
9 more matches not shown…
AI Slop Vocabulary8 hits · 16 pts
SeverityFileLineSnippetContext
LOWlauncher/game/change_icon.py391 # There's already a header size, and this isn't changing headers, so just add.COMMENT
MEDIUMrenpy/error.py98 # TODO: Make it more robust by is_relative_to check.COMMENT
MEDIUM⚡renpy/translation/__init__.py1229 # robust against minor ordering oddities. First valid match per slot wins,COMMENT
LOWrenpy/sl2/slast.py885 # We do not want to pass keywords to our parents, so just return.COMMENT
LOWrenpy/display/behavior.py638 # If we have been drawn since the timeout, simply returnCOMMENT
LOWrenpy/display/swdraw.py62 # allows us to just return without having to do any cleanupCOMMENT
MEDIUMrenpy/gl2/live2d.py1171 # Handle seamless.STRING
LOWscripts/setuplib.py336 # On Windows, pkg-config is not used, so just return the empty dict.COMMENT
Structural Annotation Overuse6 hits · 12 pts
SeverityFileLineSnippetContext
LOW⚡renpy/translation/__init__.py1223 # Step 2: language subtag must be 2 or 3 alphabetic characters (ISO 639-1/2/3).COMMENT
LOW⚡renpy/translation/__init__.py1228 # Step 3: walk remaining subtags. Identify by shape, not position, so we'reCOMMENT
LOW⚡renpy/translation/__init__.py1245 # Step 4: infer region if missing.COMMENT
LOW⚡renpy/translation/__init__.py1249 # Step 5: handle script. Only Chinese commonly carries a script in practice,COMMENT
LOWrenpy/translation/__init__.py1208 # Step 1: strip BCP 47 extensions. Everything from "-u-", "-t-", or "-x-"COMMENT
LOWrenpy/display/transform.py1138 # NOTE: This function is duplicated (more or less) in ATLTransform.COMMENT
Verbosity Indicators5 hits · 10 pts
SeverityFileLineSnippetContext
LOW⚡renpy/translation/__init__.py1223 # Step 2: language subtag must be 2 or 3 alphabetic characters (ISO 639-1/2/3).COMMENT
LOW⚡renpy/translation/__init__.py1228 # Step 3: walk remaining subtags. Identify by shape, not position, so we'reCOMMENT
LOW⚡renpy/translation/__init__.py1245 # Step 4: infer region if missing.COMMENT
LOW⚡renpy/translation/__init__.py1249 # Step 5: handle script. Only Chinese commonly carries a script in practice,COMMENT
LOWrenpy/translation/__init__.py1208 # Step 1: strip BCP 47 extensions. Everything from "-u-", "-t-", or "-x-"COMMENT
Dead Code5 hits · 10 pts
SeverityFileLineSnippetContext
MEDIUMrenpy/sl2/slast.py1849CODE
MEDIUMrenpy/sl2/slast.py1866CODE
MEDIUMrenpy/sl2/slast.py1912CODE
MEDIUMrenpy/sl2/slast.py1956CODE
MEDIUMtestcases/pytests/test_asynctask.py418CODE
Hallucination Indicators1 hit · 10 pts
SeverityFileLineSnippetContext
CRITICALtestcases/pytests/test_presplash.py136 jnius.autoclass.return_value.mActivity.hidePresplash.assert_called_once_with()CODE
Redundant / Tautological Comments6 hits · 9 pts
SeverityFileLineSnippetContext
LOWrenpy/config.py1510# Set this to true to log events to log.txt.COMMENT
LOWrenpy/main.py496 # Check if we should simulate android.COMMENT
LOWrenpy/script.py510 # Assign names to statements that don't have one already.COMMENT
LOWrenpy/test/testparser.py885 ## Check if we have another condition after this oneCOMMENT
LOWrenpy/update/generate.py167 # Write the filelist to a file.COMMENT
LOWrenpy/display/layout.py666 # Set this to true to force the box to adjust its children's times.COMMENT
Modern Structural Boilerplate8 hits · 8 pts
SeverityFileLineSnippetContext
LOWrenpy/bootstrap.py286def set_utf8_locale() -> None:CODE
LOWrenpy/minstore.py179__all__ = [CODE
LOWrenpy/compat/__init__.py132__all__ = [CODE
LOWrenpy/test/testexecution.py212def set_next_execution_node(next_node: Node | None) -> None:CODE
LOWrenpy/test/testexecution.py290def update_enable_flag() -> None:CODE
LOWrenpy/test/testexecution.py468 def set_next_node(self, next: Node | None) -> None:CODE
LOWrenpy/test/testexecution.py471 def set_end_callback(self, callback: Callable | list[Callable]) -> None:CODE
LOWrenpy/test/testreporter.py901 def _update_assert_counters(self, outcome: BaseOutcome, status: OutcomeStatus) -> None:CODE
Decorative Section Separators1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMrenpy/text/extras.py337 # ==============================================COMMENT
Modern AI Meta-Vocabulary1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMscripts/unicode/LineBreak.txt1927B77D..B797 ; H3 # Lo [27] HANGUL SYLLABLE RAG..HANGUL SYLLABLE RAHCODE
Slop Phrases1 hit · 0 pts
SeverityFileLineSnippetContext
LOWrenpy/gl2/live2d.py860 # Note: When adding new parameters, make sure to add them to _duplicate, too.STRING