Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Check for whitespace in CI #429

Closed
erlend-aasland opened this issue Mar 5, 2022 · 12 comments · Fixed by python/cpython#104275
Closed

Check for whitespace in CI #429

erlend-aasland opened this issue Mar 5, 2022 · 12 comments · Fixed by python/cpython#104275
Labels

Comments

@erlend-aasland
Copy link

erlend-aasland commented Mar 5, 2022

Consider adding a CI check for whitespace errors, a la git diff --check.

I've seen this idea surface a couple of times, most recently by @JelleZijlstra in python/cpython#31695 (comment)

@erlend-aasland
Copy link
Author

I remembered I got a PoC branch lying around: https://github.com/erlend-aasland/cpython/tree/add-whitespace-linter

@hugovk
Copy link
Member

hugovk commented Mar 5, 2022

Sounds good.

Looking at the erlend-aasland/cpython#14 PoC, some ideas:

  • Rather than only running on PRs, can it also run for pushes? That way contributors may see and fix a failure on their fork's CI even before opening a PR ("fast feedback loop")

  • How about using https://pre-commit.com ? There's a trailing-whitespace hook to trim trailing whitespace.

    • For developers who like pre-commit, it can autofix things for you before you even commit/push

    • For those who don't, there's absolutely no obligation to run locally and the CI will pick things up

    • Can run on pushes and PRs

    • Easily extensible, there are lots of other checks which may be useful (for example, check-yaml to validate CI config)

@erlend-aasland
Copy link
Author

Rather than only running on PRs, can it also run for pushes? That way contributors may see and fix a failure on their fork's CI even before opening a PR ("fast feedback loop")

+1

How about using https://pre-commit.com/ ?

Oooh, that sure looks nice!

@hugovk
Copy link
Member

hugovk commented Mar 5, 2022

Here's an example: hugovk/cpython#22

There's currently a lot of files with trimmable trailing whitespace, see:

So we could limit it to certain file types. For example types_or: [c, python]. And/or to certain directories.

@erlend-aasland
Copy link
Author

Here's an example: hugovk/cpython#22

Neat! Much more elegant than my PoC 😅

So we could limit it to certain file types. For example types: [c, python]. And/or to certain directories.

+1

@hugovk
Copy link
Member

hugovk commented Mar 5, 2022

I've updated hugovk/cpython#22 to remove the trailing whitespace, and add:

        types_or: [c, python]
        exclude: ^Lib/test/test_argparse.py$

I excluded that file because a couple of its asserts depend on trailing whitespace:

https://github.com/python/cpython/blob/6927632492cbad86a250aa006c1847e03b03e70b/Lib/test/test_argparse.py#L2179
https://github.com/python/cpython/blob/6927632492cbad86a250aa006c1847e03b03e70b/Lib/test/test_argparse.py#L2196

@arhadthedev
Copy link
Member

I excluded that file because a couple of its asserts depend on trailing whitespace

These whitespaces are invisible to a programmer who reads the assertions. Can the following be used instead?

         self.assertEqual(parser.format_help(), textwrap.dedent('''\
             usage: PROG [-h] {}
             main description
             positional arguments:
-              {}          
+              {}          ''' + '''
             options:
               -h, --help  show this help message and exit
         '''))

@ericvsmith
Copy link
Member

I excluded that file because a couple of its asserts depend on trailing whitespace

These whitespaces are invisible to a programmer who reads the assertions. Can the following be used instead?

I agree that's better. Also a comment explaining why there are trailing spaces and why the string is constructed that way would help.

@hugovk
Copy link
Member

hugovk commented Mar 14, 2022

Well turns out there was already a whitespace check run on the CI as part of make patchcheck.

It was broken but has now been fixed: python/cpython#31708

Do we still need the pre-commit suggestion in hugovk/cpython#22 or this issue?

@sweeneyde
Copy link
Member

I think it would be nice to have the patchcheck as its own GitHub Action with its own green checkmark, so that sort of common issue gets noticed within seconds, rather than having to wait on the build and the whole test suite to run.

Theoretically, I think we should be able to use actions/setup-python@v3 and not even have to build python at all. Currently, patchcheck uses sys.version to determine what the base branch is, but it could be determined by some sort of patchcheck.py --base_branch ${{ github.base_ref }} feature instead. But I am no wizard at GitHub Actions.

@hugovk
Copy link
Member

hugovk commented May 7, 2023

Please see PR python/cpython#104275.

@erlend-aasland
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants