Linux device manager for Logitech devices
This report summarizes scanner evidence for pwr-Solaar/Solaar, a Python project with 9,472 GitHub stars. SynthScan examined 61,516 lines of code across 283 source files, recording 778 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 14.5 (Moderate pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 461 finding(s).
Are imports declared and package/API names verified? 72 finding(s).
Are wrappers, guards, and repeated structures necessary? 475 finding(s).
Which changes need focused human review? 778 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 778 distinct pattern matches across 13 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| 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 |
|---|---|---|---|---|
| HIGH | lib/logitech_receiver/rgb_power.py | 363 | except Exception: | CODE |
| HIGH | lib/logitech_receiver/rgb_power.py | 415 | except Exception: | CODE |
| HIGH | lib/logitech_receiver/rgb_power.py | 491 | except Exception: | CODE |
| HIGH | lib/logitech_receiver/settings_templates.py | 3512 | except Exception: | CODE |
| HIGH | lib/logitech_receiver/centurion_constants.py | 33 | except ValueError: | CODE |
| HIGH | lib/logitech_receiver/centurion.py | 295 | except Exception: | CODE |
| HIGH | lib/logitech_receiver/centurion.py | 403 | except Exception: | CODE |
| HIGH | lib/logitech_receiver/base_usb.py | 235 | except KeyError: | CODE |
| HIGH | lib/logitech_receiver/notifications.py | 84 | except KeyError: | CODE |
| HIGH | lib/logitech_receiver/settings_validator.py | 411 | except Exception: | CODE |
| HIGH | lib/logitech_receiver/settings_validator.py | 818 | except Exception: | CODE |
| HIGH | lib/logitech_receiver/hidpp20.py | 1485 | except Exception: | CODE |
| HIGH | lib/logitech_receiver/base.py | 260 | except ValueError: | CODE |
| HIGH | lib/logitech_receiver/base.py | 321 | except Exception: | CODE |
| HIGH | lib/hid_parser/__init__.py | 410 | except (KeyError, ValueError): | CODE |
| HIGH | lib/hid_parser/__init__.py | 512 | except (KeyError, ValueError): | CODE |
| HIGH | lib/hidapi/hidconsole.py | 207 | except Exception: | CODE |
| HIGH | lib/hidapi/hidapi_impl.py | 74 | except OSError: | CODE |
| HIGH | lib/solaar/listener.py | 477 | except Exception: | CODE |
| HIGH | lib/solaar/ui/diversion_rules.py | 976 | except KeyError: | CODE |
| HIGH | lib/solaar/ui/diversion_rules.py | 980 | except KeyError: | CODE |
| HIGH | lib/solaar/ui/perkey/control.py | 110 | except ValueError: | CODE |
| HIGH | lib/solaar/cli/config.py | 219 | except Exception: | CODE |
| HIGH | lib/solaar/cli/__init__.py | 187 | except Exception: | CODE |
| 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 |