From 37345e2ace56e1ea17e0ab6b4df3af81f437ae79 Mon Sep 17 00:00:00 2001 From: Ryan Date: Sat, 6 Aug 2022 22:37:40 +1000 Subject: [PATCH] Provide users with replacements for deprecated/invalid functionality where applicable (#17604) --- data/mappings/info_config.json | 3 ++- data/mappings/info_rules.json | 5 +++-- lib/python/qmk/info.py | 22 ++++++++++++++++++---- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/data/mappings/info_config.json b/data/mappings/info_config.json index 5f0d903bd71..7ff05918e98 100644 --- a/data/mappings/info_config.json +++ b/data/mappings/info_config.json @@ -9,6 +9,7 @@ # warn_duplicate: Default `true`. Set to `false` to turn off warning when a value exists in both places # deprecated: Default `false`. Set to `true` to turn on warning when a value exists # invalid: Default `false`. Set to `true` to generate errors when a value exists + # replace_with: use with a key marked deprecated or invalid to designate a replacement "AUDIO_VOICES": {"info_key": "audio.voices", "value_type": "bool"}, "BACKLIGHT_BREATHING": {"info_key": "backlight.breathing", "value_type": "bool"}, "BREATHING_PERIOD": {"info_key": "backlight.breathing_period", "value_type": "int"}, @@ -108,6 +109,6 @@ "NO_ACTION_MACRO": {"info_key": "_invalid.no_action_macro", "invalid": true}, "NO_ACTION_FUNCTION": {"info_key": "_invalid.no_action_function", "invalid": true}, "DESCRIPTION": {"info_key": "_invalid.usb_description", "invalid": true}, - "DEBOUNCING_DELAY": {"info_key": "_invalid.debouncing_delay", "invalid": true}, + "DEBOUNCING_DELAY": {"info_key": "_invalid.debouncing_delay", "invalid": true, replace_with: "DEBOUNCE"}, "PREVENT_STUCK_MODIFIERS": {"info_key": "_invalid.prevent_stuck_mods", "invalid": true}, } diff --git a/data/mappings/info_rules.json b/data/mappings/info_rules.json index d4eec37ba04..93de321ab1b 100644 --- a/data/mappings/info_rules.json +++ b/data/mappings/info_rules.json @@ -9,6 +9,7 @@ # warn_duplicate: Default `true`. Set to `false` to turn off warning when a value exists in both places # deprecated: Default `false`. Set to `true` to turn on warning when a value exists # invalid: Default `false`. Set to `true` to generate errors when a value exists + # replace_with: use with a key marked deprecated or invalid to designate a replacement "BOARD": {"info_key": "board"}, "BOOTLOADER": {"info_key": "bootloader", "warn_duplicate": false}, "BLUETOOTH": {"info_key": "bluetooth.driver"}, @@ -29,7 +30,7 @@ "WAIT_FOR_USB": {"info_key": "usb.wait_for", "value_type": "bool"}, # Items we want flagged in lint - "CTPC": {"info_key": "_deprecated.ctpc", "deprecated": true}, - "CONVERT_TO_PROTON_C": {"info_key": "_deprecated.ctpc", "deprecated": true}, + "CTPC": {"info_key": "_deprecated.ctpc", "deprecated": true, "replace_with": "CONVERT_TO=proton_c"}, + "CONVERT_TO_PROTON_C": {"info_key": "_deprecated.ctpc", "deprecated": true, "replace_with": "CONVERT_TO=proton_c"}, "VIAL_ENABLE": {"info_key": "_invalid.vial", "invalid": true}, } diff --git a/lib/python/qmk/info.py b/lib/python/qmk/info.py index 340969f4158..ccec46ce213 100644 --- a/lib/python/qmk/info.py +++ b/lib/python/qmk/info.py @@ -463,10 +463,17 @@ def _extract_config_h(info_data, config_c): key_type = info_dict.get('value_type', 'raw') try: + replace_with = info_dict.get('replace_with') if config_key in config_c and info_dict.get('invalid', False): - _log_error(info_data, '%s in config.h is no longer a valid option' % config_key) + if replace_with: + _log_error(info_data, '%s in config.h is no longer a valid option and should be replaced with %s' % (config_key, replace_with)) + else: + _log_error(info_data, '%s in config.h is no longer a valid option and should be removed' % config_key) elif config_key in config_c and info_dict.get('deprecated', False): - _log_warning(info_data, '%s in config.h is deprecated and will be removed at a later date' % config_key) + if replace_with: + _log_warning(info_data, '%s in config.h is deprecated in favor of %s and will be removed at a later date' % (config_key, replace_with)) + else: + _log_warning(info_data, '%s in config.h is deprecated and will be removed at a later date' % config_key) if config_key in config_c and info_dict.get('to_json', True): if dotty_info.get(info_key) and info_dict.get('warn_duplicate', True): @@ -527,10 +534,17 @@ def _extract_rules_mk(info_data, rules): key_type = info_dict.get('value_type', 'raw') try: + replace_with = info_dict.get('replace_with') if rules_key in rules and info_dict.get('invalid', False): - _log_error(info_data, '%s in rules.mk is no longer a valid option' % rules_key) + if replace_with: + _log_error(info_data, '%s in rules.mk is no longer a valid option and should be replaced with %s' % (rules_key, replace_with)) + else: + _log_error(info_data, '%s in rules.mk is no longer a valid option and should be removed' % rules_key) elif rules_key in rules and info_dict.get('deprecated', False): - _log_warning(info_data, '%s in rules.mk is deprecated and will be removed at a later date' % rules_key) + if replace_with: + _log_warning(info_data, '%s in rules.mk is deprecated in favor of %s and will be removed at a later date' % (rules_key, replace_with)) + else: + _log_warning(info_data, '%s in rules.mk is deprecated and will be removed at a later date' % rules_key) if rules_key in rules and info_dict.get('to_json', True): if dotty_info.get(info_key) and info_dict.get('warn_duplicate', True):