forked from qmk/qmk_firmware
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Basic qmk lint command * check for keymap readme * change the workflow from qmk info to qmk lint * add a strict mode * parsing -> parse * document qmk lint * small info logging cleanup * Apply suggestions from code review Co-authored-by: Ryan <fauxpark@gmail.com> * honor --strict in more places * change the job name to lint Co-authored-by: Ryan <fauxpark@gmail.com>
- Loading branch information
Showing
7 changed files
with
152 additions
and
23 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
"""Command to look over a keyboard/keymap and check for common mistakes. | ||
""" | ||
from milc import cli | ||
|
||
from qmk.decorators import automagic_keyboard, automagic_keymap | ||
from qmk.info import info_json | ||
from qmk.keymap import locate_keymap | ||
from qmk.path import is_keyboard, keyboard | ||
|
||
|
||
@cli.argument('--strict', action='store_true', help='Treat warnings as errors.') | ||
@cli.argument('-kb', '--keyboard', help='The keyboard to check.') | ||
@cli.argument('-km', '--keymap', help='The keymap to check.') | ||
@cli.subcommand('Check keyboard and keymap for common mistakes.') | ||
@automagic_keyboard | ||
@automagic_keymap | ||
def lint(cli): | ||
"""Check keyboard and keymap for common mistakes. | ||
""" | ||
if not cli.config.lint.keyboard: | ||
cli.log.error('Missing required argument: --keyboard') | ||
cli.print_help() | ||
return False | ||
|
||
if not is_keyboard(cli.config.lint.keyboard): | ||
cli.log.error('No such keyboard: %s', cli.config.lint.keyboard) | ||
return False | ||
|
||
# Gather data about the keyboard. | ||
ok = True | ||
keyboard_path = keyboard(cli.config.lint.keyboard) | ||
keyboard_info = info_json(cli.config.lint.keyboard) | ||
readme_path = keyboard_path / 'readme.md' | ||
|
||
# Check for errors in the info.json | ||
if keyboard_info['parse_errors']: | ||
ok = False | ||
cli.log.error('Errors found when generating info.json.') | ||
|
||
if cli.config.lint.strict and keyboard_info['parse_warnings']: | ||
ok = False | ||
cli.log.error('Warnings found when generating info.json (Strict mode enabled.)') | ||
|
||
# Check for a readme.md and warn if it doesn't exist | ||
if not readme_path.exists(): | ||
ok = False | ||
cli.log.error('Missing %s', readme_path) | ||
|
||
# Keymap specific checks | ||
if cli.config.lint.keymap: | ||
keymap_path = locate_keymap(cli.config.lint.keyboard, cli.config.lint.keymap) | ||
|
||
if not keymap_path: | ||
ok = False | ||
cli.log.error("Can't find %s keymap for %s keyboard.", cli.config.lint.keymap, cli.config.lint.keyboard) | ||
else: | ||
keymap_readme = keymap_path.parent / 'readme.md' | ||
if not keymap_readme.exists(): | ||
cli.log.warning('Missing %s', keymap_readme) | ||
|
||
if cli.config.lint.strict: | ||
ok = False | ||
|
||
# Check and report the overall status | ||
if ok: | ||
cli.log.info('Lint check passed!') | ||
return True | ||
|
||
cli.log.error('Lint check failed!') | ||
return False |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters