~ruther/qmk_firmware

3023015c5b9417b18b59be41664e2af8e9f18a79 — Erovia 4 years ago 1c81e69
Make sure 'cformat' only runs on core files (#12909)

Co-authored-by: Zach White <skullydazed@drpepper.org>
2 files changed, 17 insertions(+), 7 deletions(-)

M .github/workflows/format.yaml
M lib/python/qmk/cli/cformat.py
M .github/workflows/format.yaml => .github/workflows/format.yaml +1 -1
@@ 34,7 34,7 @@ jobs:
    - name: Run qmk cformat and qmk pyformat
      shell: 'bash {0}'
      run: |
        qmk cformat -n $(< ~/files.txt)
        qmk cformat --core-only -n $(< ~/files.txt)
        cformat_exit=$?
        qmk pyformat -n
        pyformat_exit=$?

M lib/python/qmk/cli/cformat.py => lib/python/qmk/cli/cformat.py +16 -6
@@ 65,11 65,21 @@ def cformat_run(files):
        return False


def filter_files(files):
def filter_files(files, core_only=False):
    """Yield only files to be formatted and skip the rest
    """
    if core_only:
        # Filter non-core files
        for index, file in enumerate(files):
            # The following statement checks each file to see if the file path is
            # - in the core directories
            # - not in the ignored directories
            if not any(i in str(file) for i in core_dirs) or any(i in str(file) for i in ignored):
                files[index] = None
                cli.log.debug("Skipping non-core file %s, as '--core-only' is used.", file)

    for file in files:
        if file.name.split('.')[-1] in c_file_suffixes:
        if file and file.name.split('.')[-1] in c_file_suffixes:
            yield file
        else:
            cli.log.debug('Skipping file %s', file)


@@ 78,6 88,7 @@ def filter_files(files):
@cli.argument('-n', '--dry-run', arg_only=True, action='store_true', help="Flag only, don't automatically format.")
@cli.argument('-b', '--base-branch', default='origin/master', help='Branch to compare to diffs to.')
@cli.argument('-a', '--all-files', arg_only=True, action='store_true', help='Format all core files.')
@cli.argument('--core-only', arg_only=True, action='store_true', help='Format core files only.')
@cli.argument('files', nargs='*', arg_only=True, type=normpath, completer=FilesCompleter('.c'), help='Filename(s) to format.')
@cli.subcommand("Format C code according to QMK's style.", hidden=False if cli.config.user.developer else True)
def cformat(cli):


@@ 85,7 96,7 @@ def cformat(cli):
    """
    # Find the list of files to format
    if cli.args.files:
        files = list(filter_files(cli.args.files))
        files = list(filter_files(cli.args.files, cli.args.core_only))

        if not files:
            cli.log.error('No C files in filelist: %s', ', '.join(map(str, cli.args.files)))


@@ 96,8 107,7 @@ def cformat(cli):

    elif cli.args.all_files:
        all_files = c_source_files(core_dirs)
        # The following statement checks each file to see if the file path is in the ignored directories.
        files = [file for file in all_files if not any(i in str(file) for i in ignored)]
        files = list(filter_files(all_files, True))

    else:
        git_diff_cmd = ['git', 'diff', '--name-only', cli.args.base_branch, *core_dirs]


@@ 117,7 127,7 @@ def cformat(cli):

    # Sanity check
    if not files:
        cli.log.error('No changed files detected. Use "qmk cformat -a" to format all files')
        cli.log.error('No changed files detected. Use "qmk cformat -a" to format all core files')
        return False

    # Run clang-format on the files we've found