Hi. I propose that Django starts using 'black' [0] to auto-format all Python code. For those unfamiliar with 'black' I recommend reading the the projects README. The short version: it aims to reduce bike-shedding and non value-adding discussions; saving time reviewing code; and making the barrier to entry lower by taking some uncompromissing choices with regards to formatting. This is similar to tools such as 'gofmt' for Go and 'prettier' for Javascript.
Personally I first got involved contributing to Django couple of weeks back, and from anecdotal experience I can testify to how 'formatting of code' creates a huge barrier for entry. My PR at the time went multiple times back and forth tweaking formatting. Before this, I had to research the style used by exploring the docs at length and reading at least 10-20 different source – and even those were not always consistent. At the end of the day I felt like almost 50% of the time I used on the patch was not used on actually solving the issue at hand. Thinking about code formatting in 2019 is a mental energy better used for other things, and it feels unnecessary that core developers on Django spend their time "nit-picking" on these things. I recently led the efforts to make this change where I work. We have a 200K+ LOC Django code-base with more than 30K commits. Some key take-aways: it has drastically changed the way we work with code across teams, new engineers are easier on-boarded, PR are more focused on architectural choices and "naming things", existing PRs before migration had surprisingly few conflicts and were easy to fix, hot code paths are already "blameable" and it's easy to blame a line of code and go past the "black-commit", and lastly the migration went without any issues or down-time. I had some really fruitful discussions at DjangoCon Europe this week on this very topic, and it seems we are not alone in these experiences. I would love to hear from all of you and hope that we can land on something that will enable *more* people to easier contribute back to this project. I've set up how this _could_ look depending on some configurables in Black: * Default config: https://github.com/hermansc/django/pull/1 * Line length kept at 119: https://github.com/hermansc/django/pull/3 * Line length kept at 119, no string normalization: https://github.com/hermansc/django/pull/2 Please have a look at the Black documentation. It explains the benefits better than I possibly could do here. With kind regards, Herman Schistad [0]: https://github.com/ambv/black -- You received this message because you are subscribed to the Google Groups "Django developers (Contributions to Django itself)" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/django-developers. To view this discussion on the web visit https://groups.google.com/d/msgid/django-developers/CAN%3DnMTx0EE5WfXuccv_e3MBuCxp9u_pAV_ow5MxNST6MptTDBw%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
