Skip to content

Commit

Permalink
Fix 'No LAYOUTs defined' check (qmk#19537)
Browse files Browse the repository at this point in the history
  • Loading branch information
zvecr authored and omikronik committed Jan 22, 2023
1 parent e89ac80 commit 588bf8c
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 1 deletion.
3 changes: 3 additions & 0 deletions data/schemas/keyboard.jsonschema
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,9 @@
"c_macro": {
"type": "boolean"
},
"json_layout": {
"type": "boolean"
},
"layout": {
"type": "array",
"items": {
Expand Down
5 changes: 4 additions & 1 deletion lib/python/qmk/info.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ def _validate(keyboard, info_data):
community_layouts_names = list(map(lambda layout: f'LAYOUT_{layout}', community_layouts))

# Make sure we have at least one layout
if len(layouts) == 0:
if len(layouts) == 0 or all(not layout.get('json_layout', False) for layout in layouts.values()):
_log_error(info_data, 'No LAYOUTs defined! Need at least one layout defined in info.json.')

# Providing only LAYOUT_all "because I define my layouts in a 3rd party tool"
Expand Down Expand Up @@ -107,6 +107,7 @@ def info_json(keyboard):
for layout_name, layout_json in layouts.items():
if not layout_name.startswith('LAYOUT_kc'):
layout_json['c_macro'] = True
layout_json['json_layout'] = False
info_data['layouts'][layout_name] = layout_json

# Merge in the data from info.json, config.h, and rules.mk
Expand Down Expand Up @@ -824,13 +825,15 @@ def merge_info_jsons(keyboard, info_data):
msg = 'Number of keys for %s does not match! info.json specifies %d keys, C macro specifies %d'
_log_error(info_data, msg % (layout_name, len(layout['layout']), len(info_data['layouts'][layout_name]['layout'])))
else:
info_data['layouts'][layout_name]['json_layout'] = True
for new_key, existing_key in zip(layout['layout'], info_data['layouts'][layout_name]['layout']):
existing_key.update(new_key)
else:
if not all('matrix' in key_data.keys() for key_data in layout['layout']):
_log_error(info_data, f'Layout "{layout_name}" has no "matrix" definition in either "info.json" or "<keyboard>.h"!')
else:
layout['c_macro'] = False
layout['json_layout'] = True
info_data['layouts'][layout_name] = layout

# Update info_data with the new data
Expand Down

0 comments on commit 588bf8c

Please sign in to comment.