Picard is a cross-platform music tagger powered by the MusicBrainz database
This report presents the forensic synthetic code analysis of metabrainz/picard, a Python project with 5,090 GitHub stars. SynthScan v2.0 examined 252,358 lines of code across 853 source files, recording 4675 pattern matches distributed across 22 syntactic categories. The overall adjusted score of 21.5 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).
Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.
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.
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.
The scanner identified 4675 distinct pattern matches across 22 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.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | setup.py | 212 | def py_from_ui_with_defaultdir(uifile): | CODE |
| LOW | picard/options.py | 446 | def make_default_toolbar_layout(): | CODE |
| LOW⚡ | picard/config_upgrade_hooks.py | 417 | def convert_preserved_tags_to_list(config): | CODE |
| LOW⚡ | picard/config_upgrade_hooks.py | 427 | def rename_whitelist_ca_provider(settings): | CODE |
| LOW⚡ | picard/config_upgrade_hooks.py | 437 | def reset_main_splitter_states(config): | CODE |
| LOW⚡ | picard/config_upgrade_hooks.py | 633 | def reset_options_dialog_splitters(config): | CODE |
| LOW⚡ | picard/config_upgrade_hooks.py | 639 | def rename_toolbar_multiselect(settings): | CODE |
| LOW⚡ | picard/config_upgrade_hooks.py | 645 | def reset_locked_header_states(config): | CODE |
| LOW⚡ | picard/config_upgrade_hooks.py | 654 | def sanitize_replace_dir_separator(settings): | CODE |
| LOW | picard/config_upgrade_hooks.py | 140 | def remove_va_file_naming_format(merge=True): | CODE |
| LOW | picard/config_upgrade_hooks.py | 206 | def rename_windows_compatible_filenames(settings): | CODE |
| LOW | picard/config_upgrade_hooks.py | 212 | def convert_preserved_tags_separator(config): | CODE |
| LOW | picard/config_upgrade_hooks.py | 240 | def convert_release_type_scores(config): | CODE |
| LOW | picard/config_upgrade_hooks.py | 276 | def convert_ca_providers_to_tuples(config): | CODE |
| LOW | picard/config_upgrade_hooks.py | 319 | def convert_tagger_scripts_to_list(config): | CODE |
| LOW | picard/config_upgrade_hooks.py | 345 | def rename_save_only_front_images_to_tags(settings): | CODE |
| LOW | picard/config_upgrade_hooks.py | 386 | def convert_ignore_genres_to_filter(config): | CODE |
| LOW | picard/config_upgrade_hooks.py | 468 | def restructure_splitter_persist(config): | CODE |
| LOW | picard/config_upgrade_hooks.py | 471 | def upgrade_persisted_splitter(new_persist_key, key_map): | CODE |
| LOW | picard/config_upgrade_hooks.py | 511 | def convert_naming_scripts_to_dict(config): | CODE |
| LOW | picard/config_upgrade_hooks.py | 544 | def convert_script_exception_to_list(config): | CODE |
| LOW | picard/config_upgrade_hooks.py | 558 | def convert_script_exceptions_with_weighting(config): | CODE |
| LOW | picard/config_upgrade_hooks.py | 573 | def remove_acousticbrainz_from_toolbar(settings): | CODE |
| LOW | picard/config_upgrade_hooks.py | 587 | def add_preset_naming_scripts(config): | CODE |
| LOW | picard/config_upgrade_hooks.py | 667 | def copy_standardize_instruments_to_vocals(settings): | CODE |
| LOW | picard/config_upgrade_hooks.py | 675 | def change_theme_system_to_default(settings): | CODE |
| LOW | picard/config_upgrade_hooks.py | 693 | def remove_old_plugin_options(config): | CODE |
| LOW | picard/config_upgrade_hooks.py | 705 | def lowercase_cover_art_formats(settings): | CODE |
| LOW | picard/config_upgrade_hooks.py | 716 | def fix_matchedtracks_in_scripts(settings): | CODE |
| LOW | picard/config_upgrade_hooks.py | 737 | def remove_persisted_column_config(config): | CODE |
| LOW | picard/config_upgrade_hooks.py | 750 | def remove_similarity_thresholds(settings): | CODE |
| LOW | picard/config_upgrade_hooks.py | 762 | def rename_selected_file_naming_script_id(settings): | CODE |
| LOW | picard/config_upgrade_hooks.py | 782 | def convert_standardize_artists(settings): | CODE |
| LOW | picard/config_upgrade_hooks.py | 802 | def convert_release_type_scores_to_lists(settings): | CODE |
| LOW | picard/config_upgrade_hooks.py | 827 | def clamp_browser_integration_port(settings): | CODE |
| LOW | picard/releasegroup.py | 73 | def prepare_releases_for_versions(releases): | CODE |
| LOW | picard/config.py | 373 | def _get_all_profile_settings(self): | CODE |
| LOW | picard/config.py | 383 | def _is_settings_override_active(self) -> bool: | CODE |
| LOW | picard/config.py | 448 | def _save_all_profile_settings(self, all_settings: dict): | CODE |
| LOW | picard/config.py | 679 | def _versioned_config_filename(self, version=None): | CODE |
| LOW | picard/metadata.py | 568 | def run_album_metadata_processors(album_object: 'Album', metadata: Metadata, release_node: dict): | CODE |
| LOW | picard/metadata.py | 572 | def run_track_metadata_processors( | CODE |
| LOW | picard/audit.py | 58 | def list_from_prefixes_string(prefixes_string: str) -> Iterator[tuple[str, ...]]: | CODE |
| LOW | picard/audit.py | 75 | def prefixes_candidates_for_length( | CODE |
| LOW | picard/track.py | 392 | def _convert_folksonomy_tags_to_genre(self): | CODE |
| LOW | picard/track.py | 434 | def _add_folksonomy_tags_variable(self): | CODE |
| LOW | picard/track.py | 505 | def _recording_request_finished(self, recording, http, error): | CODE |
| LOW | picard/profile.py | 81 | def profile_groups_add_setting( | CODE |
| LOW | picard/profile.py | 107 | def profile_groups_all_settings() -> set[str]: | CODE |
| LOW | picard/profile.py | 111 | def profile_groups_update_highlights(section: str, option_name: str, highlights: Iterable[str]) -> None: | CODE |
| LOW | picard/profile.py | 135 | def profile_groups_group_from_page(page: 'OptionsPage') -> dict | None: | CODE |
| LOW | picard/profile.py | 158 | def profile_groups_remove_group(group: str) -> None: | CODE |
| LOW | picard/__init__.py | 215 | def _global_exception_handler(exctype, value, traceback): | CODE |
| LOW | picard/album.py | 303 | def _warn_deprecated_requests(self, operation): | CODE |
| LOW | picard/album.py | 333 | def iter_correctly_matched_tracks(self): | CODE |
| LOW | picard/album.py | 443 | def _run_album_metadata_processors(self): | CODE |
| LOW | picard/album.py | 490 | def _setup_release_artist_nodes(self, release_node): | CODE |
| LOW | picard/album.py | 517 | def _release_metadata_customization(self, metadata, release_node): | CODE |
| LOW | picard/album.py | 531 | def _needs_track_relationships(self, release_node): | CODE |
| LOW | picard/album.py | 545 | def _release_request_finished(self, document, http, error): | CODE |
| 2847 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | setup.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | setup.py | 21 | # Copyright (C) 2018 Kartik Ohri | COMMENT |
| LOW | requirements-dev.txt | 1141 | # via | COMMENT |
| LOW | picard/options.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/options.py | 81 | COMMENT | |
| LOW | picard/config_upgrade_hooks.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/config_upgrade_hooks.py | 81 | # Use one of two decorators: | COMMENT |
| LOW | picard/config_upgrade_hooks.py | 101 | # | COMMENT |
| LOW | picard/config_upgrade_hooks.py | 121 | # Read old option, write new option, remove old (type change / one→many): | COMMENT |
| LOW | picard/debug_opts.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/releasegroup.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/config.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/metadata.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/metadata.py | 21 | # Copyright (C) 2022 Bob Swift | COMMENT |
| LOW | picard/version.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/audit.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/similarity.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/log.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/track.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/track.py | 21 | # Copyright (C) 2018 Vishal Choudhary | COMMENT |
| LOW | picard/profile.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/__init__.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/__init__.py | 21 | # modify it under the terms of the GNU General Public License | COMMENT |
| LOW | picard/album_requests.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/album.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/album.py | 21 | # Copyright (C) 2018 Vishal Choudhary | COMMENT |
| LOW | picard/matching.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/matching.py | 21 | # Copyright (C) 2022 Bob Swift | COMMENT |
| LOW | picard/mbjson.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/file.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/file.py | 21 | # Copyright (C) 2016 Rahul Raturi | COMMENT |
| LOW | picard/tagger.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/tagger.py | 21 | # Copyright (C) 2016 Simon Legner | COMMENT |
| LOW | picard/tagger.py | 521 | if cmd == 'QUIT': | COMMENT |
| LOW | picard/cluster.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/cluster.py | 21 | # Copyright (C) 2021 Petit Minion | COMMENT |
| LOW | picard/collection.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/plugin.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/plugin.py | 21 | # | COMMENT |
| LOW | picard/config_upgrade.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/config_upgrade.py | 61 | # See config_upgrade_hooks.py | COMMENT |
| LOW | picard/isrcsubmit.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/item.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/oauth.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/ui/moveable_list_view.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/ui/enums.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/ui/enums.py | 21 | # Copyright (C) 2016 Simon Legner | COMMENT |
| LOW | picard/ui/playground.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/ui/theme.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/ui/tutorial.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/ui/match_icons.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/ui/util.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/ui/passworddialog.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/ui/theme_detect.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/ui/__init__.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/ui/theme_detect_qtdbus.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/ui/caa_types_selector.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/ui/cdlookup.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/ui/aboutdialog.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| LOW | picard/ui/columns.py | 1 | # -*- coding: utf-8 -*- | COMMENT |
| 598 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | picard/config_upgrade_hooks.py | 79 | # ---------------------- | COMMENT |
| MEDIUM | picard/config_upgrade_hooks.py | 110 | # --------------- | COMMENT |
| MEDIUM⚡ | picard/tagger.py | 1475 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | picard/tagger.py | 1477 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | picard/tagger.py | 1484 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | picard/tagger.py | 1486 | # ======================================================================= | COMMENT |
| MEDIUM | picard/tagger.py | 593 | # ============================== | COMMENT |
| MEDIUM | picard/tagger.py | 595 | # ============================== | COMMENT |
| MEDIUM | picard/tagger.py | 1538 | # ======================================================================= | COMMENT |
| MEDIUM | picard/tagger.py | 1540 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | picard/config_upgrade.py | 64 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | picard/config_upgrade.py | 66 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | picard/config_upgrade.py | 73 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | picard/config_upgrade.py | 158 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | picard/config_upgrade.py | 160 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | picard/ui/match_icons.py | 45 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | picard/ui/match_icons.py | 47 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | picard/ui/match_icons.py | 64 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | picard/ui/match_icons.py | 66 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | picard/webservice/ratecontrol.py | 36 | # ============================================================================ | COMMENT |
| MEDIUM | picard/webservice/ratecontrol.py | 38 | # ============================================================================ | COMMENT |
| MEDIUM | test/test_match_icons.py | 32 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | test/test_match_icons.py | 34 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | test/session/conftest.py | 51 | # ============================================================================= | COMMENT |
| MEDIUM | test/session/conftest.py | 53 | # ============================================================================= | COMMENT |
| MEDIUM | test/session/conftest.py | 102 | # ============================================================================= | COMMENT |
| MEDIUM | test/session/conftest.py | 104 | # ============================================================================= | COMMENT |
| MEDIUM | test/session/conftest.py | 142 | # ============================================================================= | COMMENT |
| MEDIUM | test/session/conftest.py | 144 | # ============================================================================= | COMMENT |
| MEDIUM | test/session/conftest.py | 221 | # ============================================================================= | COMMENT |
| MEDIUM | test/session/conftest.py | 223 | # ============================================================================= | COMMENT |
| MEDIUM | test/session/conftest.py | 252 | # ============================================================================= | COMMENT |
| MEDIUM | test/session/conftest.py | 254 | # ============================================================================= | COMMENT |
| MEDIUM | test/session/conftest.py | 309 | # ============================================================================= | COMMENT |
| MEDIUM | test/session/conftest.py | 311 | # ============================================================================= | COMMENT |
| MEDIUM | test/session/conftest.py | 414 | # ============================================================================= | COMMENT |
| MEDIUM | test/session/conftest.py | 416 | # ============================================================================= | COMMENT |
| MEDIUM | test/session/conftest.py | 431 | # ============================================================================= | COMMENT |
| MEDIUM | test/session/conftest.py | 433 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | test/session/test_data.py | 86 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | test/session/test_data.py | 88 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | test/session/test_data.py | 113 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | test/session/test_data.py | 115 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | test/session/test_data.py | 144 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | test/session/test_data.py | 146 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | test/session/test_data.py | 172 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | test/session/test_data.py | 174 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | test/session/test_data.py | 201 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | test/session/test_data.py | 203 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | test/session/test_data.py | 217 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | test/session/test_data.py | 219 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | test/session/test_data.py | 232 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | test/session/test_data.py | 234 | # ============================================================================= | COMMENT |
| MEDIUM | test/session/test_data.py | 40 | # ============================================================================= | COMMENT |
| MEDIUM | test/session/test_data.py | 42 | # ============================================================================= | COMMENT |
| MEDIUM | scripts/test_plugin_redirects.sh | 33 | # ============================================================================= | COMMENT |
| MEDIUM | scripts/test_plugin_redirects.sh | 35 | # ============================================================================= | COMMENT |
| MEDIUM | scripts/test_plugin_redirects.sh | 68 | # ============================================================================= | COMMENT |
| MEDIUM | scripts/test_plugin_redirects.sh | 70 | # ============================================================================= | COMMENT |
| MEDIUM | scripts/test_plugin_redirects.sh | 103 | # ============================================================================= | COMMENT |
| 45 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | picard/tagger.py | 278 | # Initialize these variables early as they are needed for a clean | COMMENT |
| MEDIUM | picard/ui/formattedtextdelegate.py | 96 | # Create a QTextDocument to render the formatted text | COMMENT |
| MEDIUM | picard/ui/formattedtextdelegate.py | 128 | # Create a QTextDocument to render the formatted text | COMMENT |
| MEDIUM | picard/ui/mainwindow/__init__.py | 1955 | # Create a temporary file list which allows changing cover art for all selected files | COMMENT |
| MEDIUM | picard/ui/itemviews/__init__.py | 119 | # Create a layout for each view to include the filter box | COMMENT |
| MEDIUM | picard/ui/itemviews/custom_columns/manager_dialog.py | 458 | # Create a placeholder specification with blank expression | COMMENT |
| MEDIUM | picard/ui/itemviews/custom_columns/storage.py | 269 | # Create a mapping of class name strings to actual classes | COMMENT |
| MEDIUM | picard/ui/statusindicator/unity.py | 73 | # Create the signal message manually. | COMMENT |
| MEDIUM | picard/ui/widgets/scripttextedit.py | 419 | # Initialize dynamic variables from current (possibly empty) script content. | COMMENT |
| MEDIUM | picard/ui/widgets/scripttextedit.py | 507 | # Create a new data object, as modifying the existing one does not | COMMENT |
| MEDIUM | picard/util/textencoding.py | 64 | # This module provides utility functions to enable simplification of latin and punctuation unicode: | COMMENT |
| MEDIUM | picard/profiles/importer.py | 129 | # Create a new profile | COMMENT |
| MEDIUM | picard/plugin3/categories.py | 90 | # Create a list of (key, translated_title) tuples | COMMENT |
| MEDIUM | picard/git/backends/pygit2.py | 454 | # Create a new HEAD that points directly to the commit | COMMENT |
| MEDIUM | picard/session/session_loader.py | 729 | # The following block of methods are retained for scheduling and lifecycle. | COMMENT |
| MEDIUM⚡ | test/test_textencoding.py | 297 | # The following code set blocks are taken from: | COMMENT |
| MEDIUM⚡ | test/test_profile_import.py | 290 | # Create an existing profile with the same title | STRING |
| MEDIUM | test/test_git.py | 206 | # Create a local git repository with tags | COMMENT |
| MEDIUM | test/test_profiles.py | 479 | # Create an option without in_profile | COMMENT |
| MEDIUM⚡ | test/test_custom_columns.py | 286 | # Create an object that will fail obj.column but have metadata | COMMENT |
| MEDIUM⚡ | test/test_itemviews_match_quality.py | 757 | # Create a mock delegate column | COMMENT |
| MEDIUM⚡ | test/test_itemviews_match_quality.py | 761 | # Create a mock item | COMMENT |
| MEDIUM | test/plugins3/test_registry.py | 325 | # Create a fake local plugin directory with .git | COMMENT |
| MEDIUM | test/plugins3/test_plugin.py | 162 | # Create a test git repo | COMMENT |
| MEDIUM | test/plugins3/test_plugin.py | 185 | # Create a test git repo with a tag | COMMENT |
| MEDIUM | test/plugins3/test_plugin.py | 190 | # Create a tag | COMMENT |
| MEDIUM⚡ | test/plugins3/test_git.py | 117 | # Create a tag | COMMENT |
| MEDIUM⚡ | test/plugins3/test_git.py | 126 | # Create a dev branch with different content | COMMENT |
| MEDIUM⚡ | test/plugins3/test_git.py | 150 | # Create a lightweight tag (just a reference, no tag object) | COMMENT |
| MEDIUM | test/plugins3/test_git.py | 280 | # Create a dev branch in source | COMMENT |
| MEDIUM | test/plugins3/test_git.py | 305 | # Create a tag in source | COMMENT |
| MEDIUM | test/plugins3/test_git.py | 441 | # Create a v1.0.0 tag | COMMENT |
| MEDIUM | test/plugins3/test_local_non_git_plugin.py | 169 | # Create a fake .git directory | COMMENT |
| MEDIUM | test/plugins3/test_update.py | 646 | # Create a new commit on main | COMMENT |
| MEDIUM⚡ | test/plugins3/test_api.py | 283 | # Create a temporary config file | COMMENT |
| MEDIUM⚡ | test/plugins3/test_api.py | 288 | # Create a real QSettings instance | COMMENT |
| MEDIUM⚡ | test/plugins3/test_api.py | 477 | # Create a temporary config file | COMMENT |
| MEDIUM⚡ | test/plugins3/test_api.py | 482 | # Create a real QSettings instance | COMMENT |
| MEDIUM | test/plugins3/test_api.py | 245 | # Create a real handler that captures messages | COMMENT |
| MEDIUM | test/plugins3/test_api.py | 308 | # Create a new settings instance to verify persistence | COMMENT |
| MEDIUM⚡ | test/plugins3/test_manager.py | 458 | # Create a mock manifest | COMMENT |
| MEDIUM⚡ | test/plugins3/test_manager.py | 975 | # Create a plugin that will fail to load | COMMENT |
| MEDIUM | test/plugins3/test_manager.py | 133 | # Create a file in temp1 to ensure recursive cleanup | COMMENT |
| MEDIUM | test/plugins3/test_manager.py | 835 | # Create a nested structure with a read-only file, similar to .git pack files | COMMENT |
| MEDIUM | test/plugins3/test_manager.py | 873 | # Create a mock plugin with UUID | COMMENT |
| MEDIUM | test/plugins3/test_cli.py | 194 | # Create a temporary git repository | COMMENT |
| MEDIUM | test/plugins3/test_cli.py | 294 | # Create a real temporary config | COMMENT |
| MEDIUM⚡ | test/plugins3/test_install.py | 323 | # Create a temporary plugin directory and config file | COMMENT |
| MEDIUM⚡ | test/plugins3/test_install.py | 330 | # Create a real temporary config | COMMENT |
| MEDIUM | test/plugins3/test_install.py | 248 | # Create a fake existing plugin directory with UUID-based name | COMMENT |
| MEDIUM | test/plugins3/test_install.py | 286 | # Create a fake existing plugin directory with UUID-based name | COMMENT |
| MEDIUM | test/formats/test_registry.py | 370 | # Create a temp file with MOCK header | COMMENT |
| MEDIUM | test/formats/test_registry.py | 388 | # Create a temp file without MOCK header | COMMENT |
| MEDIUM | test/formats/test_registry.py | 404 | # Create a temp file with MOCK header | COMMENT |
| MEDIUM⚡ | test/formats/test_vorbis.py | 164 | # Create a test file that contains only disctotal / tracktotal, | COMMENT |
| MEDIUM | test/formats/test_id3.py | 308 | # Create a COMM frame with iTunes_CDDB_1 descriptor | COMMENT |
| MEDIUM⚡ | test/script_text_edit/test_script_completer.py | 223 | # Create a custom mock class that handles __bool__ properly | COMMENT |
| MEDIUM⚡ | test/script_text_edit/test_script_completer.py | 499 | # Create a large script with many $set statements | COMMENT |
| MEDIUM⚡ | test/script_text_edit/test_script_completer.py | 549 | # Create a mock function with invalid structure | COMMENT |
| MEDIUM⚡ | test/script_text_edit/test_variable_extractor.py | 278 | # Create a long script with many variables | STRING |
| 18 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | setup.py | 230 | CODE | |
| LOW | picard/config_upgrade_hooks.py | 136 | CODE | |
| LOW | picard/releasegroup.py | 123 | CODE | |
| LOW | picard/config.py | 298 | CODE | |
| LOW | picard/config.py | 610 | CODE | |
| LOW | picard/metadata.py | 126 | CODE | |
| LOW | picard/metadata.py | 163 | CODE | |
| LOW | picard/track.py | 414 | CODE | |
| LOW | picard/profile.py | 158 | CODE | |
| LOW | picard/album.py | 277 | CODE | |
| LOW | picard/album.py | 545 | CODE | |
| LOW | picard/album.py | 767 | CODE | |
| LOW | picard/album.py | 833 | CODE | |
| LOW | picard/album.py | 989 | CODE | |
| LOW | picard/album.py | 1106 | CODE | |
| LOW | picard/matching.py | 212 | CODE | |
| LOW | picard/matching.py | 530 | CODE | |
| LOW | picard/matching.py | 598 | CODE | |
| LOW | picard/matching.py | 654 | CODE | |
| LOW | picard/mbjson.py | 222 | CODE | |
| LOW | picard/mbjson.py | 794 | CODE | |
| LOW | picard/mbjson.py | 810 | CODE | |
| LOW | picard/mbjson.py | 885 | CODE | |
| LOW | picard/mbjson.py | 906 | CODE | |
| LOW | picard/mbjson.py | 951 | CODE | |
| LOW | picard/file.py | 797 | CODE | |
| LOW | picard/file.py | 931 | CODE | |
| LOW | picard/file.py | 1087 | CODE | |
| LOW | picard/tagger.py | 514 | CODE | |
| LOW | picard/tagger.py | 903 | CODE | |
| LOW | picard/tagger.py | 985 | CODE | |
| LOW | picard/tagger.py | 1052 | CODE | |
| LOW | picard/tagger.py | 1263 | CODE | |
| LOW | picard/cluster.py | 279 | CODE | |
| LOW | picard/cluster.py | 352 | CODE | |
| LOW | picard/config_upgrade.py | 206 | CODE | |
| LOW | picard/isrcsubmit.py | 257 | CODE | |
| LOW | picard/ui/playground.py | 160 | CODE | |
| LOW | picard/ui/util.py | 291 | CODE | |
| LOW | picard/ui/util.py | 135 | CODE | |
| LOW | picard/ui/theme_detect.py | 73 | CODE | |
| LOW | picard/ui/theme_detect.py | 114 | CODE | |
| LOW | picard/ui/tagsfromfilenames.py | 52 | CODE | |
| LOW | picard/ui/scriptsmenu.py | 75 | CODE | |
| LOW | picard/ui/isrcsubmitdialog.py | 37 | CODE | |
| LOW | picard/ui/options/plugins.py | 188 | CODE | |
| LOW | picard/ui/options/dialog.py | 208 | CODE | |
| LOW | picard/ui/options/dialog.py | 540 | CODE | |
| LOW | picard/ui/options/dialog.py | 592 | CODE | |
| LOW | picard/ui/options/dialog.py | 700 | CODE | |
| LOW | picard/ui/options/dialog.py | 1113 | CODE | |
| LOW | picard/ui/options/interface_quick_menu.py | 78 | CODE | |
| LOW | picard/ui/options/interface_quick_menu.py | 134 | CODE | |
| LOW | picard/ui/options/profiles.py | 256 | CODE | |
| LOW | picard/ui/options/profiles.py | 496 | CODE | |
| LOW | picard/ui/options/profiles.py | 664 | CODE | |
| LOW | picard/ui/options/profiles.py | 858 | CODE | |
| LOW | picard/ui/options/interface_toolbar.py | 230 | CODE | |
| LOW | picard/ui/mainwindow/__init__.py | 734 | CODE | |
| LOW | picard/ui/mainwindow/__init__.py | 1434 | CODE | |
| 199 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | picard/config.py | 290 | except Exception as why: | CODE |
| LOW | picard/track.py | 513 | except Exception: | CODE |
| LOW | picard/album.py | 582 | except Exception: | CODE |
| MEDIUM | picard/file.py | 211 | def _fast_hash(self): | CODE |
| LOW | picard/file.py | 198 | except Exception as e: | CODE |
| LOW | picard/file.py | 203 | except Exception as e: | CODE |
| LOW | picard/file.py | 218 | except Exception as e: | CODE |
| LOW | picard/tagger.py | 1370 | except Exception: | CODE |
| LOW | picard/tagger.py | 1432 | except Exception as e: | CODE |
| LOW | picard/oauth.py | 199 | except Exception as e: | CODE |
| LOW | picard/oauth.py | 328 | except Exception as e: | CODE |
| LOW | picard/oauth.py | 368 | except Exception as e: | CODE |
| LOW | picard/oauth.py | 396 | except Exception as e: | CODE |
| LOW | picard/ui/theme_detect_qtdbus.py | 57 | except Exception: # noqa: BLE001 | CODE |
| LOW | picard/ui/options/plugins.py | 222 | except Exception as e: | CODE |
| LOW | picard/ui/options/plugins.py | 260 | except Exception as e: | CODE |
| LOW | picard/ui/options/plugins.py | 375 | except Exception as e: | CODE |
| MEDIUM | picard/ui/options/plugins.py | 232 | def on_registry_refreshed(success, error): | CODE |
| LOW⚡ | picard/ui/options/dialog.py | 684 | except Exception as e: | CODE |
| LOW | picard/ui/options/dialog.py | 488 | except Exception: | CODE |
| LOW | picard/ui/options/dialog.py | 871 | except Exception as e: | CODE |
| LOW | picard/ui/options/dialog.py | 881 | except Exception as e: | CODE |
| LOW | picard/ui/options/dialog.py | 897 | except Exception as e: | CODE |
| LOW | picard/ui/options/dialog.py | 940 | except Exception as e: | CODE |
| LOW | picard/ui/options/scripting.py | 280 | except Exception as e: | CODE |
| LOW⚡ | picard/ui/mainwindow/__init__.py | 2382 | except Exception as ex: | CODE |
| LOW | picard/ui/itemviews/basetreeview.py | 373 | except Exception: | CODE |
| LOW | picard/ui/itemviews/custom_columns/registry.py | 130 | except Exception: | CODE |
| LOW | picard/ui/itemviews/custom_columns/registry.py | 173 | except Exception: | CODE |
| LOW | picard/ui/searchdialog/album.py | 328 | except Exception as e: | CODE |
| LOW | picard/ui/scripteditor/__init__.py | 1000 | except Exception as e: | CODE |
| LOW | picard/ui/metadatabox/__init__.py | 507 | except Exception as e: | CODE |
| LOW⚡ | picard/ui/metadatabox/__init__.py | 647 | except Exception: | CODE |
| LOW⚡ | picard/ui/metadatabox/__init__.py | 654 | except Exception: | CODE |
| MEDIUM | picard/ui/metadatabox/__init__.py | 539 | def _paste_from_json(self, mimedata): | CODE |
| LOW | picard/ui/statusindicator/__init__.py | 85 | except Exception as err: | CODE |
| LOW | picard/ui/statusindicator/__init__.py | 94 | except Exception as err: | CODE |
| LOW | picard/ui/statusindicator/windows.py | 54 | except Exception as err: | CODE |
| LOW | picard/ui/dialogs/installconfirm.py | 174 | except Exception: | CODE |
| LOW | picard/ui/dialogs/installconfirm.py | 191 | except Exception: | CODE |
| LOW | picard/ui/dialogs/installplugin.py | 346 | except Exception as e: | CODE |
| LOW | picard/ui/dialogs/installplugin.py | 439 | except Exception as e: | CODE |
| LOW | picard/ui/dialogs/installplugin.py | 508 | except Exception as e: | CODE |
| LOW | picard/ui/dialogs/installplugin.py | 544 | except Exception as e: | CODE |
| LOW | picard/ui/dialogs/plugininfo.py | 240 | except Exception: | CODE |
| LOW | picard/ui/widgets/pluginlistwidget.py | 293 | except Exception: | CODE |
| LOW | picard/ui/widgets/pluginlistwidget.py | 336 | except Exception: | CODE |
| LOW | picard/ui/widgets/pluginlistwidget.py | 511 | except Exception as e: | CODE |
| LOW | picard/ui/widgets/pluginlistwidget.py | 697 | except Exception as e: | CODE |
| LOW | picard/ui/widgets/pluginlistwidget.py | 808 | except Exception: | CODE |
| LOW | picard/ui/widgets/pluginlistwidget.py | 820 | except Exception as e: | CODE |
| LOW | picard/ui/widgets/pluginlistwidget.py | 1033 | except Exception as e: | CODE |
| LOW | picard/ui/widgets/plugindetailswidget.py | 158 | except Exception: | CODE |
| LOW | picard/ui/widgets/plugindetailswidget.py | 278 | except Exception: | CODE |
| LOW | picard/ui/widgets/plugindetailswidget.py | 365 | except Exception as e: | CODE |
| LOW | picard/ui/player/__init__.py | 101 | except Exception as err: | CODE |
| LOW | picard/formats/registry.py | 127 | except Exception as e: | CODE |
| LOW | picard/formats/registry.py | 163 | except Exception as e: | CODE |
| LOW | picard/util/thread.py | 180 | except Exception: | CODE |
| MEDIUM | picard/util/thread.py | 112 | def run(self): | CODE |
| 128 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | picard/metadata.py | 60 | CODE | |
| LOW | picard/metadata.py | 61 | CODE | |
| LOW | picard/metadata.py | 62 | CODE | |
| LOW | picard/track.py | 96 | CODE | |
| LOW | picard/profile.py | 40 | CODE | |
| LOW | picard/matching.py | 64 | CODE | |
| LOW | picard/mbjson.py | 31 | CODE | |
| LOW | picard/mbjson.py | 65 | CODE | |
| LOW | picard/mbjson.py | 66 | CODE | |
| LOW | picard/mbjson.py | 68 | CODE | |
| LOW | picard/mbjson.py | 69 | CODE | |
| LOW | picard/file.py | 126 | CODE | |
| LOW | picard/file.py | 128 | CODE | |
| LOW | picard/file.py | 129 | CODE | |
| LOW | picard/tagger.py | 196 | CODE | |
| LOW | picard/cluster.py | 76 | CODE | |
| LOW | picard/config_upgrade.py | 329 | CODE | |
| LOW | picard/config_upgrade.py | 403 | CODE | |
| LOW | picard/item.py | 54 | CODE | |
| LOW | picard/item.py | 56 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 81 | CODE | |
| LOW | picard/ui/options/dialog.py | 121 | CODE | |
| LOW | picard/ui/itemviews/custom_columns/resolve.py | 27 | CODE | |
| LOW | picard/ui/itemviews/custom_columns/__init__.py | 23 | CODE | |
| LOW | picard/ui/itemviews/custom_columns/__init__.py | 23 | CODE | |
| LOW | picard/ui/itemviews/custom_columns/__init__.py | 23 | CODE | |
| LOW | picard/ui/itemviews/custom_columns/__init__.py | 28 | CODE | |
| LOW | picard/ui/itemviews/custom_columns/__init__.py | 28 | CODE | |
| 170 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | picard/ui/coverartbox/coverartthumbnail.py | 148 | log.debug("Dropped %s url (with %d bytes of data)", url.toString(), len(dropped_data or '')) | CODE |
| HIGH | picard/ui/coverartbox/__init__.py | 310 | log.debug('Fetched remote image with MIME-Type %s from %s', mime, url.toString()) | CODE |
| HIGH | picard/ui/coverartbox/__init__.py | 325 | log.debug('Possible Google images result, trying to fetch imgurl=%s', url.toString()) | CODE |
| HIGH | picard/ui/coverartbox/__init__.py | 330 | log.debug('Possible Bing images result, trying to fetch imgurl=%s', url.toString()) | CODE |
| HIGH | picard/ui/coverartbox/__init__.py | 354 | log.debug("Trying URL parsed from HTML: %s", url.toString()) | CODE |
| HIGH | picard/ui/coverartbox/__init__.py | 365 | coverartimage = CoverArtImage(url=url.toString(), types=['front'], data=data) | CODE |
| HIGH | picard/coverart/image.py | 265 | return "%s: %s" % (self.sourceprefix, self.url.toString()) | CODE |
| HIGH | picard/coverart/image.py | 305 | yield "url=%r" % self.url.toString() | CODE |
| HIGH | picard/coverart/image.py | 320 | yield "from %s" % self.url.toString() | CODE |
| HIGH | picard/util/__init__.py | 543 | run_executable('xdg-open', url.toString()) | CODE |
| HIGH | picard/util/mbserver.py | 75 | return url.toString() | CODE |
| HIGH | picard/webservice/__init__.py | 890 | log.debug("Retrying without authentication: %s", url.toString()) | CODE |
| HIGH | picard/webservice/__init__.py | 893 | log.debug("Cannot retry without authentication: %s", url.toString()) | CODE |
| HIGH | picard/plugin3/cli.py | 2091 | commit_cmd = 'git add -A && git commit -m "Initial plugin scaffold"' | CODE |
| HIGH | test/test_coverart_image.py | 529 | self.assertEqual(image.url.toString(), 'file://' + path) | CODE |
| HIGH⚡ | test/test_log.py | 80 | self.item_queue.push(MockLogItem(i)) | CODE |
| HIGH⚡ | test/test_log.py | 89 | self.item_queue.push(MockLogItem(i)) | CODE |
| HIGH⚡ | test/test_log.py | 98 | self.item_queue.push(MockLogItem(i)) | CODE |
| HIGH⚡ | test/test_log.py | 104 | self.item_queue.push(MockLogItem(10)) | CODE |
| HIGH⚡ | test/test_log.py | 124 | self.item_queue.push(MockLogItem(4)) | CODE |
| HIGH⚡ | test/test_log.py | 125 | self.item_queue.push(MockLogItem(5)) | CODE |
| HIGH⚡ | test/test_log.py | 126 | self.item_queue.push(MockLogItem(11)) | CODE |
| HIGH | test/test_webservice_api_helpers_musicbrainz.py | 59 | self.assertTrue(url.toString().startswith("https://mb.org/")) | CODE |
| HIGH⚡ | test/plugins3/test_registry.py | 554 | url_str = url.toString() | CODE |
| HIGH | test/plugins3/test_registry.py | 586 | calls.append(url.toString()) | CODE |
| HIGH | test/plugins3/test_registry.py | 613 | calls.append(url.toString()) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | picard/config.py | 584 | # Check if there is a config file specifically for this version | COMMENT |
| LOW | picard/isrcsubmit.py | 273 | # Check if the ISRC is already assigned to another track on this release | COMMENT |
| LOW | picard/ui/filter.py | 136 | # Check if selected filters were removed and re-apply the filter | COMMENT |
| LOW | picard/ui/options/plugins.py | 201 | # Check if the update is still valid (current commit == old_commit from update info) | COMMENT |
| LOW | picard/ui/options/dialog.py | 212 | # Check if this is a plugin option page and if the plugin is enabled | COMMENT |
| LOW | picard/ui/options/dialog.py | 623 | # Check if value actually differs from base | COMMENT |
| LOW | picard/ui/options/dialog.py | 1104 | # Check if any other enabled profile has it | COMMENT |
| LOW | picard/ui/options/profiles.py | 683 | # Check if the file contains a profile UUID that already exists in the dialog | COMMENT |
| LOW⚡ | picard/ui/mainwindow/__init__.py | 2380 | action.setParent(self.plugin_tools_menu) # Set parent to keep action alive | CODE |
| LOW | picard/ui/itemviews/basetreeview.py | 371 | action.setParent(action_menu) # Set parent to keep action alive | CODE |
| LOW | picard/ui/itemviews/custom_columns/registry.py | 149 | # Check if this widget uses our target columns | COMMENT |
| LOW | picard/ui/itemviews/custom_columns/validation.py | 211 | # Check if key already exists in context | COMMENT |
| LOW | picard/ui/infodialog/dialog.py | 172 | # Check if this object contains the tribute track | COMMENT |
| LOW | picard/ui/infodialog/dialog.py | 373 | # Check if this function isn't triggered by cell in Type column | COMMENT |
| LOW | picard/ui/widgets/context_detector.py | 130 | # Check if there's a complete variable before the %% | COMMENT |
| LOW | picard/ui/widgets/context_detector.py | 158 | # Check if we're in the first argument (no comma yet) and not closed | COMMENT |
| LOW⚡ | picard/ui/widgets/context_detector.py | 219 | # Check if it's a valid partial function name (alphanumeric/underscore characters) | COMMENT |
| LOW⚡ | picard/ui/widgets/context_detector.py | 235 | # Check if it's a valid partial variable name (alphanumeric/underscore characters) | COMMENT |
| LOW | picard/ui/widgets/pluginlistwidget.py | 342 | # Check if user has previously unchecked this plugin | COMMENT |
| LOW | picard/ui/widgets/scripttextedit.py | 255 | # Check if user scripts have changed and rescan if needed | COMMENT |
| LOW | picard/ui/widgets/scripttextedit.py | 571 | # Check if this is a tag-name function | COMMENT |
| LOW | picard/ui/widgets/scripttextedit.py | 695 | # Check if we should show the popup based on current context | COMMENT |
| LOW | picard/ui/widgets/plugindetailswidget.py | 304 | # Check if plugin is in do_not_update list and ask for confirmation | COMMENT |
| LOW | picard/ui/widgets/plugindetailswidget.py | 344 | # Check if parent has a plugin_list attribute | COMMENT |
| LOW | picard/formats/registry.py | 152 | # Read file header for format detection | COMMENT |
| LOW | picard/util/checkupdate.py | 131 | # Display results to user. | COMMENT |
| LOW⚡ | picard/extension_points/__init__.py | 125 | # Check if any enabled UUID maps to this module name | COMMENT |
| LOW | picard/webservice/__init__.py | 539 | # Check if task was aborted before starting | COMMENT |
| LOW | picard/plugin3/plugin_metadata.py | 369 | # Check if current commit matches a tag (prefer tag over branch) | COMMENT |
| LOW⚡ | picard/plugin3/cli.py | 844 | # Check if already installed first (unless reinstalling) | COMMENT |
| LOW⚡ | picard/plugin3/cli.py | 846 | # Check if any loaded plugin has this URL | COMMENT |
| LOW | picard/plugin3/cli.py | 428 | # Check if local non-git plugin | COMMENT |
| LOW | picard/plugin3/cli.py | 623 | # Check if this is a local non-git plugin | COMMENT |
| LOW | picard/plugin3/cli.py | 773 | # Check if it's a plugin ID (no slashes, no protocol) | COMMENT |
| LOW | picard/plugin3/cli.py | 827 | # Check if this URL is in the registry (possibly via redirect_from) | COMMENT |
| LOW | picard/plugin3/cli.py | 940 | # Check if installing from dirty local git repository | COMMENT |
| LOW | picard/plugin3/cli.py | 998 | # Check if this is a failed plugin (no manifest) | COMMENT |
| LOW | picard/plugin3/cli.py | 1331 | # Check if plugin config exists | COMMENT |
| LOW | picard/plugin3/cli.py | 1385 | # Check if it's a failed plugin directory name | COMMENT |
| LOW | picard/plugin3/cli.py | 1402 | # Check if url is a local directory | COMMENT |
| LOW | picard/plugin3/cli.py | 2104 | # Check if it's an installed plugin | COMMENT |
| LOW | picard/plugin3/cli.py | 2114 | # Check if it's a local directory | COMMENT |
| LOW | picard/plugin3/plugin.py | 265 | # Check if it's a repository-level 404/not found error (not branch-level) | COMMENT |
| LOW | picard/plugin3/plugin.py | 407 | # Check if currently on a tag | COMMENT |
| LOW | picard/plugin3/plugin.py | 442 | # Set resolved_ref_type to indicate this is a tag | COMMENT |
| LOW | picard/plugin3/plugin.py | 720 | # Check if there's an existing API instance (from UI components) | COMMENT |
| LOW | picard/plugin3/manager/update.py | 182 | # Check if plugin is blacklisted (by current or redirected URL/UUID) | COMMENT |
| LOW | picard/plugin3/manager/update.py | 187 | # Check if plugin has versioning_scheme and current ref is a version tag | COMMENT |
| LOW | picard/plugin3/manager/__init__.py | 273 | # Check if we have an installed plugin for this URL to reuse its repository | COMMENT |
| LOW⚡ | picard/plugin3/manager/lifecycle.py | 338 | # Check if plugin is from registry (has known git URL) | COMMENT |
| LOW | picard/plugin3/manager/install.py | 92 | # Check if url is a local directory (git or plain) | COMMENT |
| LOW | picard/plugin3/manager/install.py | 231 | # Check if already installed from this path | COMMENT |
| LOW | picard/git/ops.py | 157 | # Check if ref exists in remote | COMMENT |
| LOW | picard/git/ops.py | 341 | # Check if we're switching to a remote branch | COMMENT |
| LOW | picard/git/utils.py | 45 | # Check if it's a local path (not a remote protocol) | COMMENT |
| LOW | picard/git/backends/pygit2.py | 208 | # Check if there's a ^{} version | COMMENT |
| LOW | picard/git/backends/pygit2.py | 263 | # Check if it's an annotated tag and dereference to commit | COMMENT |
| LOW | picard/git/backends/pygit2.py | 472 | # Check if we can use an existing repository | COMMENT |
| LOW | picard/session/session_exporter.py | 312 | # Check if this album has any files matched to it | COMMENT |
| LOW | test/test_theme.py | 402 | # Set config to SYSTEM | COMMENT |
| 20 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | picard/config.py | 305 | Register an option in this config section. The option type is determined by the type of the default value. | STRING |
| HIGH | picard/config.py | 457 | Register an option in this config section. Extends the base class method with profile support. Args: | STRING |
| HIGH | picard/log.py | 281 | Log a debug message only if the specified debug option is enabled. Can also be used as a guard that returns a calla | STRING |
| HIGH | picard/util/emptydir.py | 50 | Checks if a directory is considered empty. Args: path: Path to directory to check. ignored_fil | STRING |
| HIGH | picard/util/checkupdate.py | 58 | Checks if an update is available. Compares the version number of the currently running instance of Picard | STRING |
| HIGH | picard/util/__init__.py | 1106 | Parses a string and interprets it as a matching pattern. - If pattern is of the form /pattern/flags it is interpret | STRING |
| HIGH | picard/util/__init__.py | 1353 | Converts text to title case following word boundary rules. Capitalizes the first character of each word in the inpu | STRING |
| HIGH | picard/profiles/importer.py | 78 | Import a profile from a TOML string. Args: config: The application Config object. toml_string: The | STRING |
| HIGH | picard/plugin3/api_impl.py | 224 | Log a debug message only if the specified debug option is enabled. Can also be used as a guard that returns a c | STRING |
| HIGH | picard/plugin3/validation.py | 48 | Read MANIFEST.toml from path and validate it. Args: path: Directory path containing MANIFEST.toml | STRING |
| HIGH | picard/plugin3/validation.py | 76 | Get plugin UUID, raising PluginNoUUIDError if not available. Args: plugin: Plugin object R | STRING |
| HIGH | picard/git/ops.py | 61 | Check if git working directory has uncommitted changes. Args: path: Path to git repository | STRING |
| HIGH | picard/git/ops.py | 108 | Validate that a ref exists in the repository. Args: url: Git repository URL ref: Git re | STRING |
| HIGH | picard/git/ops.py | 214 | Switch plugin to a different git ref (branch/tag/commit). Args: plugin: Plugin to switch | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | picard/formats/apev2.py | 0 | remove the tags from the file that were deleted in the ui | STRING |
| HIGH | picard/formats/vorbis.py | 0 | remove the tags from the file that were deleted in the ui | STRING |
| HIGH | picard/formats/mp4.py | 0 | remove the tags from the file that were deleted in the ui | STRING |
| HIGH | picard/formats/asf.py | 0 | remove the tags from the file that were deleted in the ui | STRING |
| HIGH | test/script_text_edit/test_script_completer.py | 0 | $set(_leading_underscore, "value") $set(trailing_underscore_, "value") $set(_both_underscores_, "value") $set(multiple__ | STRING |
| HIGH | test/script_text_edit/test_regex_fallback.py | 0 | $set(_leading_underscore, "value") $set(trailing_underscore_, "value") $set(_both_underscores_, "value") $set(multiple__ | STRING |
| HIGH | test/script_text_edit/test_ast_parsing.py | 0 | $set(_leading_underscore, "value") $set(trailing_underscore_, "value") $set(_both_underscores_, "value") $set(multiple__ | STRING |
| HIGH | test/script_text_edit/test_script_completer.py | 0 | test regex behavior with %variable% syntax in $set statements. | STRING |
| HIGH | test/script_text_edit/test_ast_parsing.py | 0 | test regex behavior with %variable% syntax in $set statements. | STRING |
| HIGH | test/script_text_edit/test_regex_fallback.py | 0 | test regex behavior with %variable% syntax in $set statements. | STRING |
| HIGH | test/script_text_edit/test_script_completer.py | 0 | $set(%variable%, "value") $set(%artist%, "value") $set(regular_var, "value") | STRING |
| HIGH | test/script_text_edit/test_regex_fallback.py | 0 | $set(%variable%, "value") $set(%artist%, "value") $set(regular_var, "value") | STRING |
| HIGH | test/script_text_edit/test_ast_parsing.py | 0 | $set(%variable%, "value") $set(%artist%, "value") $set(regular_var, "value") | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | picard/log.py | 79 | def set_verbosity(level: int) -> None: | CODE |
| LOW | picard/isrcsubmit.py | 109 | def _update_entry(self, file, recording_id: str, new_isrcs: set[NormalizedISRC]) -> None: | CODE |
| LOW | picard/ui/playground.py | 89 | def set_description(self, description: str, match_meaning: str, skip_meaning: str) -> None: | CODE |
| LOW | picard/ui/playground.py | 113 | def set_error(self, message: str) -> None: | CODE |
| LOW | picard/ui/theme.py | 148 | def set_color_scheme(color_scheme: QtCore.Qt.ColorScheme) -> None: | CODE |
| LOW | picard/ui/__init__.py | 291 | def set_window_title(self, title: str) -> None: | CODE |
| LOW | picard/ui/setupwizard.py | 105 | def set_checked(self, checked: bool) -> None: | STRING |
| LOW | picard/ui/setupwizard.py | 242 | def _update_move_to_state(self, checked: bool) -> None: | CODE |
| LOW | picard/ui/options/dialog.py | 1181 | def _update_profile_markers(self, pkey: str) -> None: | CODE |
| LOW | picard/ui/mainwindow/__init__.py | 2343 | def _set_profile_enabled(self, profile_id: str, enabled: bool) -> None: | CODE |
| LOW | picard/ui/itemviews/custom_columns/view_selector.py | 69 | def set_selected(self, view_ids: set[str]) -> None: | CODE |
| LOW | picard/ui/itemviews/custom_columns/manager_dialog.py | 631 | def _update_apply(self) -> None: | CODE |
| LOW | picard/ui/itemviews/custom_columns/manager_dialog.py | 642 | def _update_form_actions(self) -> None: | CODE |
| LOW | picard/ui/itemviews/custom_columns/spec_list_model.py | 110 | def set_specs(self, specs: list[CustomColumnSpec]) -> None: | CODE |
| LOW | picard/ui/itemviews/custom_columns/spec_list_model.py | 140 | def update_spec(self, row: int, spec: CustomColumnSpec) -> None: | CODE |
| LOW | picard/ui/itemviews/custom_columns/__init__.py | 59 | __all__ = [ | CODE |
| LOW | …ard/ui/itemviews/custom_columns/column_form_handler.py | 85 | def set_enabled(self, enabled: bool) -> None: | CODE |
| LOW | picard/ui/itemviews/custom_columns/column.py | 224 | def set_header_icon_size(self, width: int, height: int, border: int) -> None: | CODE |
| LOW | picard/ui/widgets/preferencelistwidget.py | 65 | def _setup_ui(self) -> None: | CODE |
| LOW | picard/ui/widgets/preferencelistwidget.py | 118 | def set_available_items(self, items: dict[str, str]) -> None: | CODE |
| LOW | picard/ui/widgets/preferencelistwidget.py | 123 | def set_selected_keys(self, keys: list[str]) -> None: | CODE |
| LOW | picard/ui/widgets/preferencelistwidget.py | 149 | def set_excluded_keys(self, keys: set[str]) -> None: | CODE |
| LOW | picard/ui/widgets/preferencelistwidget.py | 241 | def _update_buttons(self) -> None: | CODE |
| LOW | picard/ui/widgets/scripttextedit.py | 728 | def _update_completion_context(self, text_cursor: QTextCursor) -> None: | CODE |
| LOW | picard/formats/__init__.py | 63 | __all__ = [ | CODE |
| LOW | picard/coverart/image.py | 373 | def set_data(self, data: bytes) -> None: | CODE |
| LOW | picard/coverart/image.py | 397 | def set_external_file_data(self, data: bytes) -> None: | CODE |
| LOW⚡ | picard/extension_points/__init__.py | 140 | def set_plugin_uuid(uuid: str, module_name: str) -> None: | CODE |
| LOW | picard/webservice/api_helpers/__init__.py | 30 | __all__ = [ | CODE |
| LOW | picard/i18n/__init__.py | 44 | __all__ = [ | CODE |
| LOW | picard/plugin3/__init__.py | 29 | __all__ = [ | CODE |
| LOW | picard/plugin3/api.py | 46 | __all__ = [ | CODE |
| LOW | picard/plugin3/asyncops/__init__.py | 41 | __all__ = [ | CODE |
| LOW | picard/git/__init__.py | 44 | __all__ = [ | CODE |
| LOW | picard/session/session_loader.py | 357 | def set_expansions() -> None: | CODE |
| LOW | test/test_coverart_details_option.py | 110 | def update_display(self, force: bool = False) -> None: | CODE |
| LOW | test/test_coverartbox_info.py | 118 | def update_display(self, force: bool = False) -> None: | CODE |
| LOW | test/script_text_edit/test_scripttextedit_highlight.py | 80 | def set_items(self, items: Iterable[str]) -> None: | CODE |
| LOW | test/script_text_edit/test_scripttextedit_highlight.py | 147 | def set_highlighted(self, text: str) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | test/script_text_edit/test_context_aware_completion.py | 551 | # Step 1: Function name context | COMMENT |
| LOW⚡ | test/script_text_edit/test_context_aware_completion.py | 556 | # Step 2: Tag name argument context | COMMENT |
| LOW⚡ | test/script_text_edit/test_context_aware_completion.py | 568 | # Step 1: Variable context | COMMENT |
| LOW⚡ | test/script_text_edit/test_context_aware_completion.py | 574 | # Step 2: Partial variable context | COMMENT |
| LOW⚡ | test/script_text_edit/test_context_detector.py | 342 | # Step 1: Function name context | COMMENT |
| LOW⚡ | test/script_text_edit/test_context_detector.py | 345 | # Step 2: Tag name argument context | COMMENT |
| LOW⚡ | test/script_text_edit/test_context_detector.py | 350 | # Step 1: Variable context | COMMENT |
| LOW⚡ | test/script_text_edit/test_context_detector.py | 353 | # Step 2: Partial variable context | COMMENT |
| LOW | docs/PLUGINSV3/MIGRATION.md | 120 | ### Step 1: Run Migration Tool | COMMENT |
| LOW | docs/PLUGINSV3/MIGRATION.md | 144 | ### Step 2: Create MANIFEST.toml | COMMENT |
| LOW | docs/PLUGINSV3/MIGRATION.md | 185 | ### Step 2: Review Generated Code | COMMENT |
| LOW | docs/PLUGINSV3/MIGRATION.md | 195 | ### Step 3: Create Git Repository | COMMENT |
| LOW | docs/PLUGINSV3/MIGRATION.md | 345 | ### Step 1: Create MANIFEST.toml | COMMENT |
| LOW | docs/PLUGINSV3/MIGRATION.md | 357 | ### Step 5: Update Qt Imports | COMMENT |
| LOW | docs/PLUGINSV3/MIGRATION.md | 378 | ### Step 6: Add Translations (Work in Progress) | COMMENT |
| LOW | docs/PLUGINSV3/MIGRATION.md | 382 | ### Step 7: Update Configuration | COMMENT |
| LOW | scripts/eval_matching/SYNTHETIC_SCENARIOS.md | 51 | ### Step 1: Define the releases | COMMENT |
| LOW | scripts/eval_matching/SYNTHETIC_SCENARIOS.md | 97 | ### Step 2: Define the recordings (candidates) | COMMENT |
| LOW | scripts/eval_matching/SYNTHETIC_SCENARIOS.md | 143 | ### Step 3: Define the scenarios (test cases) | COMMENT |
| LOW | scripts/eval_matching/SYNTHETIC_SCENARIOS.md | 173 | ### Step 4: Run and verify | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | picard/ui/tablebaseddialog.py | 124 | # We need to check if the visual index is valid before converting | COMMENT |
| LOW | picard/ui/widgets/context_detector.py | 124 | # If it ends with %%, we need to check if it's a literal %% or a new variable | COMMENT |
| LOW | picard/util/filenaming.py | 86 | # before returning, we need to check if we didn't cut in the middle | COMMENT |
| LOW⚡ | test/script_text_edit/test_context_aware_completion.py | 551 | # Step 1: Function name context | COMMENT |
| LOW⚡ | test/script_text_edit/test_context_aware_completion.py | 556 | # Step 2: Tag name argument context | COMMENT |
| LOW⚡ | test/script_text_edit/test_context_aware_completion.py | 568 | # Step 1: Variable context | COMMENT |
| LOW⚡ | test/script_text_edit/test_context_aware_completion.py | 574 | # Step 2: Partial variable context | COMMENT |
| LOW⚡ | test/script_text_edit/test_context_detector.py | 342 | # Step 1: Function name context | COMMENT |
| LOW⚡ | test/script_text_edit/test_context_detector.py | 345 | # Step 2: Tag name argument context | COMMENT |
| LOW⚡ | test/script_text_edit/test_context_detector.py | 350 | # Step 1: Variable context | COMMENT |
| LOW⚡ | test/script_text_edit/test_context_detector.py | 353 | # Step 2: Partial variable context | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | picard/ui/metadatabox/__init__.py | 104 | DiffColors = namedtuple('DiffColors', ('text', 'placeholder', 'removed_bg', 'added_bg')) | CODE |
| LOW | picard/plugin3/init_templates.py | 323 | author: Author string, e.g. "Jane Doe" or "Jane Doe <jane@example.com>" | STRING |
| LOW⚡ | test/plugins3/test_cli.py | 1220 | MockPluginManager(), verb='init', name='Test', target_dir=str(target), author='Jane Doe' | CODE |
| LOW⚡ | test/plugins3/test_cli.py | 1224 | self.assertIn('authors = ["Jane Doe"]', manifest) | CODE |
| LOW⚡ | test/plugins3/test_cli.py | 1234 | self.assertIn('authors = ["Jane Doe"]', manifest) | CODE |
| LOW⚡ | test/plugins3/test_cli.py | 1618 | MockPluginManager(), verb='init', name='Test', target_dir=str(target), author='Jane Doe' | CODE |
| LOW⚡ | test/plugins3/test_cli.py | 1624 | self.assertEqual(author_name, 'Jane Doe') | CODE |
| LOW⚡ | test/formats/test_id3_load.py | 191 | frame.email = 'user@example.com' | CODE |
| LOW⚡ | test/formats/test_id3_load.py | 194 | config_params = {'rating_user_email': 'user@example.com', 'rating_steps': 5} | CODE |
| LOW⚡ | test/formats/test_id3_load.py | 201 | config_params = {'rating_user_email': 'user@example.com', 'rating_steps': 10} | CODE |
| LOW | test/data/testplugins3/registry.toml | 90 | "John Doe", | CODE |
| LOW | test/data/testplugins3/registry.toml | 109 | "Jane Doe", | CODE |
| LOW | docs/PLUGINSV3/CLI.md | 1148 | picard-cli plugins init "My Cool Plugin" --author "Jane Doe" --category metadata | STRING |
| LOW | docs/PLUGINSV3/MIGRATION.md | 149 | PLUGIN_AUTHOR = "John Doe" | CODE |
| LOW | docs/PLUGINSV3/MIGRATION.md | 163 | authors = ["John Doe"] | CODE |
| LOW | docs/PLUGINSV3/MIGRATION.md | 421 | PLUGIN_AUTHOR = "John Doe" | CODE |
| LOW | docs/PLUGINSV3/MIGRATION.md | 479 | authors = ["John Doe"] | CODE |
| LOW | docs/PLUGINSV3/MANIFEST.md | 81 | | `authors` | array | Plugin author/contributor names | `["John Doe", "Jane Smith"]` | | CODE |
| LOW | docs/PLUGINSV3/MANIFEST.md | 82 | | `maintainers` | array | Plugin maintainer names | `["John Doe"]` | | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | picard/tagger.py | 884 | # We should just return True here, except that seems to | COMMENT |
| LOW | picard/ui/itemviews/__init__.py | 428 | # Delegate columns are handled by delegate, just set size hint | COMMENT |
| MEDIUM | picard/ui/itemviews/match_quality_column.py | 86 | """Get comprehensive match statistics for the given object. | STRING |
| MEDIUM | picard/ui/widgets/plugindetailswidget.py | 209 | # Always enable description button since PluginInfoDialog shows comprehensive info | COMMENT |
| MEDIUM | picard/util/textencoding.py | 62 | # These are non-trivial, and the software to do these is far from comprehensive. | COMMENT |
| MEDIUM | picard/plugin3/plugin.py | 199 | """Check if current ref is a tag using robust type detection.""" | STRING |
| MEDIUM | picard/plugin3/plugin.py | 411 | # Use robust reference type detection | COMMENT |
| MEDIUM | picard/git/ref_utils.py | 21 | """Git reference utilities for robust reference type detection.""" | STRING |
| LOW⚡ | test/plugins3/test_registry.py | 660 | # Should not raise, just return False (not blacklisted) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | picard/ui/itemviews/custom_columns/factory.py | 273 | CODE | |
| LOW | picard/ui/itemviews/custom_columns/column.py | 112 | CODE | |
| LOW | picard/coverart/image.py | 593 | CODE | |
| LOW | picard/script/serializer.py | 447 | CODE | |
| LOW | picard/tags/tagvar.py | 87 | CODE | |
| LOW | picard/webservice/__init__.py | 154 | CODE | |
| LOW | picard/browser/addrelease.py | 208 | CODE | |
| LOW | picard/plugin3/init_templates.py | 70 | CODE | |
| LOW | picard/plugin3/manager/__init__.py | 324 | CODE | |
| LOW | test/plugins3/test_cli.py | 1427 | CODE | |
| LOW | test/plugins3/helpers.py | 356 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | picard/remotecommands/handlers.py | 306 | for x in self.tagger.window.log_dialog.log_tail.contents(): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | picard/config_upgrade_hooks.py | 625 | # We need to make sure to load all keys in the config file, not just | COMMENT |
| LOW | picard/util/filenaming.py | 289 | # and don't forget to cache | STRING |
| LOW | picard/util/filenaming.py | 289 | # and don't forget to cache | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | picard/util/thread.py | 126 | def run_task( | CODE |
| LOW | test/plugins3/test_migration.py | 155 | def my_function(): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | picard/profiles/exporter.py | 232 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/tools/generate_match_icons.py | 10 | # Usage: | COMMENT |