AI Slop Code RIsk Monitor

metabrainz/picard

Picard is a cross-platform music tagger powered by the MusicBrainz database

24.4 Elevated pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for metabrainz/picard, a Python project with 5,288 GitHub stars. SynthScan examined 268,194 lines of code across 916 source files, recording 5328 pattern matches distributed across 23 syntactic categories. The legacy adjusted pattern signal is 24.4 (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.

24.4
Adjusted Signal
24.4
Raw Pattern Score
100%
Time Factor
2026-10-11
Last Push
5.3K
Stars
Python
Language
268.2K
Lines of Code
916
Files
5.3K
Pattern Hits
2026-10-12
Scan Date
0.18
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 60.1/100 · HIGH

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

Hallucinated Dependency & Supply Chain Risk 6.9/100 · LOW

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

Agent Over-Engineering Ratio 58.3/100 · HIGH

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

PR Review Velocity Impact 70.6/100 · HIGH

Which changes need focused human review? 5328 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 166MEDIUM 199LOW 4962

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 5328 distinct pattern matches across 23 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 Identifiers3348 hits · 3466 pts
SeverityFileLineSnippetContext
LOWsetup.py213def py_from_ui_with_defaultdir(uifile):CODE
LOWpicard/options.py105def make_default_toolbar_layout():CODE
LOW⚡picard/config_upgrade_hooks.py431def convert_preserved_tags_to_list(config):CODE
LOW⚡picard/config_upgrade_hooks.py441def rename_whitelist_ca_provider(settings):CODE
LOW⚡picard/config_upgrade_hooks.py451def reset_main_splitter_states(config):CODE
LOW⚡picard/config_upgrade_hooks.py647def reset_options_dialog_splitters(config):CODE
LOW⚡picard/config_upgrade_hooks.py653def rename_toolbar_multiselect(settings):CODE
LOW⚡picard/config_upgrade_hooks.py659def reset_locked_header_states(config):CODE
LOW⚡picard/config_upgrade_hooks.py668def sanitize_replace_dir_separator(settings):CODE
LOWpicard/config_upgrade_hooks.py146 def remove_va_file_naming_format(merge=True):CODE
LOWpicard/config_upgrade_hooks.py220def rename_windows_compatible_filenames(settings):CODE
LOWpicard/config_upgrade_hooks.py226def convert_preserved_tags_separator(config):CODE
LOWpicard/config_upgrade_hooks.py254def convert_release_type_scores(config):CODE
LOWpicard/config_upgrade_hooks.py290def convert_ca_providers_to_tuples(config):CODE
LOWpicard/config_upgrade_hooks.py333def convert_tagger_scripts_to_list(config):CODE
LOWpicard/config_upgrade_hooks.py359def rename_save_only_front_images_to_tags(settings):CODE
LOWpicard/config_upgrade_hooks.py400def convert_ignore_genres_to_filter(config):CODE
LOWpicard/config_upgrade_hooks.py482def restructure_splitter_persist(config):CODE
LOWpicard/config_upgrade_hooks.py485 def upgrade_persisted_splitter(new_persist_key, key_map):CODE
LOWpicard/config_upgrade_hooks.py525def convert_naming_scripts_to_dict(config):CODE
LOWpicard/config_upgrade_hooks.py558def convert_script_exception_to_list(config):CODE
LOWpicard/config_upgrade_hooks.py572def convert_script_exceptions_with_weighting(config):CODE
LOWpicard/config_upgrade_hooks.py587def remove_acousticbrainz_from_toolbar(settings):CODE
LOWpicard/config_upgrade_hooks.py601def add_preset_naming_scripts(config):CODE
LOWpicard/config_upgrade_hooks.py681def copy_standardize_instruments_to_vocals(settings):CODE
LOWpicard/config_upgrade_hooks.py689def change_theme_system_to_default(settings):CODE
LOWpicard/config_upgrade_hooks.py707def remove_old_plugin_options(config):CODE
LOWpicard/config_upgrade_hooks.py719def lowercase_cover_art_formats(settings):CODE
LOWpicard/config_upgrade_hooks.py730def fix_matchedtracks_in_scripts(settings):CODE
LOWpicard/config_upgrade_hooks.py751def remove_persisted_column_config(config):CODE
LOWpicard/config_upgrade_hooks.py764def remove_similarity_thresholds(settings):CODE
LOWpicard/config_upgrade_hooks.py776def rename_selected_file_naming_script_id(settings):CODE
LOWpicard/config_upgrade_hooks.py796def convert_standardize_artists(settings):CODE
LOWpicard/config_upgrade_hooks.py816def convert_release_type_scores_to_lists(settings):CODE
LOWpicard/config_upgrade_hooks.py854def clamp_browser_integration_port(settings):CODE
LOWpicard/config_upgrade_hooks.py862def upgrade_scripts_lyrics_comments(settings):CODE
LOWpicard/releasegroup.py71def prepare_releases_for_versions(releases):CODE
LOWpicard/config.py548 def _get_all_profile_settings(self):CODE
LOWpicard/config.py558 def _is_settings_override_active(self) -> bool:CODE
LOWpicard/config.py623 def _save_all_profile_settings(self, all_settings: dict):CODE
LOWpicard/config.py944 def _versioned_config_filename(self, version=None):CODE
LOWpicard/metadata.py618def run_album_metadata_processors(album_object: 'Album', metadata: Metadata, release_node: dict):CODE
LOWpicard/metadata.py622def run_track_metadata_processors(CODE
LOWpicard/audit.py56def list_from_prefixes_string(prefixes_string: str) -> Iterator[tuple[str, ...]]:CODE
LOWpicard/audit.py73def prefixes_candidates_for_length(CODE
LOWpicard/track.py372 def _convert_folksonomy_tags_to_genre(self):CODE
LOWpicard/track.py414 def _add_folksonomy_tags_variable(self):CODE
LOWpicard/track.py485 def _recording_request_finished(self, recording, http, error):CODE
LOWpicard/profile.py78def profile_groups_add_setting(CODE
LOWpicard/profile.py104def profile_groups_all_settings() -> set[str]:CODE
LOWpicard/profile.py108def profile_groups_update_highlights(section: str, option_name: str, highlights: Iterable[str]) -> None:CODE
LOWpicard/profile.py132def profile_groups_group_from_page(page: 'OptionsPage') -> dict | None:CODE
LOWpicard/profile.py155def profile_groups_remove_group(group: str) -> None:CODE
LOWpicard/__init__.py214 def _global_exception_handler(exctype, value, traceback):CODE
LOWpicard/album.py335 def _warn_deprecated_requests(self, operation):CODE
LOWpicard/album.py365 def iter_correctly_matched_tracks(self):CODE
LOWpicard/album.py475 def _run_album_metadata_processors(self):CODE
LOWpicard/album.py522 def _setup_release_artist_nodes(self, release_node):CODE
LOWpicard/album.py549 def _release_metadata_customization(self, metadata, release_node):CODE
LOWpicard/album.py563 def _needs_track_relationships(self, release_node):CODE
3288 more matches not shown…
Over-Commented Block730 hits · 696 pts
SeverityFileLineSnippetContext
LOWrequirements-build.txt801 # viaCOMMENT
LOWsetup.py1#!/usr/bin/env python3COMMENT
LOWsetup.py21# Copyright (C) 2019 Kurt MosiejczukCOMMENT
LOWrequirements-dev.txt1241 # picard (pyproject.toml)COMMENT
LOWpicard/options.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/options.py81COMMENT
LOWpicard/config_upgrade_hooks.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/config_upgrade_hooks.py81# @upgrade_settings('x.y.z') — for settings transforms (renames, value changes)COMMENT
LOWpicard/config_upgrade_hooks.py101# at the same version depend on each other.COMMENT
LOWpicard/config_upgrade_hooks.py121# Rename with reversed boolean:COMMENT
LOWpicard/debug_opts.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/releasegroup.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/config.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/metadata.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/metadata.py21# Copyright (C) 2024 x11xCOMMENT
LOWpicard/version.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/env.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/audit.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/similarity.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/log.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/track.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/track.py21# Copyright (C) 2020, 2022 Adam JamesCOMMENT
LOWpicard/profile.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/__init__.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/album_requests.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/album.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/album.py21# Copyright (C) 2020-2021 Gabriel FerreiraCOMMENT
LOWpicard/matching.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/matching.py21# Copyright (C) 2024 x11xCOMMENT
LOWpicard/matching.py461COMMENT
LOWpicard/mbjson.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/file.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/file.py21# Copyright (C) 2016-2018 Sambhav KothariCOMMENT
LOWpicard/tagger.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/tagger.py21# Copyright (C) 2016-2018 Sambhav KothariCOMMENT
LOWpicard/tagger.py561 original_save_thread_count = self.save_thread_pool.activeThreadCount()COMMENT
LOWpicard/cluster.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/cluster.py21# Copyright (C) 2025 Bob SwiftCOMMENT
LOWpicard/collection.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/plugin.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/plugin.py21# This program is free software; you can redistribute it and/orCOMMENT
LOWpicard/config_upgrade.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/config_upgrade.py61# See config_upgrade_hooks.pyCOMMENT
LOWpicard/isrcsubmit.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/item.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/oauth.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/ui/moveable_list_view.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/ui/enums.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/ui/enums.py21# Copyright (C) 2017 Antonio LarrosaCOMMENT
LOWpicard/ui/playground.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/ui/theme.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/ui/tutorial.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/ui/match_icons.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/ui/util.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/ui/passworddialog.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/ui/theme_detect.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/ui/__init__.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/ui/theme_detect_qtdbus.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/ui/caa_types_selector.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
LOWpicard/ui/cdlookup.py1# Picard, the next-generation MusicBrainz taggerCOMMENT
670 more matches not shown…
Empty Error Handlers113 hits · 565 pts
SeverityFileLineSnippetContext
HIGHpicard/config_upgrade_hooks.py596except ValueError:CODE
HIGHpicard/config_upgrade_hooks.py273except AttributeError:CODE
HIGHpicard/config_upgrade_hooks.py249except AttributeError:CODE
HIGHpicard/config.py426except KeyError:CODE
HIGHpicard/metadata.py345except KeyError:CODE
HIGHpicard/metadata.py387except KeyError:CODE
HIGHpicard/log.py127except RuntimeError:CODE
HIGHpicard/profile.py135except (AttributeError, KeyError):CODE
HIGHpicard/profile.py142except (AttributeError, KeyError):CODE
HIGHpicard/__init__.py156except: # noqa: E722,F722 # pylint: disable=bare-exceptCODE
HIGHpicard/__init__.py208except: # noqa: E722,F722 # pylint: disable=bare-exceptCODE
HIGHpicard/album.py573except KeyError:CODE
HIGHpicard/album.py308except (RuntimeError, ValueError, AttributeError):CODE
HIGHpicard/album.py327except RuntimeError:CODE
HIGHpicard/matching.py446except (ValueError, KeyError):CODE
HIGHpicard/matching.py459except (ValueError, KeyError):CODE
HIGHpicard/matching.py914except ValueError:CODE
HIGHpicard/matching.py929except ValueError:CODE
HIGHpicard/mbjson.py742except (KeyError, IndexError, TypeError):CODE
HIGHpicard/file.py1174except ValueError:CODE
HIGHpicard/file.py1180except (ValueError, TypeError):CODE
HIGHpicard/tagger.py218except OSError:CODE
HIGHpicard/tagger.py1871except ImportError:CODE
HIGHpicard/tagger.py1780except FileNotFoundError:CODE
HIGHpicard/ui/theme.py112except ImportError:CODE
HIGHpicard/ui/theme.py603except AttributeError:CODE
HIGHpicard/ui/collectionmenu.py145except RuntimeError:CODE
HIGHpicard/ui/options/dialog.py214except (ValueError, TypeError):CODE
HIGHpicard/ui/options/dialog.py429except AttributeError:CODE
HIGHpicard/ui/options/cdlookup.py80except ValueError:CODE
HIGHpicard/ui/options/renaming_compat.py102except TypeError:CODE
HIGHpicard/ui/options/profiles.py719except tomllib.TOMLDecodeError:CODE
HIGHpicard/ui/mainwindow/__init__.py887except ValueError:CODE
HIGHpicard/ui/itemviews/custom_columns/registry.py130except Exception:CODE
HIGHpicard/ui/itemviews/custom_columns/registry.py173except Exception:CODE
HIGHpicard/ui/itemviews/custom_columns/sorting_adapters.py288except (KeyError, TypeError):CODE
HIGHpicard/ui/itemviews/custom_columns/sorting_adapters.py307except TypeError:CODE
HIGHpicard/ui/itemviews/custom_columns/script_provider.py139except TypeError:CODE
HIGHpicard/ui/coverartbox/__init__.py400except (AttributeError, TypeError, ValueError):CODE
HIGHpicard/ui/coverartbox/__init__.py458except CoverArtImageError:CODE
HIGHpicard/ui/dialogs/installconfirm.py173except Exception:CODE
HIGHpicard/ui/dialogs/installconfirm.py190except Exception:CODE
HIGHpicard/ui/dialogs/installplugin.py59except ImportError:CODE
HIGHpicard/ui/dialogs/installplugin.py466except AttributeError:CODE
HIGHpicard/ui/widgets/pluginlistwidget.py317except Exception:CODE
HIGHpicard/ui/widgets/pluginlistwidget.py253except (AttributeError, Exception):CODE
HIGHpicard/ui/widgets/pluginlistwidget.py836except Exception:CODE
HIGHpicard/ui/widgets/plugindetailswidget.py283except Exception:CODE
HIGHpicard/ui/widgets/plugindetailswidget.py157except Exception:CODE
HIGHpicard/formats/vorbis.py277except KeyError:CODE
HIGHpicard/formats/id3.py996except KeyError:CODE
HIGHpicard/formats/id3.py604except BaseException:CODE
HIGHpicard/formats/mp4.py330except ValueError:CODE
HIGHpicard/formats/mp4.py344except ValueError:CODE
HIGHpicard/formats/mp4.py337except ValueError:CODE
HIGHpicard/formats/mp4.py351except ValueError:CODE
HIGHpicard/formats/mp4.py313except ValueError:CODE
HIGHpicard/acoustid/json_helpers.py143except TypeError:CODE
HIGHpicard/util/filenaming.py109except IndexError:CODE
HIGHpicard/util/filenaming.py420except OSError:CODE
53 more matches not shown…
Decorative Section Separators102 hits · 336 pts
SeverityFileLineSnippetContext
MEDIUMpicard/config_upgrade_hooks.py77# ----------------------COMMENT
MEDIUMpicard/config_upgrade_hooks.py116# ---------------COMMENT
MEDIUMpicard/tagger.py1539 # =======================================================================COMMENT
MEDIUMpicard/tagger.py1541 # =======================================================================COMMENT
MEDIUMpicard/tagger.py1553 # =======================================================================COMMENT
MEDIUMpicard/tagger.py1555 # =======================================================================COMMENT
MEDIUMpicard/tagger.py1610 # =======================================================================COMMENT
MEDIUMpicard/tagger.py1612 # =======================================================================COMMENT
MEDIUM⚡picard/config_upgrade.py64# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡picard/config_upgrade.py66# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡picard/config_upgrade.py73# ---------------------------------------------------------------------------COMMENT
MEDIUMpicard/config_upgrade.py163# ---------------------------------------------------------------------------COMMENT
MEDIUMpicard/config_upgrade.py165# ---------------------------------------------------------------------------COMMENT
MEDIUMpicard/ui/match_icons.py43# ---------------------------------------------------------------------------COMMENT
MEDIUMpicard/ui/match_icons.py45# ---------------------------------------------------------------------------COMMENT
MEDIUMpicard/ui/match_icons.py62# ---------------------------------------------------------------------------COMMENT
MEDIUMpicard/ui/match_icons.py64# ---------------------------------------------------------------------------COMMENT
MEDIUMpicard/webservice/ratecontrol.py35# ============================================================================COMMENT
MEDIUMpicard/webservice/ratecontrol.py37# ============================================================================COMMENT
MEDIUMtest/ui/test_match_icons.py30# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/ui/test_match_icons.py32# ---------------------------------------------------------------------------COMMENT
MEDIUMtest/session/conftest.py47# =============================================================================COMMENT
MEDIUMtest/session/conftest.py49# =============================================================================COMMENT
MEDIUMtest/session/conftest.py98# =============================================================================COMMENT
MEDIUMtest/session/conftest.py100# =============================================================================COMMENT
MEDIUMtest/session/conftest.py138# =============================================================================COMMENT
MEDIUMtest/session/conftest.py140# =============================================================================COMMENT
MEDIUMtest/session/conftest.py201# =============================================================================COMMENT
MEDIUMtest/session/conftest.py203# =============================================================================COMMENT
MEDIUM⚡test/session/conftest.py232# =============================================================================COMMENT
MEDIUM⚡test/session/conftest.py233# =============================================================================COMMENT
MEDIUM⚡test/session/conftest.py235# =============================================================================COMMENT
MEDIUMtest/session/conftest.py338# =============================================================================COMMENT
MEDIUMtest/session/conftest.py340# =============================================================================COMMENT
MEDIUMtest/session/conftest.py355# =============================================================================COMMENT
MEDIUMtest/session/conftest.py357# =============================================================================COMMENT
MEDIUM⚡test/session/test_data.py85# =============================================================================COMMENT
MEDIUM⚡test/session/test_data.py87# =============================================================================COMMENT
MEDIUM⚡test/session/test_data.py112# =============================================================================COMMENT
MEDIUM⚡test/session/test_data.py114# =============================================================================COMMENT
MEDIUM⚡test/session/test_data.py143# =============================================================================COMMENT
MEDIUM⚡test/session/test_data.py145# =============================================================================COMMENT
MEDIUM⚡test/session/test_data.py171# =============================================================================COMMENT
MEDIUM⚡test/session/test_data.py173# =============================================================================COMMENT
MEDIUM⚡test/session/test_data.py200# =============================================================================COMMENT
MEDIUM⚡test/session/test_data.py202# =============================================================================COMMENT
MEDIUM⚡test/session/test_data.py216# =============================================================================COMMENT
MEDIUM⚡test/session/test_data.py218# =============================================================================COMMENT
MEDIUM⚡test/session/test_data.py231# =============================================================================COMMENT
MEDIUM⚡test/session/test_data.py233# =============================================================================COMMENT
MEDIUMtest/session/test_data.py39# =============================================================================COMMENT
MEDIUMtest/session/test_data.py41# =============================================================================COMMENT
MEDIUMscripts/test_plugin_redirects.sh33# =============================================================================COMMENT
MEDIUMscripts/test_plugin_redirects.sh35# =============================================================================COMMENT
MEDIUMscripts/test_plugin_redirects.sh68# =============================================================================COMMENT
MEDIUMscripts/test_plugin_redirects.sh70# =============================================================================COMMENT
MEDIUMscripts/test_plugin_redirects.sh103# =============================================================================COMMENT
MEDIUMscripts/test_plugin_redirects.sh105# =============================================================================COMMENT
MEDIUMscripts/test_plugin_redirects.sh172# =============================================================================COMMENT
MEDIUMscripts/test_plugin_redirects.sh174# =============================================================================COMMENT
42 more matches not shown…
Self-Referential Comments76 hits · 265 pts
SeverityFileLineSnippetContext
MEDIUMpicard/tagger.py285 # Initialize these variables early as they are needed for a cleanCOMMENT
MEDIUMpicard/ui/formattedtextdelegate.py96 # Create a QTextDocument to render the formatted textCOMMENT
MEDIUMpicard/ui/formattedtextdelegate.py128 # Create a QTextDocument to render the formatted textCOMMENT
MEDIUMpicard/ui/itemviews/__init__.py181 # Create a layout for each view to include the filter boxCOMMENT
MEDIUMpicard/ui/itemviews/custom_columns/manager_dialog.py460 # Create a placeholder specification with blank expressionCOMMENT
MEDIUMpicard/ui/itemviews/custom_columns/storage.py270 # Create a mapping of class name strings to actual classesCOMMENT
MEDIUMpicard/ui/statusindicator/unity.py71 # Create the signal message manually.COMMENT
MEDIUMpicard/ui/widgets/plaintextedit.py92 # Create a new data object with plain text only. Modifying the existingCOMMENT
MEDIUMpicard/ui/widgets/scripttextedit.py424 # Initialize dynamic variables from current (possibly empty) script content.COMMENT
MEDIUMpicard/util/textencoding.py61# This module provides utility functions to enable simplification of latin and punctuation unicode:COMMENT
MEDIUMpicard/profiles/importer.py162 # Create a new profileCOMMENT
MEDIUMpicard/plugin3/categories.py88 # Create a list of (key, translated_title) tuplesCOMMENT
MEDIUMpicard/git/backends/pygit2.py530 # Create a new HEAD that points directly to the commitCOMMENT
MEDIUMpicard/session/session_loader.py730 # The following block of methods are retained for scheduling and lifecycle.COMMENT
MEDIUMtest/test_git.py211 # Create a local git repository with tagsCOMMENT
MEDIUMtest/test_profiles.py476 # Create an option without in_profileCOMMENT
MEDIUMtest/plugins3/test_registry.py324 # Create a fake local plugin directory with .gitCOMMENT
MEDIUMtest/plugins3/test_plugin.py188 # Create a test git repoCOMMENT
MEDIUMtest/plugins3/test_plugin.py211 # Create a test git repo with a tagCOMMENT
MEDIUMtest/plugins3/test_plugin.py216 # Create a tagCOMMENT
MEDIUM⚡test/plugins3/test_git.py200 # Create a tagCOMMENT
MEDIUM⚡test/plugins3/test_git.py209 # Create a dev branch with different contentCOMMENT
MEDIUM⚡test/plugins3/test_git.py233 # Create a lightweight tag (just a reference, no tag object)COMMENT
MEDIUMtest/plugins3/test_git.py363 # Create a dev branch in sourceCOMMENT
MEDIUMtest/plugins3/test_git.py388 # Create a tag in sourceCOMMENT
MEDIUMtest/plugins3/test_git.py524 # Create a v1.0.0 tagCOMMENT
MEDIUMtest/plugins3/test_local_non_git_plugin.py168 # Create a fake .git directoryCOMMENT
MEDIUMtest/plugins3/test_update.py663 # Create a new commit on mainCOMMENT
MEDIUM⚡test/plugins3/test_api.py282 # Create a temporary config fileCOMMENT
MEDIUM⚡test/plugins3/test_api.py287 # Create a real QSettings instanceCOMMENT
MEDIUM⚡test/plugins3/test_api.py476 # Create a temporary config fileCOMMENT
MEDIUM⚡test/plugins3/test_api.py481 # Create a real QSettings instanceCOMMENT
MEDIUMtest/plugins3/test_api.py244 # Create a real handler that captures messagesCOMMENT
MEDIUMtest/plugins3/test_api.py307 # Create a new settings instance to verify persistenceCOMMENT
MEDIUM⚡test/plugins3/test_manager.py457 # Create a mock manifestCOMMENT
MEDIUM⚡test/plugins3/test_manager.py976 # Create a plugin that will fail to loadCOMMENT
MEDIUMtest/plugins3/test_manager.py132 # Create a file in temp1 to ensure recursive cleanupCOMMENT
MEDIUMtest/plugins3/test_manager.py836 # Create a nested structure with a read-only file, similar to .git pack filesCOMMENT
MEDIUMtest/plugins3/test_manager.py874 # Create a mock plugin with UUIDCOMMENT
MEDIUMtest/plugins3/test_cli.py197 # Create a temporary git repositoryCOMMENT
MEDIUMtest/plugins3/test_cli.py297 # Create a real temporary configCOMMENT
MEDIUM⚡test/plugins3/test_install.py322 # Create a temporary plugin directory and config fileCOMMENT
MEDIUM⚡test/plugins3/test_install.py329 # Create a real temporary configCOMMENT
MEDIUMtest/plugins3/test_install.py247 # Create a fake existing plugin directory with UUID-based nameCOMMENT
MEDIUMtest/plugins3/test_install.py285 # Create a fake existing plugin directory with UUID-based nameCOMMENT
MEDIUM⚡test/ui/test_custom_columns.py287 # Create an object that will fail obj.column but have metadataCOMMENT
MEDIUM⚡test/ui/test_itemviews_match_quality.py796 # Create a mock delegate columnCOMMENT
MEDIUM⚡test/ui/test_itemviews_match_quality.py800 # Create a mock itemCOMMENT
MEDIUMtest/formats/test_registry.py369 # Create a temp file with MOCK headerCOMMENT
MEDIUMtest/formats/test_registry.py387 # Create a temp file without MOCK headerCOMMENT
MEDIUMtest/formats/test_registry.py403 # Create a temp file with MOCK headerCOMMENT
MEDIUM⚡test/formats/test_vorbis.py171 # Create a test file that contains only disctotal / tracktotal,COMMENT
MEDIUMtest/formats/test_id3.py311 # Create a COMM frame with iTunes_CDDB_1 descriptorCOMMENT
MEDIUM⚡test/util/test_textencoding.py283 # The following code set blocks are taken from:COMMENT
MEDIUM⚡test/profiles/test_profile_import.py472 # Create an existing profile with the same titleSTRING
MEDIUM⚡test/script_text_edit/test_script_completer.py200 # Create a custom mock class that handles __bool__ properlyCOMMENT
MEDIUM⚡test/script_text_edit/test_script_completer.py476 # Create a large script with many $set statementsCOMMENT
MEDIUM⚡test/script_text_edit/test_script_completer.py526 # Create a mock function with invalid structureCOMMENT
MEDIUM⚡test/script_text_edit/test_variable_extractor.py273 # Create a long script with many variablesSTRING
MEDIUMtest/script_text_edit/test_variable_extractor.py306 # Create a large scriptSTRING
16 more matches not shown…
Deep Nesting265 hits · 226 pts
SeverityFileLineSnippetContext
LOWsetup.py231CODE
LOWpicard/config_upgrade_hooks.py142CODE
LOWpicard/releasegroup.py121CODE
LOWpicard/config.py461CODE
LOWpicard/config.py840CODE
LOWpicard/metadata.py127CODE
LOWpicard/metadata.py164CODE
LOWpicard/metadata.py357CODE
LOWpicard/metadata.py394CODE
LOWpicard/track.py394CODE
LOWpicard/profile.py155CODE
LOWpicard/album.py313CODE
LOWpicard/album.py577CODE
LOWpicard/album.py799CODE
LOWpicard/album.py865CODE
LOWpicard/album.py1021CODE
LOWpicard/album.py1138CODE
LOWpicard/album.py1222CODE
LOWpicard/matching.py384CODE
LOWpicard/matching.py795CODE
LOWpicard/matching.py863CODE
LOWpicard/matching.py919CODE
LOWpicard/mbjson.py224CODE
LOWpicard/mbjson.py808CODE
LOWpicard/mbjson.py824CODE
LOWpicard/mbjson.py899CODE
LOWpicard/mbjson.py920CODE
LOWpicard/mbjson.py965CODE
LOWpicard/file.py547CODE
LOWpicard/file.py872CODE
LOWpicard/file.py1006CODE
LOWpicard/file.py1162CODE
LOWpicard/tagger.py548CODE
LOWpicard/tagger.py925CODE
LOWpicard/tagger.py1007CODE
LOWpicard/tagger.py1077CODE
LOWpicard/tagger.py1322CODE
LOWpicard/cluster.py288CODE
LOWpicard/cluster.py361CODE
LOWpicard/config_upgrade.py211CODE
LOWpicard/isrcsubmit.py255CODE
LOWpicard/ui/playground.py157CODE
LOWpicard/ui/util.py397CODE
LOWpicard/ui/util.py238CODE
LOWpicard/ui/theme_detect.py72CODE
LOWpicard/ui/theme_detect.py113CODE
LOWpicard/ui/tagsfromfilenames.py50CODE
LOWpicard/ui/scriptsmenu.py72CODE
LOWpicard/ui/isrcsubmitdialog.py35CODE
LOWpicard/ui/options/plugins.py198CODE
LOWpicard/ui/options/dialog.py254CODE
LOWpicard/ui/options/dialog.py591CODE
LOWpicard/ui/options/dialog.py738CODE
LOWpicard/ui/options/dialog.py1179CODE
LOWpicard/ui/options/interface_quick_menu.py77CODE
LOWpicard/ui/options/interface_quick_menu.py133CODE
LOWpicard/ui/options/profiles.py255CODE
LOWpicard/ui/options/profiles.py495CODE
LOWpicard/ui/options/profiles.py663CODE
LOWpicard/ui/options/profiles.py891CODE
205 more matches not shown…
Unused Imports244 hits · 207 pts
SeverityFileLineSnippetContext
LOWpicard/metadata.py57CODE
LOWpicard/metadata.py58CODE
LOWpicard/metadata.py59CODE
LOWpicard/track.py94CODE
LOWpicard/profile.py37CODE
LOWpicard/matching.py64CODE
LOWpicard/mbjson.py33CODE
LOWpicard/mbjson.py67CODE
LOWpicard/mbjson.py68CODE
LOWpicard/mbjson.py70CODE
LOWpicard/mbjson.py71CODE
LOWpicard/file.py132CODE
LOWpicard/file.py134CODE
LOWpicard/file.py135CODE
LOWpicard/tagger.py195CODE
LOWpicard/cluster.py78CODE
LOWpicard/config_upgrade.py356CODE
LOWpicard/config_upgrade.py432CODE
LOWpicard/item.py51CODE
LOWpicard/item.py53CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py80CODE
LOWpicard/ui/options/dialog.py122CODE
LOWpicard/ui/itemviews/custom_columns/resolve.py26CODE
LOWpicard/ui/itemviews/custom_columns/__init__.py23CODE
LOWpicard/ui/itemviews/custom_columns/__init__.py23CODE
LOWpicard/ui/itemviews/custom_columns/__init__.py23CODE
LOWpicard/ui/itemviews/custom_columns/__init__.py28CODE
LOWpicard/ui/itemviews/custom_columns/__init__.py28CODE
184 more matches not shown…
Excessive Try-Catch Wrapping193 hits · 201 pts
SeverityFileLineSnippetContext
LOWpicard/config.py453 except Exception as why:CODE
LOWpicard/track.py493 except Exception:CODE
LOWpicard/album.py614 except Exception:CODE
MEDIUMpicard/file.py217def _fast_hash(self):CODE
LOWpicard/file.py204 except Exception as e:CODE
LOWpicard/file.py209 except Exception as e:CODE
LOWpicard/file.py224 except Exception as e:CODE
LOWpicard/tagger.py1429 except Exception:CODE
LOWpicard/tagger.py1491 except Exception as e:CODE
LOWpicard/plugin.py174 except Exception:CODE
LOWpicard/oauth.py214 except Exception as e:CODE
LOWpicard/oauth.py359 except Exception as e:CODE
LOWpicard/oauth.py399 except Exception as e:CODE
LOWpicard/oauth.py427 except Exception as e:CODE
LOWpicard/ui/theme_detect_qtdbus.py56 except Exception: # noqa: BLE001CODE
LOWpicard/ui/options/plugins.py232 except Exception as e:CODE
LOWpicard/ui/options/plugins.py270 except Exception as e:CODE
LOWpicard/ui/options/plugins.py385 except Exception as e:CODE
MEDIUMpicard/ui/options/plugins.py242def on_registry_refreshed(success, error):CODE
LOW⚡picard/ui/options/dialog.py722 except Exception as e:CODE
LOWpicard/ui/options/dialog.py535 except Exception:CODE
LOWpicard/ui/options/dialog.py938 except Exception as e:CODE
LOWpicard/ui/options/dialog.py948 except Exception as e:CODE
LOWpicard/ui/options/dialog.py964 except Exception as e:CODE
LOWpicard/ui/options/dialog.py1007 except Exception as e:CODE
LOWpicard/ui/options/scripting.py279 except Exception as e:CODE
LOWpicard/ui/mainwindow/__init__.py2445 except Exception as ex:CODE
LOWpicard/ui/itemviews/basetreeview.py408 except Exception:CODE
LOWpicard/ui/itemviews/custom_columns/registry.py130 except Exception:CODE
LOWpicard/ui/itemviews/custom_columns/registry.py173 except Exception:CODE
LOWpicard/ui/searchdialog/album.py326 except Exception as e:CODE
LOWpicard/ui/scripteditor/__init__.py997 except Exception as e:CODE
LOWpicard/ui/metadatabox/__init__.py520 except Exception as e:CODE
LOW⚡picard/ui/metadatabox/__init__.py660 except Exception:CODE
LOW⚡picard/ui/metadatabox/__init__.py667 except Exception:CODE
MEDIUMpicard/ui/metadatabox/__init__.py552def _paste_from_json(self, mimedata):CODE
LOW⚡picard/ui/statusindicator/__init__.py88 except Exception as err:CODE
LOW⚡picard/ui/statusindicator/__init__.py97 except Exception as err:CODE
LOWpicard/ui/statusindicator/windows.py54 except Exception as err:CODE
LOWpicard/ui/dialogs/installconfirm.py173 except Exception:CODE
LOWpicard/ui/dialogs/installconfirm.py190 except Exception:CODE
LOWpicard/ui/dialogs/plugin_error.py118 except Exception:CODE
LOWpicard/ui/dialogs/installplugin.py376 except Exception as e:CODE
LOWpicard/ui/dialogs/installplugin.py469 except Exception as e:CODE
LOWpicard/ui/dialogs/installplugin.py537 except Exception as e:CODE
LOWpicard/ui/dialogs/installplugin.py573 except Exception as e:CODE
LOWpicard/ui/dialogs/plugininfo.py239 except Exception:CODE
LOWpicard/ui/widgets/pluginlistwidget.py317 except Exception:CODE
LOWpicard/ui/widgets/pluginlistwidget.py360 except Exception:CODE
LOWpicard/ui/widgets/pluginlistwidget.py535 except Exception as e:CODE
LOWpicard/ui/widgets/pluginlistwidget.py721 except Exception as e:CODE
LOWpicard/ui/widgets/pluginlistwidget.py836 except Exception:CODE
LOWpicard/ui/widgets/pluginlistwidget.py848 except Exception as e:CODE
LOWpicard/ui/widgets/pluginlistwidget.py1071 except Exception as e:CODE
LOWpicard/ui/widgets/plugindetailswidget.py157 except Exception:CODE
LOWpicard/ui/widgets/plugindetailswidget.py283 except Exception:CODE
LOWpicard/ui/widgets/plugindetailswidget.py370 except Exception as e:CODE
LOWpicard/ui/player/__init__.py100 except Exception as err:CODE
LOWpicard/formats/registry.py127 except Exception as e:CODE
LOWpicard/formats/registry.py163 except Exception as e:CODE
133 more matches not shown…
Cross-Language Confusion26 hits · 150 pts
SeverityFileLineSnippetContext
HIGHpicard/ui/util.py98 run_executable('xdg-open', url.toString())CODE
HIGHpicard/ui/coverartbox/coverartthumbnail.py148 log.debug("Dropped %s url (with %d bytes of data)", url.toString(), len(dropped_data or ''))CODE
HIGHpicard/ui/coverartbox/__init__.py448 log.debug('Fetched remote image with MIME-Type %s from %s', mime, url.toString())CODE
HIGHpicard/ui/coverartbox/__init__.py463 log.debug('Possible Google images result, trying to fetch imgurl=%s', url.toString())CODE
HIGHpicard/ui/coverartbox/__init__.py468 log.debug('Possible Bing images result, trying to fetch imgurl=%s', url.toString())CODE
HIGHpicard/ui/coverartbox/__init__.py492 log.debug("Trying URL parsed from HTML: %s", url.toString())CODE
HIGHpicard/ui/coverartbox/__init__.py503 coverartimage = CoverArtImage(url=url.toString(), types=['front'], data=data)CODE
HIGHpicard/coverart/image.py138 return "%s: %s" % (self.sourceprefix, self.url.toString())CODE
HIGHpicard/coverart/image.py178 yield "url=%r" % self.url.toString()CODE
HIGHpicard/coverart/image.py193 yield "from %s" % self.url.toString()CODE
HIGHpicard/util/mbserver/submission.py64 return url.toString()CODE
HIGHpicard/webservice/__init__.py937 log.debug("Retrying without authentication: %s", url.toString())CODE
HIGHpicard/webservice/__init__.py940 log.debug("Cannot retry without authentication: %s", url.toString())CODE
HIGHpicard/plugin3/cli.py2097 commit_cmd = 'git add -A && git commit -m "Initial plugin scaffold"'CODE
HIGH⚡test/test_log.py80 self.item_queue.push(MockLogItem(i))CODE
HIGH⚡test/test_log.py89 self.item_queue.push(MockLogItem(i))CODE
HIGH⚡test/test_log.py98 self.item_queue.push(MockLogItem(i))CODE
HIGH⚡test/test_log.py104 self.item_queue.push(MockLogItem(10))CODE
HIGH⚡test/test_log.py124 self.item_queue.push(MockLogItem(4))CODE
HIGH⚡test/test_log.py125 self.item_queue.push(MockLogItem(5))CODE
HIGH⚡test/test_log.py126 self.item_queue.push(MockLogItem(11))CODE
HIGH⚡test/plugins3/test_registry.py553 url_str = url.toString()CODE
HIGHtest/plugins3/test_registry.py585 calls.append(url.toString())CODE
HIGHtest/plugins3/test_registry.py612 calls.append(url.toString())CODE
HIGHtest/coverart/test_image.py468 self.assertEqual(image.url.toString(), 'file://' + path)CODE
HIGHtest/webservice/test_api_helpers_musicbrainz.py56 self.assertTrue(url.toString().startswith("https://mb.org/"))CODE
Redundant / Tautological Comments78 hits · 114 pts
SeverityFileLineSnippetContext
LOWpicard/config.py797 # Check if there is a config file specifically for this versionCOMMENT
LOWpicard/isrcsubmit.py271 # Check if the ISRC is already assigned to another track on this releaseCOMMENT
LOWpicard/ui/filter.py135 # Check if selected filters were removed and re-apply the filterCOMMENT
LOWpicard/ui/options/plugins.py211 # Check if the update is still valid (current commit == old_commit from update info)COMMENT
LOWpicard/ui/options/dialog.py258 # Check if this is a plugin option page and if the plugin is enabledCOMMENT
LOWpicard/ui/options/dialog.py1170 # Check if any other enabled profile has itCOMMENT
LOWpicard/ui/options/profiles.py682 # Check if the file contains a profile UUID that already exists in the dialogCOMMENT
LOWpicard/ui/itemviews/custom_columns/registry.py149 # Check if this widget uses our target columnsCOMMENT
LOWpicard/ui/itemviews/custom_columns/validation.py211 # Check if key already exists in contextCOMMENT
LOWpicard/ui/infodialog/dialog.py201 # Check if this object contains the tribute trackCOMMENT
LOWpicard/ui/infodialog/dialog.py427 # Check if this function isn't triggered by cell in Type columnCOMMENT
LOWpicard/ui/widgets/context_detector.py129 # Check if there's a complete variable before the %%COMMENT
LOWpicard/ui/widgets/context_detector.py157 # Check if we're in the first argument (no comma yet) and not closedCOMMENT
LOW⚡picard/ui/widgets/context_detector.py218 # Check if it's a valid partial function name (alphanumeric/underscore characters)COMMENT
LOW⚡picard/ui/widgets/context_detector.py234 # Check if it's a valid partial variable name (alphanumeric/underscore characters)COMMENT
LOWpicard/ui/widgets/pluginlistwidget.py366 # Check if user has previously unchecked this pluginCOMMENT
LOWpicard/ui/widgets/scripttextedit.py260 # Check if user scripts have changed and rescan if neededCOMMENT
LOWpicard/ui/widgets/scripttextedit.py569 # Check if this is a tag-name functionCOMMENT
LOWpicard/ui/widgets/scripttextedit.py693 # Check if we should show the popup based on current contextCOMMENT
LOWpicard/ui/widgets/plugindetailswidget.py309 # Check if plugin is in do_not_update list and ask for confirmationCOMMENT
LOWpicard/ui/widgets/plugindetailswidget.py349 # Check if parent has a plugin_list attributeCOMMENT
LOWpicard/formats/registry.py152 # Read file header for format detectionCOMMENT
LOWpicard/util/checkupdate.py128 # Display results to user.COMMENT
LOWpicard/extension_points/item_actions.py131 action.setParent(action_menu) # Set parent to keep action aliveCODE
LOW⚡picard/extension_points/__init__.py123 # Check if any enabled UUID maps to this module nameCOMMENT
LOWpicard/webservice/__init__.py545 # Check if task was aborted before startingCOMMENT
LOWpicard/plugin3/plugin_metadata.py370 # Check if current commit matches a tag (prefer tag over branch)COMMENT
LOW⚡picard/plugin3/cli.py848 # Check if already installed first (unless reinstalling)COMMENT
LOW⚡picard/plugin3/cli.py850 # Check if any loaded plugin has this URLCOMMENT
LOWpicard/plugin3/cli.py432 # Check if local non-git pluginCOMMENT
LOWpicard/plugin3/cli.py627 # Check if this is a local non-git pluginCOMMENT
LOWpicard/plugin3/cli.py777 # Check if it's a plugin ID (no slashes, no protocol)COMMENT
LOWpicard/plugin3/cli.py831 # Check if this URL is in the registry (possibly via redirect_from)COMMENT
LOWpicard/plugin3/cli.py944 # Check if installing from dirty local git repositoryCOMMENT
LOWpicard/plugin3/cli.py1002 # Check if this is a failed plugin (no manifest)COMMENT
LOWpicard/plugin3/cli.py1335 # Check if plugin config existsCOMMENT
LOWpicard/plugin3/cli.py1389 # Check if it's a failed plugin directory nameCOMMENT
LOWpicard/plugin3/cli.py1406 # Check if url is a local directoryCOMMENT
LOWpicard/plugin3/cli.py2110 # Check if it's an installed pluginCOMMENT
LOWpicard/plugin3/cli.py2120 # Check if it's a local directoryCOMMENT
LOWpicard/plugin3/plugin.py267 # Check if it's a repository-level 404/not found error (not branch-level)COMMENT
LOWpicard/plugin3/plugin.py409 # Check if currently on a tagCOMMENT
LOWpicard/plugin3/plugin.py444 # Set resolved_ref_type to indicate this is a tagCOMMENT
LOWpicard/plugin3/plugin.py724 # Check if there's an existing API instance (from UI components)COMMENT
LOWpicard/plugin3/manager/update.py181 # Check if plugin is blacklisted (by current or redirected URL/UUID)COMMENT
LOWpicard/plugin3/manager/update.py186 # Check if plugin has versioning_scheme and current ref is a version tagCOMMENT
LOWpicard/plugin3/manager/__init__.py226 # Check if we have an installed plugin for this URL to reuse its repositoryCOMMENT
LOW⚡picard/plugin3/manager/lifecycle.py337 # Check if plugin is from registry (has known git URL)COMMENT
LOWpicard/plugin3/manager/install.py91 # Check if url is a local directory (git or plain)COMMENT
LOWpicard/plugin3/manager/install.py230 # Check if already installed from this pathCOMMENT
LOWpicard/git/ops.py156 # Check if ref exists in remoteCOMMENT
LOWpicard/git/ops.py341 # Check if we're switching to a remote branchCOMMENT
LOWpicard/git/utils.py42 # Check if it's a local path (not a remote protocol)COMMENT
LOWpicard/git/backends/pygit2.py233 # Check if there's a ^{} versionCOMMENT
LOWpicard/git/backends/pygit2.py288 # Check if it's an annotated tag and dereference to commitCOMMENT
LOWpicard/git/backends/pygit2.py548 # Check if we can use an existing repositoryCOMMENT
LOWpicard/session/session_exporter.py313 # Check if this album has any files matched to itCOMMENT
LOWtest/ui/test_theme.py598 # Set config to SYSTEMCOMMENT
LOWtest/formats/test_apev2.py208 # Open file and rename itCOMMENT
LOWscripts/migrate_plugin.py197 # Check if it's a tuple of strings (implicit concatenation)COMMENT
18 more matches not shown…
Docstring Block Structure14 hits · 70 pts
SeverityFileLineSnippetContext
HIGHpicard/config.py469Register an option in this config section. The option type is determined by the type of the default value. STRING
HIGHpicard/config.py637Register an option in this config section. Extends the base class method with profile support. Args: STRING
HIGHpicard/log.py279Log a debug message only if the specified debug option is enabled. Can also be used as a guard that returns a callaSTRING
HIGHpicard/util/emptydir.py47 Checks if a directory is considered empty. Args: path: Path to directory to check. ignored_filSTRING
HIGHpicard/util/checkupdate.py55Checks if an update is available. Compares the version number of the currently running instance of Picard STRING
HIGHpicard/util/__init__.py947Parses a string and interprets it as a matching pattern. - If pattern is of the form /pattern/flags it is interpretSTRING
HIGHpicard/util/__init__.py1194Converts text to title case following word boundary rules. Capitalizes the first character of each word in the inpuSTRING
HIGHpicard/profiles/importer.py109Import a profile from a TOML string. Args: config: The application Config object. toml_string: The STRING
HIGHpicard/plugin3/api_impl.py225Log a debug message only if the specified debug option is enabled. Can also be used as a guard that returns a cSTRING
HIGHpicard/plugin3/validation.py47Read MANIFEST.toml from path and validate it. Args: path: Directory path containing MANIFEST.toml STRING
HIGHpicard/plugin3/validation.py75Get plugin UUID, raising PluginNoUUIDError if not available. Args: plugin: Plugin object RSTRING
HIGHpicard/git/ops.py60Check if git working directory has uncommitted changes. Args: path: Path to git repository STRING
HIGHpicard/git/ops.py107Validate that a ref exists in the repository. Args: url: Git repository URL ref: Git reSTRING
HIGHpicard/git/ops.py214Switch plugin to a different git ref (branch/tag/commit). Args: plugin: Plugin to switch STRING
Cross-File Repetition13 hits · 65 pts
SeverityFileLineSnippetContext
HIGHpicard/formats/apev2.py0remove the tags from the file that were deleted in the uiSTRING
HIGHpicard/formats/vorbis.py0remove the tags from the file that were deleted in the uiSTRING
HIGHpicard/formats/mp4.py0remove the tags from the file that were deleted in the uiSTRING
HIGHpicard/formats/asf.py0remove the tags from the file that were deleted in the uiSTRING
HIGHtest/script_text_edit/test_script_completer.py0$set(_leading_underscore, "value") $set(trailing_underscore_, "value") $set(_both_underscores_, "value") $set(multiple__STRING
HIGHtest/script_text_edit/test_regex_fallback.py0$set(_leading_underscore, "value") $set(trailing_underscore_, "value") $set(_both_underscores_, "value") $set(multiple__STRING
HIGHtest/script_text_edit/test_ast_parsing.py0$set(_leading_underscore, "value") $set(trailing_underscore_, "value") $set(_both_underscores_, "value") $set(multiple__STRING
HIGHtest/script_text_edit/test_script_completer.py0test regex behavior with %variable% syntax in $set statements.STRING
HIGHtest/script_text_edit/test_ast_parsing.py0test regex behavior with %variable% syntax in $set statements.STRING
HIGHtest/script_text_edit/test_regex_fallback.py0test regex behavior with %variable% syntax in $set statements.STRING
HIGHtest/script_text_edit/test_script_completer.py0$set(%variable%, "value") $set(%artist%, "value") $set(regular_var, "value")STRING
HIGHtest/script_text_edit/test_regex_fallback.py0$set(%variable%, "value") $set(%artist%, "value") $set(regular_var, "value")STRING
HIGHtest/script_text_edit/test_ast_parsing.py0$set(%variable%, "value") $set(%artist%, "value") $set(regular_var, "value")STRING
Modern Structural Boilerplate47 hits · 47 pts
SeverityFileLineSnippetContext
LOWpicard/log.py77def set_verbosity(level: int) -> None:CODE
LOWpicard/isrcsubmit.py107 def _update_entry(self, file, recording_id: str, new_isrcs: set[NormalizedISRC]) -> None:CODE
LOWpicard/ui/moveable_list_view.py62 def update_buttons(self) -> None:CODE
LOWpicard/ui/playground.py86 def set_description(self, description: str, match_meaning: str, skip_meaning: str) -> None:CODE
LOWpicard/ui/playground.py110 def set_error(self, message: str) -> None:CODE
LOW⚡picard/ui/theme.py204def set_color_scheme(color_scheme: QtCore.Qt.ColorScheme) -> None:CODE
LOWpicard/ui/__init__.py286 def set_window_title(self, title: str) -> None:CODE
LOWpicard/ui/setupwizard.py123 def set_checked(self, checked: bool) -> None:STRING
LOWpicard/ui/setupwizard.py260 def _update_move_to_state(self, checked: bool) -> None:CODE
LOWpicard/ui/options/dialog.py1246 def _update_profile_markers(self, pkey: str) -> None:CODE
LOWpicard/ui/mainwindow/__init__.py2404 def _set_profile_enabled(self, profile_id: str, enabled: bool) -> None:CODE
LOWpicard/ui/itemviews/custom_columns/view_selector.py68 def set_selected(self, view_ids: set[str]) -> None:CODE
LOWpicard/ui/itemviews/custom_columns/manager_dialog.py633 def _update_apply(self) -> None:CODE
LOWpicard/ui/itemviews/custom_columns/manager_dialog.py644 def _update_form_actions(self) -> None:CODE
LOWpicard/ui/itemviews/custom_columns/spec_list_model.py113 def set_specs(self, specs: list[CustomColumnSpec]) -> None:CODE
LOWpicard/ui/itemviews/custom_columns/spec_list_model.py143 def update_spec(self, row: int, spec: CustomColumnSpec) -> None:CODE
LOWpicard/ui/itemviews/custom_columns/__init__.py59__all__ = [CODE
LOW…ard/ui/itemviews/custom_columns/column_form_handler.py86 def set_enabled(self, enabled: bool) -> None:CODE
LOWpicard/ui/itemviews/custom_columns/column.py226 def set_header_icon_size(self, width: int, height: int, border: int) -> None:CODE
LOW⚡picard/ui/statusindicator/__init__.py79 def set_progress(self, progress: float) -> None: ...CODE
LOWpicard/ui/widgets/preferencelistwidget.py62 def _setup_ui(self) -> None:CODE
LOWpicard/ui/widgets/preferencelistwidget.py115 def set_available_items(self, items: dict[str, str]) -> None:CODE
LOWpicard/ui/widgets/preferencelistwidget.py120 def set_selected_keys(self, keys: list[str]) -> None:CODE
LOWpicard/ui/widgets/preferencelistwidget.py146 def set_excluded_keys(self, keys: set[str]) -> None:CODE
LOWpicard/ui/widgets/preferencelistwidget.py238 def _update_buttons(self) -> None:CODE
LOWpicard/ui/widgets/scripttextedit.py726 def _update_completion_context(self, text_cursor: QTextCursor) -> None:CODE
LOWpicard/formats/__init__.py60__all__ = [CODE
LOWpicard/coverart/image.py246 def set_data(self, data: bytes) -> None:CODE
LOWpicard/coverart/image.py270 def set_external_file_data(self, data: bytes) -> None:CODE
LOW⚡picard/extension_points/__init__.py138def set_plugin_uuid(uuid: str, module_name: str) -> None:CODE
LOWpicard/webservice/api_helpers/__init__.py29__all__ = [CODE
LOWpicard/i18n/__init__.py42__all__ = [CODE
LOWpicard/plugin3/__init__.py29__all__ = [CODE
LOWpicard/plugin3/api.py48__all__ = [CODE
LOWpicard/plugin3/asyncops/__init__.py39__all__ = [CODE
LOWpicard/git/__init__.py43__all__ = [CODE
LOWpicard/session/session_loader.py358 def set_expansions() -> None:CODE
LOWtest/test_coverart_details_option.py132 def update_display(self, force: bool = False) -> None:CODE
LOWtest/ui/test_coverartbox_info.py73 def set_metadata(self, metadata: object) -> None: # noqa: N802 (not Qt, but keep style)CODE
LOWtest/ui/test_coverartbox_info.py76 def set_marked_for_removal(self, marked: bool) -> None:CODE
LOWtest/ui/test_coverartbox_info.py131 def update_display(self, force: bool = False) -> None:CODE
LOWtest/ui/test_coverartbox_info.py315def _setup_new_vs_original(box: CoverArtBox) -> None:CODE
LOWtest/ui/test_coverart_removal_display.py175 def set_metadata(self, metadata) -> None:CODE
LOWtest/ui/test_coverart_removal_display.py181 def set_marked_for_removal(self, marked_for_removal) -> None:CODE
LOWtest/ui/test_coverart_removal_display.py204 def update_display(self, force: bool = False) -> None:CODE
LOWtest/script_text_edit/test_scripttextedit_highlight.py81 def set_items(self, items: Iterable[str]) -> None:CODE
LOWtest/script_text_edit/test_scripttextedit_highlight.py148 def set_highlighted(self, text: str) -> None:CODE
Structural Annotation Overuse20 hits · 36 pts
SeverityFileLineSnippetContext
LOW⚡test/script_text_edit/test_context_aware_completion.py551 # Step 1: Function name contextCOMMENT
LOW⚡test/script_text_edit/test_context_aware_completion.py556 # Step 2: Tag name argument contextCOMMENT
LOW⚡test/script_text_edit/test_context_aware_completion.py568 # Step 1: Variable contextCOMMENT
LOW⚡test/script_text_edit/test_context_aware_completion.py574 # Step 2: Partial variable contextCOMMENT
LOW⚡test/script_text_edit/test_context_detector.py342 # Step 1: Function name contextCOMMENT
LOW⚡test/script_text_edit/test_context_detector.py345 # Step 2: Tag name argument contextCOMMENT
LOW⚡test/script_text_edit/test_context_detector.py350 # Step 1: Variable contextCOMMENT
LOW⚡test/script_text_edit/test_context_detector.py353 # Step 2: Partial variable contextCOMMENT
LOWdocs/PLUGINSV3/MIGRATION.md120### Step 1: Run Migration ToolCOMMENT
LOWdocs/PLUGINSV3/MIGRATION.md144### Step 2: Create MANIFEST.tomlCOMMENT
LOWdocs/PLUGINSV3/MIGRATION.md185### Step 2: Review Generated CodeCOMMENT
LOWdocs/PLUGINSV3/MIGRATION.md195### Step 3: Create Git RepositoryCOMMENT
LOWdocs/PLUGINSV3/MIGRATION.md345### Step 1: Create MANIFEST.tomlCOMMENT
LOWdocs/PLUGINSV3/MIGRATION.md357### Step 5: Update Qt ImportsCOMMENT
LOWdocs/PLUGINSV3/MIGRATION.md378### Step 6: Add Translations (Work in Progress)COMMENT
LOWdocs/PLUGINSV3/MIGRATION.md382### Step 7: Update ConfigurationCOMMENT
LOWscripts/eval_matching/SYNTHETIC_SCENARIOS.md51### Step 1: Define the releasesCOMMENT
LOWscripts/eval_matching/SYNTHETIC_SCENARIOS.md97### Step 2: Define the recordings (candidates)COMMENT
LOWscripts/eval_matching/SYNTHETIC_SCENARIOS.md143### Step 3: Define the scenarios (test cases)COMMENT
LOWscripts/eval_matching/SYNTHETIC_SCENARIOS.md173### Step 4: Run and verifyCOMMENT
Verbosity Indicators11 hits · 22 pts
SeverityFileLineSnippetContext
LOWpicard/ui/tablebaseddialog.py120 # We need to check if the visual index is valid before convertingCOMMENT
LOWpicard/ui/widgets/context_detector.py123 # If it ends with %%, we need to check if it's a literal %% or a new variableCOMMENT
LOWpicard/util/filenaming.py83 # before returning, we need to check if we didn't cut in the middleCOMMENT
LOW⚡test/script_text_edit/test_context_aware_completion.py551 # Step 1: Function name contextCOMMENT
LOW⚡test/script_text_edit/test_context_aware_completion.py556 # Step 2: Tag name argument contextCOMMENT
LOW⚡test/script_text_edit/test_context_aware_completion.py568 # Step 1: Variable contextCOMMENT
LOW⚡test/script_text_edit/test_context_aware_completion.py574 # Step 2: Partial variable contextCOMMENT
LOW⚡test/script_text_edit/test_context_detector.py342 # Step 1: Function name contextCOMMENT
LOW⚡test/script_text_edit/test_context_detector.py345 # Step 2: Tag name argument contextCOMMENT
LOW⚡test/script_text_edit/test_context_detector.py350 # Step 1: Variable contextCOMMENT
LOW⚡test/script_text_edit/test_context_detector.py353 # Step 2: Partial variable contextCOMMENT
Fake / Example Data18 hits · 18 pts
SeverityFileLineSnippetContext
LOWpicard/ui/metadatabox/__init__.py107DiffColors = namedtuple('DiffColors', ('text', 'placeholder', 'removed_bg', 'added_bg'))CODE
LOWpicard/plugin3/init_templates.py323 author: Author string, e.g. "Jane Doe" or "Jane Doe <jane@example.com>"STRING
LOW⚡test/plugins3/test_cli.py1192 MockPluginManager(), verb='init', name='Test', target_dir=str(target), author='Jane Doe'CODE
LOW⚡test/plugins3/test_cli.py1196 self.assertIn('authors = ["Jane Doe"]', manifest)CODE
LOW⚡test/plugins3/test_cli.py1206 self.assertIn('authors = ["Jane Doe"]', manifest)CODE
LOW⚡test/plugins3/test_cli.py1590 MockPluginManager(), verb='init', name='Test', target_dir=str(target), author='Jane Doe'CODE
LOW⚡test/plugins3/test_cli.py1596 self.assertEqual(author_name, 'Jane Doe')CODE
LOWtest/formats/test_id3_load.py203 frame.email = 'user@example.com'CODE
LOWtest/formats/test_id3_load.py206 config_params = {'rating_user_email': 'user@example.com'}CODE
LOWtest/data/testplugins3/registry.toml90 "John Doe",CODE
LOWtest/data/testplugins3/registry.toml109 "Jane Doe",CODE
LOWdocs/PLUGINSV3/CLI.md1148picard-cli plugins init "My Cool Plugin" --author "Jane Doe" --category metadataSTRING
LOWdocs/PLUGINSV3/MIGRATION.md149PLUGIN_AUTHOR = "John Doe"CODE
LOWdocs/PLUGINSV3/MIGRATION.md163authors = ["John Doe"]CODE
LOWdocs/PLUGINSV3/MIGRATION.md421PLUGIN_AUTHOR = "John Doe"CODE
LOWdocs/PLUGINSV3/MIGRATION.md479authors = ["John Doe"]CODE
LOWdocs/PLUGINSV3/MANIFEST.md81| `authors` | array | Plugin author/contributor names | `["John Doe", "Jane Smith"]` |CODE
LOWdocs/PLUGINSV3/MANIFEST.md82| `maintainers` | array | Plugin maintainer names | `["John Doe"]` |CODE
AI Slop Vocabulary9 hits · 17 pts
SeverityFileLineSnippetContext
LOWpicard/tagger.py906 # We should just return True here, except that seems toCOMMENT
LOWpicard/ui/itemviews/__init__.py523 # Delegate columns are handled by delegate, just set size hintCOMMENT
MEDIUMpicard/ui/itemviews/match_quality_column.py86 """Get comprehensive match statistics for the given object.STRING
MEDIUMpicard/ui/widgets/plugindetailswidget.py208 # Always enable description button since PluginInfoDialog shows comprehensive infoCOMMENT
MEDIUMpicard/util/textencoding.py59# These are non-trivial, and the software to do these is far from comprehensive.COMMENT
MEDIUMpicard/plugin3/plugin.py413 # Use robust reference type detectionCOMMENT
MEDIUMpicard/plugin3/plugin.py201 """Check if current ref is a tag using robust type detection."""STRING
MEDIUMpicard/git/ref_utils.py19"""Git reference utilities for robust reference type detection."""STRING
LOW⚡test/plugins3/test_registry.py659 # Should not raise, just return False (not blacklisted)COMMENT
AI Structural Patterns13 hits · 11 pts
SeverityFileLineSnippetContext
LOWpicard/ui/itemviews/custom_columns/factory.py275CODE
LOWpicard/ui/itemviews/custom_columns/column.py114CODE
LOWpicard/coverart/image.py466CODE
LOWpicard/script/serializer.py446CODE
LOWpicard/tags/tagvar.py108CODE
LOWpicard/webservice/__init__.py160CODE
LOWpicard/browser/addrelease.py206CODE
LOWpicard/plugin3/api_impl.py788CODE
LOWpicard/plugin3/api_impl.py852CODE
LOWpicard/plugin3/init_templates.py70CODE
LOWpicard/plugin3/manager/__init__.py292CODE
LOWtest/plugins3/test_cli.py1399CODE
LOWtest/plugins3/helpers.py374CODE
Hallucination Indicators1 hit · 10 pts
SeverityFileLineSnippetContext
CRITICALpicard/remotecommands/handlers.py303 for x in self.tagger.window.log_dialog.log_tail.contents():CODE
Slop Phrases3 hits · 3 pts
SeverityFileLineSnippetContext
LOW⚡picard/config_upgrade_hooks.py639 # We need to make sure to load all keys in the config file, not justCOMMENT
LOWpicard/util/filenaming.py286 # and don't forget to cacheSTRING
LOWpicard/util/filenaming.py286 # and don't forget to cacheSTRING
Overly Generic Function Names2 hits · 2 pts
SeverityFileLineSnippetContext
LOWpicard/util/thread.py123def run_task(CODE
LOWtest/plugins3/test_migration.py171def my_function():CODE
Dead Code1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMpicard/profiles/exporter.py241CODE
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWscripts/tools/generate_match_icons.py26# Usage:COMMENT