Reduce false positives in layout name validation (#19646)

This commit is contained in:
Joel Challis 2023-02-11 20:36:11 +00:00 committed by GitHub
parent 0a9d06a505
commit 90f3d6201a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,9 +1,10 @@
"""Functions that help us generate and use info.json files.
"""
import re
from pathlib import Path
import jsonschema
from dotty_dict import dotty
from milc import cli
from qmk.constants import CHIBIOS_PROCESSORS, LUFA_PROCESSORS, VUSB_PROCESSORS
@ -17,16 +18,31 @@ from qmk.math import compute
true_values = ['1', 'on', 'yes']
false_values = ['0', 'off', 'no']
def _keyboard_in_layout_name(keyboard, layout):
"""Validate that a layout macro does not contain name of keyboard
"""
# TODO: reduce this list down
SAFE_LAYOUT_TOKENS = {
safe_layout_tokens = {
'ansi',
'iso',
'jp',
'jis',
'ortho',
'wkl',
'tkl',
'preonic',
'planck',
}
# Ignore tokens like 'split_3x7_4' or just '2x4'
layout = re.sub(r"_split_\d+x\d+_\d+", '', layout)
layout = re.sub(r"_\d+x\d+", '', layout)
name_fragments = set(keyboard.split('/')) - safe_layout_tokens
return any(fragment in layout for fragment in name_fragments)
def _valid_community_layout(layout):
"""Validate that a declared community list exists
@ -60,10 +76,9 @@ def _validate(keyboard, info_data):
_log_warning(info_data, '"LAYOUT_all" should be "LAYOUT" unless additional layouts are provided.')
# Extended layout name checks - ignoring community_layouts and "safe" values
name_fragments = set(keyboard.split('/')) - SAFE_LAYOUT_TOKENS
potential_layouts = set(layouts.keys()) - set(community_layouts_names)
for layout in potential_layouts:
if any(fragment in layout for fragment in name_fragments):
if _keyboard_in_layout_name(keyboard, layout):
_log_warning(info_data, f'Layout "{layout}" should not contain name of keyboard.')
# Filter out any non-existing community layouts