Linux device manager for Logitech devices
This report presents the forensic synthetic code analysis of pwr-Solaar/Solaar, a Python project with 9,314 GitHub stars. SynthScan v2.0 examined 61,516 lines of code across 283 source files, recording 754 pattern matches distributed across 12 syntactic categories. The overall adjusted score of 12.5 places this repository in the Low 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 754 distinct pattern matches across 12 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 | tests/conftest.py | 9 | def isolate_solaar_configuration(tmp_path, monkeypatch): | CODE |
| LOW | tests/conftest.py | 26 | def mock_desktop_notifications(monkeypatch): | CODE |
| LOW | tests/logitech_receiver/test_setting_templates.py | 906 | def test_check_feature_settings(test, mocker): | CODE |
| LOW | tests/logitech_receiver/test_setting_templates.py | 927 | def test_check_feature_setting(test, mocker): | CODE |
| LOW | tests/logitech_receiver/test_setting_templates.py | 944 | def _idle_setting_with_persisted(value): | CODE |
| LOW | tests/logitech_receiver/test_common.py | 26 | def test_named_int_comparison(): | CODE |
| LOW | tests/logitech_receiver/test_common.py | 42 | def test_named_int_comparison_exception(): | CODE |
| LOW | tests/logitech_receiver/test_common.py | 49 | def test_named_int_conversions(): | CODE |
| LOW⚡ | tests/logitech_receiver/test_common.py | 68 | def test_color_int_str_and_repr(): | CODE |
| LOW⚡ | tests/logitech_receiver/test_common.py | 75 | def test_color_int_equality_with_plain_int(): | CODE |
| LOW⚡ | tests/logitech_receiver/test_common.py | 80 | def test_color_int_from_hex_string_prefixes(): | CODE |
| LOW⚡ | tests/logitech_receiver/test_common.py | 86 | def test_color_int_from_int_passes_through(): | CODE |
| LOW⚡ | tests/logitech_receiver/test_common.py | 91 | def test_color_int_out_of_range_falls_back_to_decimal(): | CODE |
| LOW⚡ | tests/logitech_receiver/test_common.py | 97 | def test_color_int_yaml_dumps_as_hex_int_literal(): | CODE |
| LOW⚡ | tests/logitech_receiver/test_common.py | 103 | def test_color_int_yaml_roundtrips_to_plain_int(): | CODE |
| LOW⚡ | tests/logitech_receiver/test_common.py | 112 | def test_color_int_in_dict_yaml_dumps_each_value_as_hex(): | CODE |
| LOW | tests/logitech_receiver/test_common.py | 187 | def test_named_ints_flag_names(code, expected_flags): | CODE |
| LOW | tests/logitech_receiver/test_receiver.py | 132 | def test_receiver_factory_create_receiver(device_info, responses, handle, serial, max_devices): | CODE |
| LOW | tests/logitech_receiver/test_receiver.py | 156 | def test_receiver_factory_props(device_info, responses, firmware, codename, remaining_pairings, pairing_info, count): | CODE |
| LOW | tests/logitech_receiver/test_receiver.py | 176 | def test_receiver_factory_string(device_info, responses, status_str, strng): | CODE |
| LOW | tests/logitech_receiver/test_receiver.py | 192 | def test_receiver_factory_no_device(device_info, responses): | CODE |
| LOW | tests/logitech_receiver/test_receiver.py | 208 | def test_notification_information_nano_receiver(nano_recv, address, data, expected_online, expected_encrypted): | CODE |
| LOW | tests/logitech_receiver/test_receiver.py | 225 | def test_extract_serial_number(): | CODE |
| LOW | tests/logitech_receiver/test_receiver.py | 248 | def test_extract_remaining_pairings(response, expected_remaining_pairings): | CODE |
| LOW | tests/logitech_receiver/test_receiver.py | 272 | def test_extract_power_switch_location(power_switch_byte, expected_location): | CODE |
| LOW | tests/logitech_receiver/test_receiver.py | 280 | def test_extract_connection_count(): | CODE |
| LOW | tests/logitech_receiver/test_receiver.py | 296 | def test_extract_polling_rate(): | CODE |
| LOW⚡ | tests/logitech_receiver/test_receiver.py | 325 | def test_force_unpair_slot_empty_slot_acknowledged(): | CODE |
| LOW⚡ | tests/logitech_receiver/test_receiver.py | 334 | def test_force_unpair_slot_stale_sentinel_cleared(): | CODE |
| LOW⚡ | tests/logitech_receiver/test_receiver.py | 343 | def test_force_unpair_slot_active_device_invalidated(): | CODE |
| LOW⚡ | tests/logitech_receiver/test_receiver.py | 356 | def test_force_unpair_slot_register_write_failed(): | CODE |
| LOW⚡ | tests/logitech_receiver/test_receiver.py | 365 | def test_force_unpair_slot_no_handle(): | CODE |
| LOW⚡ | tests/logitech_receiver/test_receiver.py | 374 | def test_close_keeps_handle_until_paired_devices_closed(): | CODE |
| LOW | tests/logitech_receiver/test_hidpp20_simple.py | 172 | def test_get_mouse_pointer_info(): | CODE |
| LOW⚡ | tests/logitech_receiver/test_hidpp20_simple.py | 186 | def test_get_vertical_scrolling_info(): | CODE |
| LOW⚡ | tests/logitech_receiver/test_hidpp20_simple.py | 195 | def test_get_hi_res_scrolling_info(): | CODE |
| LOW⚡ | tests/logitech_receiver/test_hidpp20_simple.py | 205 | def test_get_pointer_speed_info(): | CODE |
| LOW⚡ | tests/logitech_receiver/test_hidpp20_simple.py | 214 | def test_get_lowres_wheel_status(): | CODE |
| LOW | tests/logitech_receiver/test_hidpp20_simple.py | 242 | def test_get_new_fn_inversion(): | CODE |
| LOW | tests/logitech_receiver/test_hidpp20_simple.py | 357 | def test_get_remaining_pairing(): | CODE |
| LOW⚡ | tests/logitech_receiver/test_hidpp20_simple.py | 375 | def test_get_configuration_cookie(): | CODE |
| LOW⚡ | tests/logitech_receiver/test_hidpp20_simple.py | 384 | def test_set_configuration_complete_explicit_cookie(): | CODE |
| LOW⚡ | tests/logitech_receiver/test_hidpp20_simple.py | 394 | def test_set_configuration_complete_monotonic_counter(): | CODE |
| LOW | tests/logitech_receiver/test_hidpp20_simple.py | 407 | def test_set_configuration_complete_skips_zero(): | CODE |
| LOW | tests/logitech_receiver/test_hidpp20_simple.py | 416 | def test_decipher_battery_status(): | CODE |
| LOW | tests/logitech_receiver/test_hidpp20_simple.py | 427 | def test_decipher_battery_voltage(): | CODE |
| LOW | tests/logitech_receiver/test_hidpp20_simple.py | 438 | def test_decipher_battery_unified(): | CODE |
| LOW | tests/logitech_receiver/test_hidpp20_simple.py | 448 | def test_decipher_adc_measurement(): | CODE |
| LOW | tests/logitech_receiver/test_hidpp20_simple.py | 522 | def test_estimate_battery_level_percentage(millivolt, expected_percentage): | CODE |
| LOW | tests/logitech_receiver/test_base_usb.py | 7 | def test_ensure_known_receivers_mappings_are_valid(): | CODE |
| LOW | tests/logitech_receiver/test_base_usb.py | 28 | def test_get_receiver_info_unknown_device_fails(): | CODE |
| LOW | tests/logitech_receiver/test_settings_validator.py | 39 | def test_map_range_to_string_formats_plain_int_through_value_type(): | CODE |
| LOW⚡ | tests/logitech_receiver/test_settings_validator.py | 51 | def test_map_range_to_string_passes_color_int_through(): | CODE |
| LOW⚡ | tests/logitech_receiver/test_settings_validator.py | 59 | def test_map_range_to_string_preserves_sentinel_subclass(): | CODE |
| LOW⚡ | tests/logitech_receiver/test_settings_validator.py | 69 | def test_map_range_to_string_int_value_type_unchanged(): | CODE |
| LOW | tests/logitech_receiver/test_notifications.py | 54 | def test_process_receiver_notification(sub_id, notification_data, expected_error, expected_new_device): | CODE |
| LOW | tests/logitech_receiver/test_notifications.py | 73 | def test_process_device_notification(hidpp_notification, expected): | CODE |
| LOW | tests/logitech_receiver/test_notifications.py | 90 | def test_process_dj_notification(hidpp_notification, expected): | CODE |
| LOW | tests/logitech_receiver/test_notifications.py | 273 | def test_process_feature_notification(mocker, hidpp_notification, feature): | CODE |
| LOW | tests/logitech_receiver/test_notifications.py | 282 | def test_process_receiver_notification_invalid(mocker): | CODE |
| 162 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | setup.py | 17 | except Exception: # get commit from Ubuntu dpkg-parsechangelog | CODE |
| LOW | setup.py | 26 | except Exception as e: | CODE |
| LOW | tests/conftest.py | 39 | except Exception: | CODE |
| LOW | lib/logitech_receiver/settings_new.py | 119 | except Exception as e: | CODE |
| LOW⚡ | lib/logitech_receiver/rgb_power.py | 549 | except Exception as e: | CODE |
| LOW⚡ | lib/logitech_receiver/rgb_power.py | 562 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/rgb_power.py | 356 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/rgb_power.py | 363 | except Exception: | CODE |
| LOW | lib/logitech_receiver/rgb_power.py | 415 | except Exception: | CODE |
| LOW | lib/logitech_receiver/rgb_power.py | 491 | except Exception: | CODE |
| LOW | lib/logitech_receiver/rgb_power.py | 599 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/rgb_power.py | 608 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/rgb_power.py | 667 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/rgb_power.py | 673 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/rgb_power.py | 763 | except Exception as exc: | CODE |
| LOW | lib/logitech_receiver/rgb_power.py | 784 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/rgb_power.py | 816 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/rgb_power.py | 952 | except Exception: | CODE |
| LOW | lib/logitech_receiver/rgb_power.py | 992 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/desktop_notifications.py | 64 | except Exception: | CODE |
| LOW | lib/logitech_receiver/desktop_notifications.py | 90 | except Exception: | CODE |
| LOW | lib/logitech_receiver/headset_rgb.py | 71 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/headset_rgb.py | 82 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/headset_rgb.py | 133 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/headset_rgb.py | 197 | except Exception as e: | CODE |
| MEDIUM | lib/logitech_receiver/settings_templates.py | 2879 | def build(cls, device): | CODE |
| LOW | lib/logitech_receiver/settings_templates.py | 1756 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/settings_templates.py | 1791 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/settings_templates.py | 1978 | except Exception: | CODE |
| LOW | lib/logitech_receiver/settings_templates.py | 2091 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/settings_templates.py | 2230 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/settings_templates.py | 2237 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/settings_templates.py | 2317 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/settings_templates.py | 2451 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/settings_templates.py | 2669 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/settings_templates.py | 2971 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/settings_templates.py | 3365 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/settings_templates.py | 3371 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/settings_templates.py | 3512 | except Exception: | CODE |
| LOW | lib/logitech_receiver/settings_templates.py | 3819 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/settings_templates.py | 4640 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/settings_templates.py | 4693 | except Exception as err: | CODE |
| LOW | lib/logitech_receiver/settings_templates.py | 4730 | except Exception: | CODE |
| LOW | lib/logitech_receiver/device.py | 100 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/device.py | 188 | except Exception: # maybe the device wasn't set up | CODE |
| LOW | lib/logitech_receiver/device.py | 192 | except Exception: # give up | CODE |
| LOW | lib/logitech_receiver/device.py | 526 | except Exception as e: # Do nothing if the device is offline | CODE |
| LOW | lib/logitech_receiver/device.py | 560 | except Exception: | CODE |
| LOW | lib/logitech_receiver/device.py | 1017 | except Exception: | CODE |
| LOW | lib/logitech_receiver/centurion.py | 295 | except Exception: | CODE |
| LOW | lib/logitech_receiver/centurion.py | 352 | except Exception: | CODE |
| LOW | lib/logitech_receiver/centurion.py | 403 | except Exception: | CODE |
| LOW | lib/logitech_receiver/centurion.py | 589 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/receiver.py | 634 | except Exception: | CODE |
| LOW | lib/logitech_receiver/rgb_effects_probe.py | 78 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/rgb_effects_probe.py | 96 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/rgb_effects_probe.py | 214 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/rgb_effects_probe.py | 218 | except Exception as e: | CODE |
| LOW | lib/logitech_receiver/diversion.py | 115 | except Exception: | CODE |
| LOW | lib/logitech_receiver/diversion.py | 184 | except Exception: | CODE |
| 80 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/logitech_receiver/test_setting_templates.py | 1 | ## Copyright (C) 2024 Solaar Contributors https://pwr-solaar.github.io/Solaar/ | COMMENT |
| LOW | tests/logitech_receiver/test_hidpp20_simple.py | 1 | ## Copyright (C) 2024 Solaar Contributors https://pwr-solaar.github.io/Solaar/ | COMMENT |
| LOW | tests/logitech_receiver/fake_hidpp.py | 1 | ## Copyright (C) 2024 Solaar Contributors https://pwr-solaar.github.io/Solaar/ | COMMENT |
| LOW | tests/logitech_receiver/fake_hidpp.py | 221 | # Response("00000000000000000000000000000000", 0x0410, "000180"), | COMMENT |
| LOW | tests/logitech_receiver/test_device.py | 1 | ## Copyright (C) 2024 Solaar Contributors https://pwr-solaar.github.io/Solaar/ | COMMENT |
| LOW | tests/logitech_receiver/test_hidpp20_complex.py | 1 | ## Copyright (C) 2024 Solaar Contributors https://pwr-solaar.github.io/Solaar/ | COMMENT |
| LOW | docs/usb.ids.txt | 1 | # | COMMENT |
| LOW | docs/devices/Marathon Mouse M705 101B.txt | 21 | # writing 0x10 in this register will generate an event | COMMENT |
| LOW | lib/logitech_receiver/hidpp20_constants.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/logitech_receiver/settings_new.py | 1 | ## Copyright (C) 2025 Solaar contributors | COMMENT |
| LOW | lib/logitech_receiver/rgb_power.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/logitech_receiver/rgb_power.py | 261 | # SetEffectByIndex: cluster + effectIdx + 10 param bytes + persist. | COMMENT |
| LOW | lib/logitech_receiver/desktop_notifications.py | 1 | ## Copyright (C) 2024 Solaar contributors | COMMENT |
| LOW | lib/logitech_receiver/headset_rgb.py | 1 | ## Copyright (C) 2024 Solaar Contributors https://pwr-solaar.github.io/Solaar/ | COMMENT |
| LOW | lib/logitech_receiver/device_quirks.py | 41 | # effects. Default-DENY allowlist: modelId -> cap_id -> set of color fields | COMMENT |
| LOW | lib/logitech_receiver/hidpp10_constants.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/logitech_receiver/settings_templates.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/logitech_receiver/settings_templates.py | 101 | PRESSED = "pressed" | COMMENT |
| LOW | lib/logitech_receiver/settings_templates.py | 121 | # and permit reading or writing the entire map or just one key/value pair. | COMMENT |
| LOW | lib/logitech_receiver/settings_templates.py | 141 | # There are three simple validator classes - BooleanV, RangeValidator, and ChoicesValidator | COMMENT |
| LOW | lib/logitech_receiver/settings_templates.py | 161 | # or None for no limitation and optionally a choices_extra class variable with an extra choice. | COMMENT |
| LOW | lib/logitech_receiver/settings_templates.py | 1661 | label = _("Mic Mute") | COMMENT |
| LOW | lib/logitech_receiver/settings_templates.py | 2941 | # Top-level so users see a direct on/off indicator at a glance. | COMMENT |
| LOW | lib/logitech_receiver/device.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/logitech_receiver/centurion.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/logitech_receiver/receiver.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/logitech_receiver/__init__.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/logitech_receiver/base_usb.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/logitech_receiver/diversion.py | 1 | ## Copyright (C) 2020 Peter Patel-Schneider | COMMENT |
| LOW | lib/logitech_receiver/diversion.py | 61 | # | COMMENT |
| LOW | lib/logitech_receiver/descriptors.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/logitech_receiver/descriptors.py | 161 | # * 00 - notification flags (all devices) | COMMENT |
| LOW | lib/logitech_receiver/descriptors.py | 181 | # USB traffic Solaar has to do to fully identify peripherals. | COMMENT |
| LOW | lib/logitech_receiver/common.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/logitech_receiver/settings.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/logitech_receiver/exceptions.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/logitech_receiver/notifications.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/logitech_receiver/i18n.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/logitech_receiver/special_keys.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/logitech_receiver/special_keys.py | 901 | # Frame_Back=0xC1, | COMMENT |
| LOW | lib/logitech_receiver/advanced_para_eq.py | 1 | ## Copyright (C) 2024 Solaar Contributors https://pwr-solaar.github.io/Solaar/ | COMMENT |
| LOW | lib/logitech_receiver/onboard_eq.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/logitech_receiver/hidpp20.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/logitech_receiver/base.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/logitech_receiver/base.py | 901 | # Known values in use by other tools at the time of writing: | COMMENT |
| LOW | lib/logitech_receiver/hidpp10.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/logitech_receiver/listener.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/logitech_receiver/logivoice.py | 1 | ## Copyright (C) 2024 Solaar Contributors https://pwr-solaar.github.io/Solaar/ | COMMENT |
| LOW | lib/logitech_receiver/logivoice.py | 101 | COMMENT | |
| LOW | lib/hidapi/hidconsole.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/hidapi/hidapi_impl.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/hidapi/udev_impl.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/solaar/configuration.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/solaar/tasks.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | lib/solaar/gtk.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | lib/solaar/dbus.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/solaar/__init__.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/solaar/i18n.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/solaar/listener.py | 1 | ## Copyright (C) 2012-2013 Daniel Pavel | COMMENT |
| LOW | lib/solaar/ui/diversion_rules.py | 1 | ## Copyright (C) Solaar Contributors | COMMENT |
| 45 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | lib/logitech_receiver/rgb_power.py | 192 | CODE | |
| LOW | lib/logitech_receiver/rgb_power.py | 276 | CODE | |
| LOW | lib/logitech_receiver/rgb_power.py | 470 | CODE | |
| LOW | lib/logitech_receiver/rgb_power.py | 578 | CODE | |
| LOW | lib/logitech_receiver/rgb_power.py | 966 | CODE | |
| LOW | lib/logitech_receiver/desktop_notifications.py | 93 | CODE | |
| LOW | lib/logitech_receiver/settings_templates.py | 4647 | CODE | |
| LOW | lib/logitech_receiver/settings_templates.py | 4721 | CODE | |
| LOW | lib/logitech_receiver/settings_templates.py | 2759 | CODE | |
| LOW | lib/logitech_receiver/settings_templates.py | 2783 | CODE | |
| LOW | lib/logitech_receiver/settings_templates.py | 3467 | CODE | |
| LOW | lib/logitech_receiver/settings_templates.py | 3761 | CODE | |
| LOW | lib/logitech_receiver/settings_templates.py | 3902 | CODE | |
| LOW | lib/logitech_receiver/settings_templates.py | 4013 | CODE | |
| LOW | lib/logitech_receiver/settings_templates.py | 1009 | CODE | |
| LOW | lib/logitech_receiver/device.py | 261 | CODE | |
| LOW | lib/logitech_receiver/device.py | 284 | CODE | |
| LOW | lib/logitech_receiver/device.py | 414 | CODE | |
| LOW | lib/logitech_receiver/device.py | 467 | CODE | |
| LOW | lib/logitech_receiver/device.py | 517 | CODE | |
| LOW | lib/logitech_receiver/device.py | 539 | CODE | |
| LOW | lib/logitech_receiver/device.py | 594 | CODE | |
| LOW | lib/logitech_receiver/device.py | 719 | CODE | |
| LOW | lib/logitech_receiver/device.py | 755 | CODE | |
| LOW | lib/logitech_receiver/receiver.py | 579 | CODE | |
| LOW | lib/logitech_receiver/receiver.py | 298 | CODE | |
| LOW | lib/logitech_receiver/diversion.py | 292 | CODE | |
| LOW | lib/logitech_receiver/diversion.py | 1444 | CODE | |
| LOW | lib/logitech_receiver/diversion.py | 1556 | CODE | |
| LOW | lib/logitech_receiver/diversion.py | 804 | CODE | |
| LOW | lib/logitech_receiver/diversion.py | 900 | CODE | |
| LOW | lib/logitech_receiver/diversion.py | 993 | CODE | |
| LOW | lib/logitech_receiver/descriptors.py | 60 | CODE | |
| LOW | lib/logitech_receiver/common.py | 468 | CODE | |
| LOW | lib/logitech_receiver/common.py | 672 | CODE | |
| LOW | lib/logitech_receiver/settings.py | 279 | CODE | |
| LOW | lib/logitech_receiver/settings.py | 382 | CODE | |
| LOW | lib/logitech_receiver/settings.py | 483 | CODE | |
| LOW | lib/logitech_receiver/settings.py | 508 | CODE | |
| LOW | lib/logitech_receiver/settings.py | 739 | CODE | |
| LOW | lib/logitech_receiver/settings.py | 809 | CODE | |
| LOW | lib/logitech_receiver/settings.py | 843 | CODE | |
| LOW | lib/logitech_receiver/settings.py | 740 | CODE | |
| LOW | lib/logitech_receiver/notifications.py | 241 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 2244 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 151 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 301 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 486 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 634 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 794 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 1077 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 1464 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 1499 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 1771 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 2064 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 2090 | CODE | |
| LOW | lib/logitech_receiver/base.py | 672 | CODE | |
| LOW | lib/logitech_receiver/base.py | 804 | CODE | |
| LOW | lib/logitech_receiver/base.py | 866 | CODE | |
| LOW | lib/logitech_receiver/hidpp10.py | 230 | CODE | |
| 53 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | lib/logitech_receiver/settings_new.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/logitech_receiver/rgb_power.py | 38 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/logitech_receiver/desktop_notifications.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/logitech_receiver/headset_rgb.py | 44 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/logitech_receiver/settings_templates.py | 57 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/logitech_receiver/device.py | 51 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/logitech_receiver/centurion.py | 47 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/logitech_receiver/receiver.py | 48 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/logitech_receiver/rgb_effects_probe.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/logitech_receiver/__init__.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/logitech_receiver/diversion.py | 59 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/logitech_receiver/settings.py | 33 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/logitech_receiver/notifications.py | 50 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/logitech_receiver/settings_validator.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/logitech_receiver/advanced_para_eq.py | 49 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | lib/logitech_receiver/hidpp20.py | 510 | def set_diverted(self, value: bool) -> None: | CODE |
| LOW⚡ | lib/logitech_receiver/hidpp20.py | 515 | def set_persistently_diverted(self, value: bool) -> None: | CODE |
| LOW⚡ | lib/logitech_receiver/hidpp20.py | 520 | def set_rawXY_reporting(self, value: bool) -> None: | CODE |
| LOW | lib/logitech_receiver/hidpp20.py | 60 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/logitech_receiver/hidpp20.py | 2346 | def set_current(self, current: int) -> None: | CODE |
| LOW | lib/logitech_receiver/hidpp20.py | 2402 | def set_current(self, current: int) -> None: | CODE |
| LOW | lib/logitech_receiver/base.py | 56 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/logitech_receiver/hidpp10.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/logitech_receiver/listener.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/logitech_receiver/logivoice.py | 46 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/hidapi/hidapi_impl.py | 49 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/hidapi/udev_impl.py | 51 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/solaar/configuration.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/solaar/tasks.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/solaar/gtk.py | 42 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/solaar/dbus.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/solaar/i18n.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/solaar/i18n.py | 43 | def set_locale_to_system_default() -> None: | CODE |
| LOW | lib/solaar/listener.py | 53 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/solaar/ui/diversion_rules.py | 54 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/solaar/ui/desktop_notifications.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/solaar/ui/tray.py | 40 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/solaar/ui/window.py | 46 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/solaar/ui/pair_window.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/solaar/ui/icons.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/solaar/ui/__init__.py | 44 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/solaar/ui/common.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/solaar/ui/config_panel.py | 39 | logger = logging.getLogger(__name__) | CODE |
| LOW | lib/solaar/ui/config_panel.py | 641 | def set_value(self, value) -> None: | CODE |
| LOW⚡ | lib/solaar/ui/about/presenter.py | 28 | def update_version_info(self, version: str) -> None: | CODE |
| LOW⚡ | lib/solaar/ui/about/presenter.py | 31 | def update_description(self, comments: str) -> None: | CODE |
| LOW⚡ | lib/solaar/ui/about/presenter.py | 34 | def update_copyright(self, copyright_text: str) -> None: | CODE |
| LOW⚡ | lib/solaar/ui/about/presenter.py | 37 | def update_authors(self, authors: list[str]) -> None: | CODE |
| LOW⚡ | lib/solaar/ui/about/presenter.py | 40 | def update_translators(self, translators: list[str]) -> None: | CODE |
| LOW⚡ | lib/solaar/ui/about/presenter.py | 46 | def update_credits(self, credit_sections: list[tuple[str, list[str]]]) -> None: | CODE |
| LOW⚡ | lib/solaar/ui/about/presenter.py | 58 | def update_version_info(self) -> None: | CODE |
| LOW⚡ | lib/solaar/ui/about/presenter.py | 62 | def update_credits(self) -> None: | CODE |
| LOW⚡ | lib/solaar/ui/about/presenter.py | 66 | def update_description(self) -> None: | CODE |
| LOW⚡ | lib/solaar/ui/about/presenter.py | 70 | def update_copyright(self) -> None: | CODE |
| LOW⚡ | lib/solaar/ui/about/presenter.py | 74 | def update_authors(self) -> None: | CODE |
| LOW⚡ | lib/solaar/ui/about/presenter.py | 78 | def update_translators(self) -> None: | CODE |
| LOW⚡ | lib/solaar/ui/about/presenter.py | 82 | def update_website(self) -> None: | CODE |
| LOW⚡ | lib/solaar/ui/about/view.py | 42 | def update_version_info(self, version: str) -> None: | CODE |
| LOW⚡ | lib/solaar/ui/about/view.py | 45 | def update_description(self, comments: str) -> None: | CODE |
| LOW⚡ | lib/solaar/ui/about/view.py | 51 | def update_authors(self, authors: List[str]) -> None: | CODE |
| 19 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/logitech_receiver/fake_hidpp.py | 19 | CODE | |
| LOW | lib/logitech_receiver/rgb_power.py | 26 | CODE | |
| LOW | lib/logitech_receiver/headset_rgb.py | 36 | CODE | |
| LOW | lib/logitech_receiver/device_quirks.py | 28 | CODE | |
| LOW | lib/logitech_receiver/hidpp10_constants.py | 17 | CODE | |
| LOW | lib/logitech_receiver/settings_templates.py | 16 | CODE | |
| LOW | lib/logitech_receiver/device.py | 18 | CODE | |
| LOW | lib/logitech_receiver/device.py | 1096 | CODE | |
| LOW | lib/logitech_receiver/centurion_constants.py | 7 | CODE | |
| LOW | lib/logitech_receiver/centurion.py | 25 | CODE | |
| LOW | lib/logitech_receiver/receiver.py | 18 | CODE | |
| LOW | lib/logitech_receiver/rgb_effects_probe.py | 19 | CODE | |
| LOW | lib/logitech_receiver/base_usb.py | 30 | CODE | |
| LOW | lib/logitech_receiver/diversion.py | 17 | CODE | |
| LOW | lib/logitech_receiver/common.py | 17 | CODE | |
| LOW | lib/logitech_receiver/settings.py | 16 | CODE | |
| LOW | lib/logitech_receiver/notifications.py | 22 | CODE | |
| LOW | lib/logitech_receiver/settings_validator.py | 1 | CODE | |
| LOW | lib/logitech_receiver/advanced_para_eq.py | 42 | CODE | |
| LOW | lib/logitech_receiver/onboard_eq.py | 23 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 17 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 2414 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 2415 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 2416 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 2417 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 2418 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 2419 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 2420 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 2421 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 2422 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 2423 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 2424 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 2425 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 2426 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 2427 | CODE | |
| LOW | lib/logitech_receiver/hidpp20.py | 2428 | CODE | |
| LOW | lib/logitech_receiver/base.py | 19 | CODE | |
| LOW | lib/logitech_receiver/hidpp10.py | 16 | CODE | |
| LOW | lib/logitech_receiver/logivoice.py | 37 | CODE | |
| LOW | lib/hid_parser/__init__.py | 3 | CODE | |
| LOW | lib/hidapi/hidapi_impl.py | 26 | CODE | |
| LOW | lib/hidapi/common.py | 1 | CODE | |
| LOW | lib/hidapi/udev_impl.py | 26 | CODE | |
| LOW | lib/solaar/dbus.py | 17 | CODE | |
| LOW | lib/solaar/listener.py | 18 | CODE | |
| LOW | lib/solaar/ui/diversion_rules.py | 17 | CODE | |
| LOW | lib/solaar/ui/about/presenter.py | 17 | CODE | |
| LOW | lib/solaar/ui/about/model.py | 17 | CODE | |
| LOW | lib/solaar/ui/perkey/_icons.py | 26 | CODE | |
| LOW | lib/solaar/ui/perkey/dialog.py | 25 | CODE | |
| LOW | lib/solaar/ui/perkey/layout.py | 24 | CODE | |
| LOW | lib/solaar/ui/perkey/protocol.py | 23 | CODE | |
| LOW | lib/solaar/ui/perkey/tools.py | 24 | CODE | |
| LOW | lib/solaar/ui/perkey/control.py | 24 | CODE | |
| LOW | lib/solaar/ui/perkey/__init__.py | 17 | CODE | |
| LOW | lib/solaar/ui/perkey/__init__.py | 18 | CODE | |
| LOW | lib/solaar/ui/perkey/__init__.py | 19 | CODE | |
| LOW | lib/solaar/ui/perkey/__init__.py | 20 | CODE | |
| LOW | lib/solaar/ui/perkey/palette.py | 25 | CODE | |
| LOW | lib/solaar/ui/perkey/editor.py | 23 | CODE | |
| 12 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | release.sh | 90 | # Check if version is in the changelog | COMMENT |
| LOW⚡ | release.sh | 98 | # Check if commit is a version bump | COMMENT |
| LOW⚡ | release.sh | 102 | # Check if commit has been pushed to remote | COMMENT |
| LOW⚡ | release.sh | 107 | # Check if tag already exists | COMMENT |
| LOW⚡ | release.sh | 111 | # Check if tag already exists on remote | COMMENT |
| LOW | release.sh | 142 | # Check if stable branch does not exist | COMMENT |
| LOW | lib/logitech_receiver/centurion.py | 563 | # Check if any discovered feature is CentPPBridge (0x0003) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | lib/logitech_receiver/settings_templates.py | 2742 | CODE | |
| LOW | lib/logitech_receiver/settings_templates.py | 766 | CODE | |
| LOW | lib/logitech_receiver/diversion.py | 643 | CODE | |
| LOW | lib/logitech_receiver/diversion.py | 674 | CODE | |
| LOW | lib/logitech_receiver/descriptors.py | 60 | CODE | |
| LOW | lib/logitech_receiver/descriptors.py | 32 | CODE | |
| LOW | lib/logitech_receiver/settings_validator.py | 426 | CODE | |
| LOW | lib/solaar/ui/config_panel.py | 713 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | lib/logitech_receiver/settings_templates.py | 2936 | # ---------------------------------------------------------------------------- | COMMENT |
| MEDIUM | lib/logitech_receiver/settings_templates.py | 2951 | # ---------------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | lib/logitech_receiver/settings_templates.py | 3815 | # multi-color overlay on top so the user gets a seamless switch. | COMMENT |
| LOW | lib/logitech_receiver/settings_templates.py | 271 | # can't just use the first byte = 0xFF (for current host) because of a bug in the firmware of the MX Keys S | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | lib/logitech_receiver/settings.py | 123 | # make sure to save its current value for the next time. | COMMENT |
| LOW | lib/solaar/listener.py | 94 | # because udev is not notifying us about device removal, make sure to clean up in _all_listeners | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | lib/hidapi/udev_impl.py | 65 | """This function is a no-op, and exists only to match the native hidapi | STRING |
| MEDIUM | lib/hidapi/udev_impl.py | 74 | """This function is a no-op, and exists only to match the native hidapi | STRING |