AI Slop Code RIsk Monitor

lutris/lutris

Lutris desktop client

22.8 Elevated pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for lutris/lutris, a Python project with 10,306 GitHub stars. SynthScan examined 78,627 lines of code across 390 source files, recording 1252 pattern matches distributed across 18 syntactic categories. The legacy adjusted pattern signal is 22.8 (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.

22.8
Adjusted Signal
22.8
Raw Pattern Score
100%
Time Factor
2026-10-10
Last Push
10.3K
Stars
Python
Language
78.6K
Lines of Code
390
Files
1.3K
Pattern Hits
2026-10-12
Scan Date
0.15
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 48.0/100 · MEDIUM

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

Hallucinated Dependency & Supply Chain Risk 3.8/100 · LOW

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

Agent Over-Engineering Ratio 60.3/100 · HIGH

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

PR Review Velocity Impact 67.0/100 · HIGH

Which changes need focused human review? 1252 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 0HIGH 59MEDIUM 97LOW 1096

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 1252 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 Identifiers691 hits · 743 pts
SeverityFileLineSnippetContext
LOWlutris/game.py147 def create_empty_service_game(db_game: dict[str, str | int], service: Any) -> Any:CODE
LOWlutris/game.py1208 def _get_move_target_directory(self, new_location: str) -> str:CODE
LOWlutris/cache.py58def has_valid_custom_cache_path() -> bool:CODE
LOWlutris/cache.py74def validate_custom_cache_path(cache_path: str) -> tuple[bool, str | None]:CODE
LOWlutris/runtime.py182 def create_component_updaters(self) -> list[ComponentUpdater]:CODE
LOW⚡lutris/api.py46def get_runtime_versions_date() -> float:CODE
LOW⚡lutris/api.py50def get_runtime_versions_date_time_ago() -> str:CODE
LOW⚡lutris/api.py57def check_stale_runtime_versions() -> bool:CODE
LOWlutris/api.py72def download_runtime_versions() -> RuntimeVersionsDict:CODE
LOWlutris/api.py213def normalize_version_architecture(version_name: str) -> str:CODE
LOWlutris/api.py220def format_version_architecture(base_version: str, arch: str | None = None) -> str:CODE
LOWlutris/api.py239def parse_version_architecture(version_name: str) -> tuple[str, str | None]:CODE
LOWlutris/api.py250def get_runner_version_from_cache(runner_name: str, version: str | None) -> RunnerVersionDict | None:CODE
LOWlutris/api.py268def iter_get_from_api_candidates(CODE
LOWlutris/api.py301def get_runner_version_from_api(runner_name: str, version: str | None) -> RunnerVersionDict | None:CODE
LOWlutris/api.py313def get_default_runner_version_info(runner_name: str, version: str | None = None) -> RunnerVersionDict | None:CODE
LOWlutris/api.py356def get_game_service_api_page(service: str, appids: Collection[str] | None, page: int | str = 1) -> GamesPageDict:CODE
LOWlutris/exception_backstops.py132 def _error_handling_add_emission_hook(CODE
LOWlutris/exception_backstops.py152 def _error_handling_timeout_add(interval: int, handler: AnyCallable, *args: Any, **kwargs: Any) -> Any:CODE
LOWlutris/game_actions.py347 def on_execute_script_clicked(self, _widget: Gtk.Widget) -> None:CODE
LOWlutris/game_actions.py367 def on_edit_game_configuration(self, _widget: Gtk.Widget) -> None:CODE
LOWlutris/game_actions.py401 def on_create_steam_bigpicture_shortcut(self, *_args: Any) -> None:CODE
LOWlutris/game_actions.py413 def on_create_desktop_shortcut(self, *_args: Any) -> None:CODE
LOWlutris/game_actions.py429 def on_remove_desktop_shortcut(self, *_args: Any) -> None:CODE
LOWlutris/game_actions.py492 def _select_game_launch_config_name(self, game: Game) -> str | None:CODE
LOWlutris/settings.py84def get_lutris_directory_settings(directory: str) -> dict[str, str]:CODE
LOWlutris/settings.py102def set_lutris_directory_settings(directory: str, settings: dict[str, str], merge: bool = True) -> bool:CODE
LOWlutris/search.py293 def get_game_lastplayed_duration_ago(db_game):CODE
LOWlutris/search.py358 def get_categorized_predicate(self, categorized: bool | None) -> SearchPredicate:CODE
LOWlutris/search.py371 def get_category_flag_predicate(self, category: str, tag: str, in_category: bool | None = True) -> FlagPredicate:CODE
LOWlutris/monitored_command.py28def get_wrapper_script_location() -> str:CODE
LOWlutris/monitored_command.py244 def log_handler_console_output(self, line: str) -> None:CODE
LOWlutris/runner_interpreter.py135def _get_gamescope_fsr_option():CODE
LOWlutris/database/categories.py59def normalized_category_names(name: str, subname_allowed: bool = False) -> list[str]:CODE
LOWlutris/database/categories.py78def get_game_ids_for_categories(CODE
LOWlutris/database/categories.py121def get_uncategorized_game_ids() -> set[str]:CODE
LOWlutris/database/categories.py198def remove_category_from_game(game_id: str, category_id: int, no_signal: bool = False) -> None:CODE
LOWlutris/database/games.py125def get_all_installed_game_for_service(service: str) -> dict[str, DbGameDict]:CODE
LOWlutris/util/downloader.py296 def _discard_persistent_state(self) -> None: # noqa: B027CODE
LOWlutris/util/gog.py66def convert_gog_config_to_lutris(gog_config, gog_game_path):CODE
LOWlutris/util/gog.py114def find_installed_product_ids(install_dir):CODE
LOWlutris/util/tokenization.py129 def get_cleaned_token_sequence(self, stop_function: Callable[[TokenReader], bool]) -> str | None:CODE
LOWlutris/util/sniper.py46def get_sniper_host_lib_paths() -> list[str]:CODE
LOWlutris/util/sniper.py85def get_sniper_ld_library_path() -> str:CODE
LOWlutris/util/jobs.py199def schedule_repeating_at_idle(CODE
LOWlutris/util/process.py63 def get_children_pids_of_thread(self, tid):CODE
LOWlutris/util/moddb.py18def _try_import_moddb_library():CODE
LOWlutris/util/moddb.py60 def _get_html_and_resolve_mirrors_list(self, moddb_permalink_url):CODE
LOWlutris/util/linux.py176 def has_enough_file_descriptors(self) -> bool:CODE
LOWlutris/util/linux.py455 def get_missing_requirement_libs(self, req: str) -> list[list[str]]:CODE
LOWlutris/util/linux.py536def get_default_runner_wine_version() -> str:CODE
LOWlutris/util/linux.py635def get_required_default_terminal() -> str:CODE
LOWlutris/util/game_finder.py60def find_linux_game_executable(path, make_executable=False):CODE
LOWlutris/util/game_finder.py137def find_windows_game_executable(path):CODE
LOWlutris/util/library_sync.py225 def delete_from_remote_library(self, games):CODE
LOWlutris/util/gog_downloader.py139 def _discard_persistent_state(self) -> None:CODE
LOWlutris/util/gog_downloader.py479 def _write_from_full_response(self, response: requests.Response, start: int, end: int) -> None:CODE
LOWlutris/util/steam/config.py180 def get_entry_case_insensitive(config_dict: dict[str, Any], path: list[str]) -> Any:CODE
LOWlutris/util/steam/config.py206 def get_entry_case_insensitive(library_dict: dict[str, Any], path: list[str]) -> Any:CODE
LOWlutris/util/steam/appmanifest.py109def get_appmanifest_from_appid(steamapps_path: str, appid: str) -> AppManifest | None:CODE
631 more matches not shown…
Decorative Section Separators70 hits · 261 pts
SeverityFileLineSnippetContext
MEDIUMlutris/util/download_progress.py58 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/util/download_progress.py60 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/util/download_progress.py122 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/util/download_progress.py124 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/util/download_progress.py145 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/util/download_progress.py147 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/util/download_progress.py204 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/util/download_progress.py206 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/util/download_progress.py223 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/util/download_progress.py225 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/util/downloader.py272 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/util/downloader.py274 # ------------------------------------------------------------------COMMENT
MEDIUM⚡lutris/gui/widgets/download_collection_progress_box.py146 # ------------------------------------------------------------------COMMENT
MEDIUM⚡lutris/gui/widgets/download_collection_progress_box.py148 # ------------------------------------------------------------------COMMENT
MEDIUM⚡lutris/gui/widgets/download_collection_progress_box.py155 # ------------------------------------------------------------------COMMENT
MEDIUM⚡lutris/gui/widgets/download_collection_progress_box.py157 # ------------------------------------------------------------------COMMENT
MEDIUM⚡lutris/gui/widgets/download_collection_progress_box.py286 # ------------------------------------------------------------------COMMENT
MEDIUM⚡lutris/gui/widgets/download_collection_progress_box.py288 # ------------------------------------------------------------------COMMENT
MEDIUM⚡lutris/gui/widgets/download_collection_progress_box.py296 # ------------------------------------------------------------------COMMENT
MEDIUM⚡lutris/gui/widgets/download_collection_progress_box.py298 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py121 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py123 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py175 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py177 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py250 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py252 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py272 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py274 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py382 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py384 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py405 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py407 # ------------------------------------------------------------------COMMENT
MEDIUMtests/_test_cloud_sync_progress.py19# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/_test_cloud_sync_progress.py21# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/_test_cloud_sync_progress.py40# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/_test_cloud_sync_progress.py42# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/util/_test_collection_progress.py101# ── Tests: Initialisation ───────────────────────────────────────────COMMENT
MEDIUM⚡tests/util/_test_collection_progress.py119# ── Tests: _create_downloader ───────────────────────────────────────COMMENT
MEDIUM⚡tests/util/_test_collection_progress.py220# ── Tests: Aggregate progress ────────────────────────────────────────COMMENT
MEDIUM⚡tests/util/_test_collection_progress.py280# ── Tests: Start / prefetch ──────────────────────────────────────────COMMENT
MEDIUMtests/util/_test_collection_progress.py21# ── Helpers ──────────────────────────────────────────────────────────COMMENT
MEDIUMtests/util/_test_collection_progress.py71# ── Fixture ──────────────────────────────────────────────────────────COMMENT
MEDIUMtests/util/_test_collection_progress.py83# ── Tests: _ActiveDownload ───────────────────────────────────────────COMMENT
MEDIUMtests/util/_test_collection_progress.py178# ── Tests: _pop_next_downloadable_file ───────────────────────────────COMMENT
MEDIUMtests/util/_test_collection_progress.py243# ── Tests: File labels ───────────────────────────────────────────────COMMENT
MEDIUMtests/util/_test_collection_progress.py361# ── Tests: Progress callback ─────────────────────────────────────────COMMENT
MEDIUMtests/util/_test_collection_progress.py495# ── Tests: Cancel ────────────────────────────────────────────────────COMMENT
MEDIUMtests/util/_test_collection_progress.py533# ── Tests: Edge cases ────────────────────────────────────────────────COMMENT
MEDIUM⚡tests/util/_test_gog_downloader.py613# ==================================================================COMMENT
MEDIUM⚡tests/util/_test_gog_downloader.py615# ==================================================================COMMENT
MEDIUM⚡tests/util/_test_download_progress.py23# ------------------------------------------------------------------COMMENT
MEDIUM⚡tests/util/_test_download_progress.py25# ------------------------------------------------------------------COMMENT
MEDIUM⚡tests/util/_test_download_progress.py49# ------------------------------------------------------------------COMMENT
MEDIUM⚡tests/util/_test_download_progress.py51# ------------------------------------------------------------------COMMENT
MEDIUM⚡tests/util/_test_download_progress.py88# ------------------------------------------------------------------COMMENT
MEDIUM⚡tests/util/_test_download_progress.py90# ------------------------------------------------------------------COMMENT
MEDIUM⚡tests/util/_test_download_progress.py174# ------------------------------------------------------------------COMMENT
MEDIUM⚡tests/util/_test_download_progress.py176# ------------------------------------------------------------------COMMENT
MEDIUM⚡tests/util/_test_download_progress.py205# ------------------------------------------------------------------COMMENT
MEDIUM⚡tests/util/_test_download_progress.py207# ------------------------------------------------------------------COMMENT
10 more matches not shown…
Empty Error Handlers44 hits · 220 pts
SeverityFileLineSnippetContext
HIGHlutris/game.py875except AssertionError:CODE
HIGHlutris/game.py1120except:CODE
HIGHlutris/api.py263except KeyError:CODE
HIGHlutris/exception_backstops.py69except GLib.GError:CODE
HIGHlutris/search.py153except InvalidSearchTermError:CODE
HIGHlutris/monitored_command.py352except ProcessLookupError:CODE
HIGHlutris/util/magic.py246except OSError:CODE
HIGHlutris/util/magic.py98except MagicException:CODE
HIGHlutris/util/joypad.py28except RuntimeError:CODE
HIGHlutris/util/path_cache.py35except OSError:CODE
HIGHlutris/util/system.py414except OSError:CODE
HIGHlutris/util/download_progress.py250except OSError:CODE
HIGHlutris/util/download_cache.py249except OSError:CODE
HIGHlutris/util/download_cache.py185except (OSError, json.JSONDecodeError):CODE
HIGHlutris/util/download_cache.py234except OSError:CODE
HIGHlutris/util/display.py140except GLib.Error:CODE
HIGHlutris/util/strings.py316except ValueError:CODE
HIGHlutris/util/strings.py353except StopIteration:CODE
HIGHlutris/util/wine/fsync.py148except KeyError:CODE
HIGHlutris/util/wine/fsync.py308except KeyError:CODE
HIGHlutris/util/wine/registry.py311except UnicodeDecodeError:CODE
HIGHlutris/util/wine/wine.py148except MisconfigurationError:CODE
HIGHlutris/util/wine/dxvk.py52except OSError:CODE
HIGHlutris/gui/download_queue.py43except AttributeError:CODE
HIGHlutris/gui/lutriswindow.py717except InvalidSearchTermError:CODE
HIGHlutris/gui/application.py828except ValueError:CODE
HIGHlutris/gui/config/edit_saved_search.py122except InvalidSearchTermError:CODE
HIGHlutris/gui/dialogs/__init__.py232except AttributeError:CODE
HIGHlutris/gui/dialogs/delegates.py223except IndexError:CODE
HIGHlutris/gui/widgets/game_bar.py49except KeyError:CODE
HIGHlutris/gui/widgets/common.py156except ValueError:CODE
HIGHlutris/scanners/playtron.py98except OSError:CODE
HIGHlutris/scanners/lutris.py43except KeyError:CODE
HIGHlutris/runners/runner.py588except MisconfigurationError:CODE
HIGHlutris/runners/wine.py944except UnspecifiedVersionError:CODE
HIGHlutris/runners/scummvm.py491except MissingExecutableError:CODE
HIGHlutris/installer/interpreter.py510except (ValueError, TypeError):CODE
HIGHlutris/installer/interpreter.py515except MisconfigurationError:CODE
HIGHlutris/installer/commands.py51except UnspecifiedVersionError:CODE
HIGHlutris/installer/commands.py352except OSError:CODE
HIGHtests/_test_lutris_wrapper.py48except subprocess.TimeoutExpired:CODE
HIGHtests/_test_lutris_wrapper.py107except subprocess.TimeoutExpired:CODE
HIGHtests/util/_test_path_cache.py87except OSError:CODE
HIGHtests/util/_test_downloader.py59except OSError:CODE
Excessive Try-Catch Wrapping113 hits · 128 pts
SeverityFileLineSnippetContext
LOWlutris/startup.py91 except Exception:CODE
LOWlutris/config.py301 except Exception as ex:CODE
LOWlutris/game.py798 except Exception as ex:CODE
LOWlutris/game.py1092 except Exception as ex:CODE
LOWlutris/runtime.py234 except Exception as ex:CODE
LOWlutris/api.py473 except Exception as ex:CODE
MEDIUMlutris/api.py50def get_runtime_versions_date_time_ago() -> str:CODE
LOWlutris/exception_backstops.py40 except Exception as ex:CODE
LOWlutris/exception_backstops.py86 except Exception as ex:CODE
LOWlutris/settings.py97 except Exception as ex:CODE
LOWlutris/settings.py126 except Exception as ex:CODE
LOWlutris/style_manager.py69 except Exception as ex:CODE
LOWlutris/style_manager.py80 except Exception as ex:CODE
MEDIUMlutris/style_manager.py60def _new_for_bus_cb(self, obj, result):CODE
MEDIUMlutris/style_manager.py72def _call_cb(self, obj, result):CODE
LOWlutris/util/cookies.py76 except Exception as err:CODE
LOWlutris/util/system.py459 except Exception as ex:CODE
LOWlutris/util/gogdl.py102 except Exception:CODE
LOWlutris/util/download_progress.py246 except Exception:CODE
LOWlutris/util/downloader.py421 except Exception as ex:CODE
LOWlutris/util/display.py130 except Exception as ex: # pylint: disable=broad-exceptCODE
LOWlutris/util/display.py398 except Exception as ex:CODE
LOWlutris/util/display.py425 except Exception as ex:CODE
LOWlutris/util/jobs.py78 except Exception as ex: # pylint: disable=broad-exceptCODE
LOWlutris/util/portals.py99 except Exception as ex:CODE
LOWlutris/util/portals.py133 except Exception as ex:CODE
MEDIUMlutris/util/portals.py48def _new_for_bus_cb(self, obj, result):CODE
LOWlutris/util/linux.py284 except Exception as ex:CODE
LOWlutris/util/linux.py543 except Exception as ex:CODE
LOWlutris/util/gog_downloader.py208 except Exception as ex:CODE
LOWlutris/util/gog_downloader.py326 except Exception as ex:CODE
LOWlutris/util/gog_downloader.py346 except Exception as ex:CODE
LOWlutris/util/gog_downloader.py391 except Exception:CODE
LOWlutris/util/gog_downloader.py461 except Exception as ex:CODE
LOWlutris/util/steam/shortcut.py48 except Exception as ex:CODE
LOWlutris/util/steam/shortcut.py78 except Exception as ex:CODE
MEDIUMlutris/util/steam/shortcut.py45def vdf_file_exists() -> bool:CODE
LOWlutris/util/mame/database.py65 except Exception as ex: # pylint: disable=broad-exceptCODE
LOWlutris/util/dolphin/cache_reader.py96 except Exception as ex:CODE
LOW⚡lutris/util/wine/prefix.py236 except Exception as ex:CODE
LOWlutris/util/wine/prefix.py294 except Exception as ex:CODE
LOWlutris/util/wine/prefix.py313 except Exception as ex:CODE
MEDIUMlutris/util/wine/prefix.py226def _get_desktop_integration_assignment(self):CODE
LOWlutris/util/wine/registry.py106 except Exception: # pylint: disable=broad-exceptCODE
LOWlutris/util/wine/wine.py37except Exception as ex:CODE
LOWlutris/util/ubisoft/client.py45 except Exception as ex:CODE
LOWlutris/util/ubisoft/client.py82 except Exception:CODE
LOWlutris/util/ubisoft/client.py91 except Exception as ex:CODE
LOWlutris/util/ubisoft/client.py286 except Exception as ex: # 412: no stats available for this userCODE
LOWlutris/util/ubisoft/client.py307 except Exception:CODE
MEDIUMlutris/util/ubisoft/client.py42def request(self, method, url, *args, **kwargs):CODE
MEDIUMlutris/util/ubisoft/client.py304def get_subscription(self):CODE
LOW⚡lutris/util/ubisoft/helpers.py60 except Exception as e:CODE
LOW⚡lutris/util/ubisoft/helpers.py74 except Exception as e:CODE
MEDIUMlutris/util/ubisoft/helpers.py52def _read_status_from_state_file(game_path):CODE
LOWlutris/util/graphics/drivers.py87 except Exception as ex:CODE
LOWlutris/gui/installerwindow.py831 except Exception as err:CODE
LOWlutris/gui/installerwindow.py879 except Exception as err:CODE
MEDIUMlutris/gui/installerwindow.py827def on_continue(_button):CODE
MEDIUMlutris/gui/installerwindow.py875def wrapped_callback(*args, **kwargs):CODE
53 more matches not shown…
Deep Nesting124 hits · 120 pts
SeverityFileLineSnippetContext
LOWlutris/startup.py52CODE
LOWlutris/startup.py74CODE
LOWlutris/config.py290CODE
LOWlutris/runtime.py200CODE
LOWlutris/runtime.py219CODE
LOWlutris/api.py118CODE
LOWlutris/exception_backstops.py52CODE
LOWlutris/game_actions.py95CODE
LOWlutris/settings.py84CODE
LOWlutris/search.py66CODE
LOWlutris/search.py301CODE
LOWlutris/monitored_command.py153CODE
LOWlutris/database/games.py48CODE
LOWlutris/util/cookies.py12CODE
LOWlutris/util/system.py549CODE
LOWlutris/util/download_progress.py227CODE
LOWlutris/util/savesync.py250CODE
LOWlutris/util/downloader.py377CODE
LOWlutris/util/datapath.py11CODE
LOWlutris/util/tokenization.py18CODE
LOWlutris/util/tokenization.py29CODE
LOWlutris/util/tokenization.py64CODE
LOWlutris/util/download_cache.py193CODE
LOWlutris/util/sniper.py46CODE
LOWlutris/util/libretro.py29CODE
LOWlutris/util/linux.py122CODE
LOWlutris/util/linux.py385CODE
LOWlutris/util/game_finder.py60CODE
LOWlutris/util/game_finder.py137CODE
LOWlutris/util/extract.py20CODE
LOWlutris/util/extract.py114CODE
LOWlutris/util/extract.py139CODE
LOWlutris/util/extract.py172CODE
LOWlutris/util/library_sync.py151CODE
LOWlutris/util/strings.py46CODE
LOWlutris/util/strings.py299CODE
LOWlutris/util/strings.py272CODE
LOWlutris/util/gog_downloader.py173CODE
LOWlutris/util/gog_downloader.py213CODE
LOWlutris/util/gog_downloader.py394CODE
LOWlutris/util/gog_downloader.py525CODE
LOWlutris/util/steam/config.py240CODE
LOWlutris/util/steam/log.py8CODE
LOWlutris/util/steam/vdf/__init__.py64CODE
LOWlutris/util/steam/vdf/__init__.py297CODE
LOWlutris/util/steam/vdf/__init__.py402CODE
LOWlutris/util/amazon/protobuf_decoder.py212CODE
LOWlutris/util/mame/ini.py36CODE
LOWlutris/util/dolphin/cache_reader.py73CODE
LOWlutris/util/wine/prefix.py330CODE
LOWlutris/util/wine/fsync.py264CODE
LOWlutris/util/wine/cabinstall.py73CODE
LOWlutris/util/wine/cabinstall.py118CODE
LOWlutris/util/wine/cabinstall.py168CODE
LOWlutris/util/wine/registry.py111CODE
LOWlutris/util/wine/dll_manager.py119CODE
LOWlutris/util/wine/dxvk.py34CODE
LOWlutris/util/wine/proton.py174CODE
LOWlutris/util/ubisoft/client.py68CODE
LOWlutris/util/ubisoft/client.py208CODE
64 more matches not shown…
Unused Imports62 hits · 60 pts
SeverityFileLineSnippetContext
LOWlutris/game.py46CODE
LOWlutris/game.py47CODE
LOWlutris/exception_backstops.py12CODE
LOWlutris/game_actions.py39CODE
LOWlutris/game_actions.py40CODE
LOWlutris/monitored_command.py23CODE
LOWlutris/monitored_command.py25CODE
LOWlutris/sysoptions.py16CODE
LOWlutris/util/log.py12CODE
LOWlutris/util/tokenization.py1CODE
LOWlutris/util/display.py3CODE
LOWlutris/util/display.py43CODE
LOWlutris/util/jobs.py12CODE
LOWlutris/util/http.py21CODE
LOWlutris/util/http.py22CODE
LOWlutris/util/http.py23CODE
LOWlutris/util/standalone_scripts.py8CODE
LOWlutris/util/standalone_scripts.py9CODE
LOWlutris/util/discord/__init__.py5CODE
LOWlutris/util/steam/shortcut.py18CODE
LOWlutris/util/wine/proton.py19CODE
LOWlutris/gui/application.py66CODE
LOWlutris/gui/application.py67CODE
LOWlutris/gui/application.py68CODE
LOWlutris/gui/application.py69CODE
LOWlutris/gui/config/game_common.py28CODE
LOWlutris/gui/config/add_game_dialog.py8CODE
LOWlutris/gui/config/add_game_dialog.py10CODE
LOWlutris/gui/config/widget_generator.py20CODE
LOWlutris/gui/dialogs/log.py15CODE
LOWlutris/gui/dialogs/log.py16CODE
LOWlutris/gui/dialogs/__init__.py23CODE
LOWlutris/gui/dialogs/__init__.py24CODE
LOWlutris/gui/dialogs/cloud_sync_progress.py19CODE
LOWlutris/gui/dialogs/delegates.py15CODE
LOWlutris/gui/dialogs/delegates.py17CODE
LOWlutris/gui/dialogs/webconnect_dialog.py10CODE
LOWlutris/gui/views/store.py7CODE
LOWlutris/gui/views/store.py8CODE
LOWlutris/gui/widgets/download_collection_progress_box.py16CODE
LOWlutris/gui/widgets/game_bar.py15CODE
LOWlutris/gui/widgets/game_bar.py16CODE
LOWlutris/gui/widgets/utils.py17CODE
LOWlutris/gui/widgets/utils.py18CODE
LOWlutris/runners/runner.py3CODE
LOWlutris/runners/wine.py25CODE
LOWlutris/runners/wine.py25CODE
LOWlutris/runners/wine.py25CODE
LOWlutris/runners/wine.py25CODE
LOWlutris/runners/wine.py25CODE
LOWlutris/runners/wine.py73CODE
LOWlutris/runners/wine.py74CODE
LOWlutris/runners/__init__.py49CODE
LOWlutris/runners/mame.py3CODE
LOWlutris/runners/dosbox.py10CODE
LOWlutris/runners/dosbox.py10CODE
LOWlutris/services/zoom.py25CODE
LOWlutris/services/gog.py30CODE
LOWlutris/services/__init__.py32CODE
LOWlutris/services/service_media.py15CODE
2 more matches not shown…
Modern Structural Boilerplate47 hits · 49 pts
SeverityFileLineSnippetContext
LOWlutris/config.py194 def update_cascaded_config(self) -> None:CODE
LOWlutris/config.py241 def update_raw_config(self) -> None:CODE
LOWlutris/game.py198 def update_game_categories(self, added_category_names: list[str], removed_category_names: list[str]) -> None:CODE
LOWlutris/game.py378 def set_desktop_compositing(self, enable: bool) -> None:CODE
LOWlutris/game.py494 def set_platform_from_runner(self) -> None:CODE
LOWlutris/runtime.py284 def set_updated_at(self) -> None:CODE
LOWlutris/monitored_command.py138 def set_log_buffer(self, log_buffer: "Gtk.TextBuffer | None") -> None:CODE
LOWlutris/style_manager.py145 def _update_is_dark(self) -> None:CODE
LOWlutris/util/path_cache.py135 def update_all_missing(self) -> None:CODE
LOWlutris/util/path_cache.py143 def update_one_missing(self, game_id: str, path: str | None = None) -> None:CODE
LOWlutris/util/system.py677def update_desktop_icons() -> None:CODE
LOWlutris/util/system.py752def set_keyboard_layout(layout: str) -> None:CODE
LOWlutris/util/log.py40logger = logging.getLogger(__name__)CODE
LOWlutris/util/download_cache.py61def update_cache_lock(file_path: str, state: CacheState) -> None:CODE
LOWlutris/util/display.py104 def set_resolution(resolution: str | Iterable[Output]) -> None:CODE
LOWlutris/util/display.py377 def set_dbus_iface(self, name: str, path: str, interface: str, bus_type: Gio.BusType = Gio.BusType.SESSION) -> None:CODE
LOWlutris/util/discord/__init__.py3__all__ = ["client"]CODE
LOWlutris/util/steam/shortcut.py207def set_artwork(game: "Game") -> None:CODE
LOWlutris/util/wine/extract_icon.py198__all__ = ["IconExtractor", "IconExtractorError", "InvalidIconDefinitionError", "NoIconsAvailableError"]CODE
LOWlutris/util/wine/wine.py87def set_drive_path(prefix: str, letter: str, path: str) -> None:CODE
LOWlutris/util/wine/proton.py238def update_proton_env(wine_path: str, env: dict[str, str], game_id: str = DEFAULT_GAMEID, umu_log: str = "") -> None:CODE
LOWlutris/util/graphics/xrandr.py239 def set_resolution(resolution: str | Iterable[Output]) -> None:CODE
LOWlutris/util/graphics/displayconfig.py655 def set_resolution(self, resolution: str | list[DisplayConfig]) -> None:CODE
LOWlutris/gui/lutriswindow.py600 def update_missing_games_sidebar_row(self) -> None:CODE
LOWlutris/gui/lutriswindow.py825 def update_store(self) -> None:CODE
LOWlutris/gui/addgameswindow.py251 def update_search_results(self) -> None:CODE
LOWlutris/gui/application.py1122 def set_tray_icon(self) -> None:STRING
LOWlutris/gui/config/boxes.py280 def update_option_container(self, option, container: Gtk.Container, wrapper: Gtk.Container) -> None:CODE
LOW⚡lutris/gui/config/game_common.py104 def set_header_bar_widgets_visibility(self, value: bool) -> None:CODE
LOW⚡lutris/gui/config/game_common.py108 def update_advanced_switch_visibility(self, current_page_index: int) -> None:CODE
LOW⚡lutris/gui/config/game_common.py114 def update_search_entry_visibility(self, current_page_index: int) -> None:CODE
LOW⚡lutris/gui/config/game_common.py283 def _set_advanced_options_visible(self, value: bool) -> None:CODE
LOW⚡lutris/gui/config/game_common.py293 def _set_filter(self, value: str) -> None:CODE
LOWlutris/gui/config/widget_generator.py284 def update_widgets(self) -> None:CODE
LOWlutris/gui/dialogs/uninstall_dialog.py76 def update_deletability(self) -> None:CODE
LOWlutris/gui/dialogs/uninstall_dialog.py102 def update_folder_sizes(self, new_games: list[Game]) -> None:CODE
LOWlutris/gui/dialogs/uninstall_dialog.py123 def update_subtitle(self) -> None:CODE
LOWlutris/gui/dialogs/uninstall_dialog.py153 def update_message(self) -> None:CODE
LOWlutris/gui/dialogs/uninstall_dialog.py195 def update_all_checkboxes(self) -> None:CODE
LOW⚡lutris/gui/dialogs/uninstall_dialog.py231 def update_uninstall_button(self) -> None:CODE
LOWlutris/gui/widgets/progress_box.py95 def update_progress(self) -> None:CODE
LOWlutris/gui/widgets/progress_box.py116 def _set_label(self, markup: str) -> None:CODE
LOWlutris/gui/widgets/utils.py68def set_cursor_by_name(widget: Gtk.Widget, name: str | None) -> None:CODE
LOWlutris/gui/widgets/gi_composites.py38__all__ = ["GtkTemplate"]CODE
LOWlutris/runners/__init__.py3__all__ = [CODE
LOWlutris/installer/interpreter.py430 def _update_cache_locks_state(self, state_name: str) -> None:CODE
LOWlutris/services/gog_cloud.py780 def set_sync_timestamp(self, game_id: str, location_name: str, timestamp: float) -> None:CODE
Cross-File Repetition9 hits · 45 pts
SeverityFileLineSnippetContext
HIGHlutris/runners/runner.py0return the working directory to use when running the game.STRING
HIGHlutris/runners/wine.py0return the working directory to use when running the game.STRING
HIGHlutris/runners/dosbox.py0return the working directory to use when running the game.STRING
HIGHlutris/runners/linux.py0return the working directory to use when running the game.STRING
HIGHlutris/runners/steam.py0return the working directory to use when running the game.STRING
HIGHlutris/services/zoom.py0return whether the user is authenticated and if the service is availableSTRING
HIGHlutris/services/gog.py0return whether the user is authenticated and if the service is availableSTRING
HIGHlutris/services/dlsite.py0return whether the user is authenticated and if the service is availableSTRING
HIGHlutris/services/amazon.py0return whether the user is authenticated and if the service is availableSTRING
Docstring Block Structure6 hits · 30 pts
SeverityFileLineSnippetContext
HIGHlutris/util/gogdl.py177Run a gogdl command as a subprocess. Args: command: "download", "update", "repair", or "info" game_STRING
HIGHlutris/util/wine/fsync.py201Invoke the Linux futex() syscall with the provided arguments. Args: See the description of the futeSTRING
HIGHlutris/util/wine/fsync.py356Invoke the Linux futex_waitv() syscall with the provided arguments. Args: See the descriptiSTRING
HIGHlutris/services/gog_cloud.py155Make an authenticated request to the cloud storage API. Args: method: HTTP method (GET, PUT, DELETESTRING
HIGHlutris/services/gog_cloud.py440Get the game-specific clientId and clientSecret from the build manifest. GOG cloud storage requires game-scoped creSTRING
HIGHlutris/services/gog_cloud.py497Exchange a GOG refresh token for a game-scoped access token. The cloud storage API requires a token scoped to the gSTRING
Verbosity Indicators16 hits · 29 pts
SeverityFileLineSnippetContext
LOWlutris/util/gog_downloader.py230 # Step 1: Resolve URL (follow redirects) and check capabilitiesCOMMENT
LOWlutris/util/gog_downloader.py246 # Step 2: Check for resumable progressCOMMENT
LOWlutris/util/gog_downloader.py277 # Step 3: Compute ranges (fresh or from progress)COMMENT
LOWlutris/util/gog_downloader.py306 # Step 4: Download chunks in parallel with pipelined writesCOMMENT
LOW⚡lutris/services/gog_cloud.py457 # Step 1: Get builds listCOMMENT
LOW⚡lutris/services/gog_cloud.py466 # Step 2: Get the build manifestCOMMENT
LOW⚡lutris/services/gog_cloud.py824 # Step 1: Get GOG tokenCOMMENT
LOW⚡lutris/services/gog_cloud.py832 # Step 2: Get game-scoped credentialsCOMMENT
LOW⚡lutris/services/gog_cloud.py840 # Step 3: Get game-scoped access tokenCOMMENT
LOW⚡lutris/services/gog_cloud.py856 # Step 4: Create cloud storage clientCOMMENT
LOW⚡lutris/services/gog_cloud.py859 # Step 5: Scan local filesCOMMENT
LOW⚡lutris/services/gog_cloud.py873 # Step 6: Get cloud filesCOMMENT
LOW⚡lutris/services/gog_cloud.py882 # Step 7: Handle trivial casesCOMMENT
LOW⚡lutris/services/gog_cloud.py909 # Step 8: Classify sync directionCOMMENT
LOW⚡lutris/services/gog_cloud.py914 # Step 9: Handle preferred action overridesCOMMENT
LOWlutris/services/gog_cloud.py933 # Step 10: Execute syncCOMMENT
Structural Annotation Overuse16 hits · 28 pts
SeverityFileLineSnippetContext
LOWlutris/util/gog_downloader.py230 # Step 1: Resolve URL (follow redirects) and check capabilitiesCOMMENT
LOWlutris/util/gog_downloader.py246 # Step 2: Check for resumable progressCOMMENT
LOWlutris/util/gog_downloader.py277 # Step 3: Compute ranges (fresh or from progress)COMMENT
LOWlutris/util/gog_downloader.py306 # Step 4: Download chunks in parallel with pipelined writesCOMMENT
LOW⚡lutris/services/gog_cloud.py457 # Step 1: Get builds listCOMMENT
LOW⚡lutris/services/gog_cloud.py466 # Step 2: Get the build manifestCOMMENT
LOW⚡lutris/services/gog_cloud.py824 # Step 1: Get GOG tokenCOMMENT
LOW⚡lutris/services/gog_cloud.py832 # Step 2: Get game-scoped credentialsCOMMENT
LOW⚡lutris/services/gog_cloud.py840 # Step 3: Get game-scoped access tokenCOMMENT
LOW⚡lutris/services/gog_cloud.py856 # Step 4: Create cloud storage clientCOMMENT
LOW⚡lutris/services/gog_cloud.py859 # Step 5: Scan local filesCOMMENT
LOW⚡lutris/services/gog_cloud.py873 # Step 6: Get cloud filesCOMMENT
LOW⚡lutris/services/gog_cloud.py882 # Step 7: Handle trivial casesCOMMENT
LOW⚡lutris/services/gog_cloud.py909 # Step 8: Classify sync directionCOMMENT
LOW⚡lutris/services/gog_cloud.py914 # Step 9: Handle preferred action overridesCOMMENT
LOWlutris/services/gog_cloud.py933 # Step 10: Execute syncCOMMENT
Over-Commented Block22 hits · 22 pts
SeverityFileLineSnippetContext
LOWlutris/util/amazon/protobuf_decoder.py1import structCOMMENT
LOWlutris/util/wine/prefix.py381 #COMMENT
LOWlutris/util/battlenet/__init__.py1# Code in this package from the GOG Galaxy integration for Battle.netCOMMENT
LOWlutris/gui/application.py1# pylint: disable=wrong-import-positionCOMMENT
LOWlutris/runners/steam.py21COMMENT
LOWutils/appimage/build-in-container.sh21ln -sf "python${PY_VER}" "$APPDIR/usr/bin/python3"COMMENT
LOWutils/appimage/build-in-container.sh41# for modules in dist-packages, not site-packages. Installing here meansCOMMENT
LOWutils/appimage/build-in-container.sh141# linuxdeploy-plugin-gtk copies libgio itself but not the GIO modules thatCOMMENT
LOWutils/appimage/build-in-container.sh181fiCOMMENT
LOWutils/appimage/build.sh1#!/usr/bin/env bashCOMMENT
LOWutils/appimage/linuxdeploy-plugin-gtk.sh1#! /usr/bin/env bashCOMMENT
LOW.github/workflows/publish-ppa.yml1# This is a reusable workflow that should not be called directly, butCOMMENT
LOW.github/workflows/publish-lutris-ppa.yml1# Handles publishing Lutris builds to the Lutris Ubuntu PPAs. ThisCOMMENT
LOW.github/scripts/build-ubuntu-22.04.sh1#!/bin/bashCOMMENT
LOW.github/scripts/build-ubuntu-24.04.sh1#!/bin/bashCOMMENT
LOW.github/scripts/build-ubuntu-generic.sh1#!/bin/bashCOMMENT
LOW.github/scripts/build-ubuntu-generic.sh21#COMMENT
LOW.github/scripts/build-ubuntu.sh1#!/bin/bash -eCOMMENT
LOW.github/scripts/build-ubuntu.sh21# The following environment variables are optional and will overrideCOMMENT
LOW.github/scripts/build-ubuntu.sh41# The PPA release version which follows the same guide as mentionedCOMMENT
LOW.github/scripts/build-ubuntu.sh101# ex. 0.5.12-0ubuntu1 (for just the package version)COMMENT
LOW.github/scripts/install-ubuntu.sh1#!/bin/bash -eCOMMENT
Self-Referential Comments11 hits · 21 pts
SeverityFileLineSnippetContext
MEDIUMlutris/search_predicate.py15 """This class is a filter function that also includes formatting and other functionality soSTRING
MEDIUMlutris/exception_backstops.py100 """This function is called once only, during startup, and replaces ("swizzles") a bunch ofSTRING
MEDIUMlutris/util/path_cache.py108 """This class is a singleton that holds a set of game-ids for games whose directoriesSTRING
MEDIUMlutris/util/display.py460 # Creating a proxy succeeds even when no service owns the name, soCOMMENT
MEDIUMlutris/util/jobs.py88 """This class provides a safe interface for cancelling idle tasks and timeouts;STRING
MEDIUMlutris/util/discord/client.py20 # Create a new Presence object with the desired app idCOMMENT
MEDIUMlutris/gui/download_queue.py20 """This class is a widget that displays a stack of progress boxes, which you can createSTRING
MEDIUMlutris/gui/widgets/sidebar.py547 # Create the basic rows that are not data dependantCOMMENT
MEDIUMlutris/gui/widgets/sidebar.py613 # Create the dynamic rows that are initially neededCOMMENT
MEDIUMlutris/gui/widgets/scaled_image.py14 """This class provides a rather basic feature the GtkImage doesn't offer - the abilitySTRING
MEDIUMtests/util/_test_pipelining.py196 # Create a mock response that simulates a stall then successCOMMENT
Redundant / Tautological Comments10 hits · 16 pts
SeverityFileLineSnippetContext
LOWlutris/util/system.py111 # Check if the executable existsCOMMENT
LOWlutris/util/system.py181 # Check if the executable existsCOMMENT
LOWlutris/gui/addgameswindow.py643 # Check if it's a media file reference (e.g., "media:playtron")COMMENT
LOWlutris/gui/dialogs/runner_install.py236 # Check if there are apps installed, if so, show the view apps buttonCOMMENT
LOWlutris/runners/runner.py322 # Set monitor to use for SDL 1 gamesCOMMENT
LOW⚡lutris/runners/wine.py1438 # Set this to 1 to enable access to more RAM for 32-bit applicationsCOMMENT
LOWlutris/installer/commands.py1023 # Check if any extracted .exe is an installerCOMMENT
LOWlutris/services/flathub.py103 # Check if Flathub repo is active on the systemCOMMENT
LOWlutris/services/base.py317 # Check if the game is not already installedCOMMENT
LOWtests/util/_test_download_cache.py201 # Set updated_at to 8 days agoCOMMENT
AI Slop Vocabulary4 hits · 8 pts
SeverityFileLineSnippetContext
LOWlutris/util/magic.py100 # so rather than fail hard just use default behaviorCOMMENT
LOWlutris/util/system.py553 # If a path isn't provided, or it exists as is, or is a relative path, just return it.COMMENT
LOWlutris/util/ubisoft/parser.py82 # just return 0s, this way it will be handled later in the codeCOMMENT
MEDIUMlutris/installer/installer.py270 # Commit changes only at the end; this is more robust in this method is runnerCOMMENT
AI Structural Patterns5 hits · 5 pts
SeverityFileLineSnippetContext
LOWlutris/monitored_command.py53CODE
LOWlutris/util/wine/cabinstall.py71CODE
LOWlutris/gui/widgets/common.py50CODE
LOWlutris/runners/commands/wine.py344CODE
LOWlutris/runners/commands/wine.py529CODE
Modern AI Meta-Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMlutris/installer/commands.py303 # Useful when the source is throwaway scaffolding (e.g. theCOMMENT
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWutils/appimage/build.sh8# Usage:COMMENT