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 = find_readme(cli.config.lint.keyboard) missing_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: ok = False cli.log.error('Missing %s', missing_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
def lint(cli): """Check keyboard and keymap for common mistakes. """ failed = [] # Determine our keyboard list if cli.args.all_kb: if cli.args.keyboard: cli.log.warning( 'Both --all-kb and --keyboard passed, --all-kb takes precedence.' ) keyboard_list = list_keyboards() elif not cli.config.lint.keyboard: cli.log.error('Missing required arguments: --keyboard or --all-kb') cli.print_help() return False else: keyboard_list = cli.config.lint.keyboard.split(',') # Lint each keyboard for kb in keyboard_list: if not is_keyboard(kb): cli.log.error('No such keyboard: %s', kb) continue # Determine keymaps to also check if cli.args.all_km: keymaps = list_keymaps(kb) elif cli.config.lint.keymap: keymaps = {cli.config.lint.keymap} else: keymaps = _list_defaultish_keymaps(kb) # Ensure that at least a 'default' keymap always exists keymaps.add('default') ok = True # keyboard level checks if not keyboard_check(kb): ok = False # Keymap specific checks for keymap in keymaps: if not keymap_check(kb, keymap): ok = False # Report status if not ok: failed.append(kb) # Check and report the overall status if failed: cli.log.error('Lint check failed for: %s', ', '.join(failed)) return False cli.log.info('Lint check passed!') return True
def console(cli): """Acquire debugging information from usb hid devices """ vid = None pid = None index = 1 if cli.config.console.device: device = cli.config.console.device.split(':') if len(device) == 2: vid, pid = device elif len(device) == 3: vid, pid, index = device if not index.isdigit(): cli.log.error( 'Device index must be a number! Got "%s" instead.', index) exit(1) index = int(index) if index < 1: cli.log.error('Device index must be greater than 0! Got %s', index) exit(1) else: cli.log.error( 'Invalid format for device, expected "<pid>:<vid>[:<index>]" but got "%s".', cli.config.console.device) cli.print_help() exit(1) vid = vid.upper() pid = pid.upper() device_finder = FindDevices(vid, pid, index, cli.args.numeric) if cli.args.list: return list_devices(device_finder) print('Looking for devices...', flush=True) device_finder.run_forever()
def lint(cli): """Check keyboard and keymap for common mistakes. """ failed = [] # Determine our keyboard list if cli.args.all_kb: if cli.args.keyboard: cli.log.warning('Both --all-kb and --keyboard passed, --all-kb takes presidence.') keyboard_list = list_keyboards() elif not cli.config.lint.keyboard: cli.log.error('Missing required arguments: --keyboard or --all-kb') cli.print_help() return False else: keyboard_list = cli.config.lint.keyboard.split(',') # Lint each keyboard for kb in keyboard_list: if not is_keyboard(kb): cli.log.error('No such keyboard: %s', kb) continue # Gather data about the keyboard. ok = True keyboard_path = keyboard(kb) keyboard_info = info_json(kb) # Check for errors in the info.json if keyboard_info['parse_errors']: ok = False cli.log.error('%s: Errors found when generating info.json.', kb) if cli.config.lint.strict and keyboard_info['parse_warnings']: ok = False cli.log.error('%s: Warnings found when generating info.json (Strict mode enabled.)', kb) # Check the rules.mk file(s) rules_mk_assignment_errors = rules_mk_assignment_only(keyboard_path) if rules_mk_assignment_errors: ok = False cli.log.error('%s: Non-assignment code found in rules.mk. Move it to post_rules.mk instead.', kb) for assignment_error in rules_mk_assignment_errors: cli.log.error(assignment_error) # Keymap specific checks if cli.config.lint.keymap: if not keymap_check(kb, cli.config.lint.keymap): ok = False # Report status if not ok: failed.append(kb) # Check and report the overall status if failed: cli.log.error('Lint check failed for: %s', ', '.join(failed)) return False cli.log.info('Lint check passed!') return True