Repository Analysis

lutris/lutris

Lutris desktop client

19.2 Moderate AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of lutris/lutris, a Python project with 10,085 GitHub stars. SynthScan v2.0 examined 76,264 lines of code across 372 source files, recording 1127 pattern matches distributed across 17 syntactic categories. The overall adjusted score of 19.2 places this repository in the Moderate AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

19.2
Adjusted Score
19.2
Raw Score
100%
Time Factor
2026-07-12
Last Push
10.1K
Stars
Python
Language
76.3K
Lines of Code
372
Files
1.1K
Pattern Hits
2026-07-14
Scan Date
0.04
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

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

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 0HIGH 14MEDIUM 98LOW 1015

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 1127 distinct pattern matches across 17 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Hyper-Verbose Identifiers610 hits · 639 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
LOWlutris/api.py46def get_runtime_versions_date() -> float:CODE
LOWlutris/api.py50def get_runtime_versions_date_time_ago() -> str:CODE
LOWlutris/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.py237def parse_version_architecture(version_name: str) -> tuple[str, str | None]:CODE
LOWlutris/api.py248def get_runner_version_from_cache(runner_name: str, version: str | None) -> RunnerVersionDict | None:CODE
LOWlutris/api.py266def iter_get_from_api_candidates(CODE
LOWlutris/api.py299def get_runner_version_from_api(runner_name: str, version: str | None) -> RunnerVersionDict | None:CODE
LOWlutris/api.py311def get_default_runner_version_info(runner_name: str, version: str | None = None) -> RunnerVersionDict | None:CODE
LOWlutris/api.py354def 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.py81def get_lutris_directory_settings(directory: str) -> dict[str, str]:CODE
LOWlutris/settings.py99def 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.py377 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.py232 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.py265 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.py15def find_linux_game_executable(path, make_executable=False):CODE
LOWlutris/util/game_finder.py78def find_windows_game_executable(path):CODE
LOWlutris/util/library_sync.py225 def delete_from_remote_library(self, games):CODE
LOWlutris/util/gog_downloader.py118 def _discard_persistent_state(self) -> None:CODE
LOWlutris/util/gog_downloader.py454 def _write_from_full_response(self, response: requests.Response, start: int, end: int) -> None:CODE
LOWlutris/util/steam/config.py170 def get_entry_case_insensitive(config_dict: dict[str, Any], path: list[str]) -> Any:CODE
LOWlutris/util/steam/config.py196 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
550 more matches not shown…
Decorative Section Separators71 hits · 267 pts
SeverityFileLineSnippetContext
MEDIUMlutris/util/download_progress.py47 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/util/download_progress.py49 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/util/download_progress.py109 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/util/download_progress.py111 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/util/download_progress.py131 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/util/download_progress.py133 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/util/download_progress.py186 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/util/download_progress.py188 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/util/download_progress.py204 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/util/download_progress.py206 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/util/downloader.py241 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/util/downloader.py243 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py147 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py149 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py156 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py158 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py287 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py289 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py297 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py299 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py122 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py124 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py176 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py178 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py251 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py253 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py273 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py275 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py383 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py385 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py414 # ------------------------------------------------------------------COMMENT
MEDIUMlutris/gui/widgets/download_collection_progress_box.py416 # ------------------------------------------------------------------COMMENT
MEDIUMtests/_test_cloud_sync_progress.py19# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/_test_cloud_sync_progress.py21# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/_test_cloud_sync_progress.py40# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/_test_cloud_sync_progress.py42# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/util/_test_collection_progress.py199# ── Tests: Initialisation ───────────────────────────────────────────COMMENT
MEDIUMtests/util/_test_collection_progress.py217# ── Tests: _create_downloader ───────────────────────────────────────COMMENT
MEDIUMtests/util/_test_collection_progress.py318# ── Tests: Aggregate progress ────────────────────────────────────────COMMENT
MEDIUMtests/util/_test_collection_progress.py378# ── Tests: Start / prefetch ──────────────────────────────────────────COMMENT
MEDIUMtests/util/_test_collection_progress.py20# ── Load the target module in isolation ──────────────────────────────COMMENT
MEDIUMtests/util/_test_collection_progress.py109# ── Helpers ──────────────────────────────────────────────────────────COMMENT
MEDIUMtests/util/_test_collection_progress.py159# ── Fixture ──────────────────────────────────────────────────────────COMMENT
MEDIUMtests/util/_test_collection_progress.py181# ── Tests: _ActiveDownload ───────────────────────────────────────────COMMENT
MEDIUMtests/util/_test_collection_progress.py276# ── Tests: _pop_next_downloadable_file ───────────────────────────────COMMENT
MEDIUMtests/util/_test_collection_progress.py341# ── Tests: File labels ───────────────────────────────────────────────COMMENT
MEDIUMtests/util/_test_collection_progress.py456# ── Tests: Progress callback ─────────────────────────────────────────COMMENT
MEDIUMtests/util/_test_collection_progress.py591# ── Tests: Cancel ────────────────────────────────────────────────────COMMENT
MEDIUMtests/util/_test_collection_progress.py629# ── Tests: Edge cases ────────────────────────────────────────────────COMMENT
MEDIUMtests/util/_test_gog_downloader.py594# ==================================================================COMMENT
MEDIUMtests/util/_test_gog_downloader.py596# ==================================================================COMMENT
MEDIUMtests/util/_test_download_progress.py24# ------------------------------------------------------------------COMMENT
MEDIUMtests/util/_test_download_progress.py26# ------------------------------------------------------------------COMMENT
MEDIUMtests/util/_test_download_progress.py44# ------------------------------------------------------------------COMMENT
MEDIUMtests/util/_test_download_progress.py46# ------------------------------------------------------------------COMMENT
MEDIUMtests/util/_test_download_progress.py77# ------------------------------------------------------------------COMMENT
MEDIUMtests/util/_test_download_progress.py79# ------------------------------------------------------------------COMMENT
MEDIUMtests/util/_test_download_progress.py118# ------------------------------------------------------------------COMMENT
MEDIUMtests/util/_test_download_progress.py120# ------------------------------------------------------------------COMMENT
MEDIUMtests/util/_test_download_progress.py151# ------------------------------------------------------------------COMMENT
11 more matches not shown…
Excessive Try-Catch Wrapping112 hits · 127 pts
SeverityFileLineSnippetContext
LOWlutris/startup.py91 except Exception:CODE
LOWlutris/config.py276 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.py471 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.py94 except Exception as ex:CODE
LOWlutris/settings.py123 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.py437 except Exception as ex:CODE
LOWlutris/util/gogdl.py102 except Exception:CODE
LOWlutris/util/download_progress.py222 except Exception:CODE
LOWlutris/util/downloader.py412 except Exception as ex:CODE
LOWlutris/util/display.py126 except Exception as ex: # pylint: disable=broad-exceptCODE
LOWlutris/util/display.py394 except Exception as ex:CODE
LOWlutris/util/display.py421 except Exception as ex:CODE
LOWlutris/util/jobs.py78 except Exception as ex: # pylint: disable=broad-exceptCODE
LOWlutris/util/portals.py92 except Exception as ex:CODE
LOWlutris/util/portals.py120 except Exception as ex:CODE
MEDIUMlutris/util/portals.py41def _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.py187 except Exception as ex:CODE
LOWlutris/util/gog_downloader.py305 except Exception as ex:CODE
LOWlutris/util/gog_downloader.py325 except Exception as ex:CODE
LOWlutris/util/gog_downloader.py369 except Exception:CODE
LOWlutris/util/gog_downloader.py436 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
LOWlutris/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
LOWlutris/util/ubisoft/helpers.py60 except Exception as e:CODE
LOWlutris/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.py829 except Exception as err:CODE
LOWlutris/gui/installerwindow.py877 except Exception as err:CODE
MEDIUMlutris/gui/installerwindow.py825def on_continue(_button):CODE
MEDIUMlutris/gui/installerwindow.py873def wrapped_callback(*args, **kwargs):CODE
52 more matches not shown…
Deep Nesting123 hits · 120 pts
SeverityFileLineSnippetContext
LOWlutris/startup.py52CODE
LOWlutris/startup.py74CODE
LOWlutris/config.py265CODE
LOWlutris/runtime.py200CODE
LOWlutris/runtime.py219CODE
LOWlutris/api.py118CODE
LOWlutris/exception_backstops.py52CODE
LOWlutris/game_actions.py95CODE
LOWlutris/settings.py81CODE
LOWlutris/search.py66CODE
LOWlutris/search.py301CODE
LOWlutris/monitored_command.py141CODE
LOWlutris/database/games.py48CODE
LOWlutris/util/cookies.py12CODE
LOWlutris/util/system.py527CODE
LOWlutris/util/savesync.py250CODE
LOWlutris/util/downloader.py368CODE
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.py15CODE
LOWlutris/util/game_finder.py78CODE
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.py152CODE
LOWlutris/util/gog_downloader.py192CODE
LOWlutris/util/gog_downloader.py372CODE
LOWlutris/util/steam/config.py230CODE
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.py165CODE
LOWlutris/util/ubisoft/client.py68CODE
LOWlutris/util/ubisoft/client.py208CODE
LOWlutris/util/ubisoft/parser.py127CODE
LOWlutris/util/ubisoft/parser.py156CODE
63 more matches not shown…
Unused Imports61 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.py39CODE
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.py18CODE
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/dosbox.py10CODE
LOWlutris/runners/dosbox.py10CODE
LOWlutris/services/zoom.py25CODE
LOWlutris/services/gog.py30CODE
LOWlutris/services/__init__.py31CODE
LOWlutris/services/service_media.py15CODE
LOWlutris/services/gog_cloud_hooks.py28CODE
1 more matches not shown…
Modern Structural Boilerplate46 hits · 48 pts
SeverityFileLineSnippetContext
LOWlutris/config.py171 def update_cascaded_config(self) -> None:CODE
LOWlutris/config.py216 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.py126 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.py115 def update_all_missing(self) -> None:CODE
LOWlutris/util/path_cache.py123 def update_one_missing(self, game_id: str, path: str | None = None) -> None:CODE
LOWlutris/util/system.py655def update_desktop_icons() -> None:CODE
LOWlutris/util/system.py730def 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.py100 def set_resolution(resolution: str | Iterable[Output]) -> None:CODE
LOWlutris/util/display.py373 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.py202def 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.py589 def update_missing_games_sidebar_row(self) -> None:CODE
LOWlutris/gui/lutriswindow.py815 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
LOWlutris/gui/config/game_common.py104 def set_header_bar_widgets_visibility(self, value: bool) -> None:CODE
LOWlutris/gui/config/game_common.py108 def update_advanced_switch_visibility(self, current_page_index: int) -> None:CODE
LOWlutris/gui/config/game_common.py114 def update_search_entry_visibility(self, current_page_index: int) -> None:CODE
LOWlutris/gui/config/game_common.py283 def _set_advanced_options_visible(self, value: bool) -> None:CODE
LOWlutris/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
LOWlutris/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/gi_composites.py38__all__ = ["GtkTemplate"]CODE
LOWlutris/runners/__init__.py3__all__ = [CODE
LOWlutris/installer/interpreter.py414 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 Repetition8 hits · 40 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/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.py209 # Step 1: Resolve URL (follow redirects) and check capabilitiesCOMMENT
LOWlutris/util/gog_downloader.py225 # Step 2: Check for resumable progressCOMMENT
LOWlutris/util/gog_downloader.py256 # Step 3: Compute ranges (fresh or from progress)COMMENT
LOWlutris/util/gog_downloader.py285 # Step 4: Download chunks in parallel with pipelined writesCOMMENT
LOWlutris/services/gog_cloud.py457 # Step 1: Get builds listCOMMENT
LOWlutris/services/gog_cloud.py466 # Step 2: Get the build manifestCOMMENT
LOWlutris/services/gog_cloud.py824 # Step 1: Get GOG tokenCOMMENT
LOWlutris/services/gog_cloud.py832 # Step 2: Get game-scoped credentialsCOMMENT
LOWlutris/services/gog_cloud.py840 # Step 3: Get game-scoped access tokenCOMMENT
LOWlutris/services/gog_cloud.py856 # Step 4: Create cloud storage clientCOMMENT
LOWlutris/services/gog_cloud.py859 # Step 5: Scan local filesCOMMENT
LOWlutris/services/gog_cloud.py873 # Step 6: Get cloud filesCOMMENT
LOWlutris/services/gog_cloud.py882 # Step 7: Handle trivial casesCOMMENT
LOWlutris/services/gog_cloud.py909 # Step 8: Classify sync directionCOMMENT
LOWlutris/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.py209 # Step 1: Resolve URL (follow redirects) and check capabilitiesCOMMENT
LOWlutris/util/gog_downloader.py225 # Step 2: Check for resumable progressCOMMENT
LOWlutris/util/gog_downloader.py256 # Step 3: Compute ranges (fresh or from progress)COMMENT
LOWlutris/util/gog_downloader.py285 # Step 4: Download chunks in parallel with pipelined writesCOMMENT
LOWlutris/services/gog_cloud.py457 # Step 1: Get builds listCOMMENT
LOWlutris/services/gog_cloud.py466 # Step 2: Get the build manifestCOMMENT
LOWlutris/services/gog_cloud.py824 # Step 1: Get GOG tokenCOMMENT
LOWlutris/services/gog_cloud.py832 # Step 2: Get game-scoped credentialsCOMMENT
LOWlutris/services/gog_cloud.py840 # Step 3: Get game-scoped access tokenCOMMENT
LOWlutris/services/gog_cloud.py856 # Step 4: Create cloud storage clientCOMMENT
LOWlutris/services/gog_cloud.py859 # Step 5: Scan local filesCOMMENT
LOWlutris/services/gog_cloud.py873 # Step 6: Get cloud filesCOMMENT
LOWlutris/services/gog_cloud.py882 # Step 7: Handle trivial casesCOMMENT
LOWlutris/services/gog_cloud.py909 # Step 8: Classify sync directionCOMMENT
LOWlutris/services/gog_cloud.py914 # Step 9: Handle preferred action overridesCOMMENT
LOWlutris/services/gog_cloud.py933 # Step 10: Execute syncCOMMENT
Over-Commented Block24 hits · 24 pts
SeverityFileLineSnippetContext
LOWlutris/monitored_command.py141 def get_environment(user_env: dict[str, str] | None) -> dict[str, str]:COMMENT
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
LOWtests/util/_test_collection_progress.py21#COMMENT
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.py88 """This class is a singleton that holds a set of game-ids for games whose directoriesSTRING
MEDIUMlutris/util/jobs.py88 """This class provides a safe interface for cancelling idle tasks and timeouts;STRING
MEDIUMlutris/util/gog_downloader.py74 # Create a dedicated session with connection pooling sized for our workersCOMMENT
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.py551 # Create the basic rows that are not data dependantCOMMENT
MEDIUMlutris/gui/widgets/sidebar.py617 # 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.py172 # Create a mock response that simulates a stall then successCOMMENT
Redundant / Tautological Comments11 hits · 17 pts
SeverityFileLineSnippetContext
LOWlutris/util/system.py99 # Check if the executable existsCOMMENT
LOWlutris/util/system.py159 # 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
LOWlutris/runners/wine.py1438 # Set this to 1 to enable access to more RAM for 32-bit applicationsCOMMENT
LOWlutris/runners/commands/wine.py233 # Check if umu crashed before prefix was createdCOMMENT
LOWlutris/installer/commands.py1021 # 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.py184 # Set updated_at to 8 days agoCOMMENT
AI Slop Vocabulary5 hits · 9 pts
SeverityFileLineSnippetContext
LOWlutris/util/magic.py100 # so rather than fail hard just use default behaviorCOMMENT
LOWlutris/util/system.py531 # If a path isn't provided, or it exists as is, or is a relative path, just return it.COMMENT
LOWlutris/util/downloader.py319 # Until we get the first sample, just return our defaultCOMMENT
LOWlutris/util/ubisoft/parser.py82 # just return 0s, this way it will be handled later in the codeCOMMENT
MEDIUMlutris/installer/installer.py240 # 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.py313CODE
LOWlutris/runners/commands/wine.py480CODE
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