summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoel Challis <git@zvecr.com>2023-02-11 20:36:11 +0000
committerGitHub <noreply@github.com>2023-02-11 20:36:11 +0000
commit90f3d6201a3cc58f7bb0c6d8abd8092a43c968d5 (patch)
tree46d9568a1f52e2a34b28a10a6c7f22f6263015df
parent0a9d06a5053caf99535604f34b63c821e5cf5a1b (diff)
Reduce false positives in layout name validation (#19646)
-rw-r--r--lib/python/qmk/info.py39
1 files changed, 27 insertions, 12 deletions
diff --git a/lib/python/qmk/info.py b/lib/python/qmk/info.py
index e73d825696..152e6ce7b6 100644
--- a/lib/python/qmk/info.py
+++ b/lib/python/qmk/info.py
@@ -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,15 +18,30 @@ from qmk.math import compute
true_values = ['1', 'on', 'yes']
false_values = ['0', 'off', 'no']
-# TODO: reduce this list down
-SAFE_LAYOUT_TOKENS = {
- 'ansi',
- 'iso',
- 'wkl',
- 'tkl',
- 'preonic',
- 'planck',
-}
+
+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 = {
+ '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):
@@ -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