diff options
Diffstat (limited to 'lib/python')
| -rw-r--r-- | lib/python/qmk/info.py | 39 | 
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 | 
