Skip to main content

Analysing churn in Drupal core

After reading a blog post by Matthias Noback on keeping an eye on code churn, I was motivated to run the churn php library over some modules in core to gauge the level of churn.

Is this something you might like to do on your modules? Read on for more information.

by lee.rowlands /

What is churn

As Matthias details in his blog post - churn is a measure of the number of times a piece of code has been changed over time. The red flags start to crop up when you have high complexity and high churn.

Enter churn-php

Churn php is a library that analyses PHP code that has its history in git to identify high churn/complexity scores.

You can either install it with composer require bmitch/churn-php --dev or run it using docker docker run --rm -ti -v $PWD:/app dockerizedphp/churn run /path/to/code

Some results from core

So I ran it for some modules I look after in core, as well as the Drupal\Core\Entity namespace.

Block Content

File Times Changed Complexity Score
core/modules/block_content/src/Entity/BlockContent.php 41 6 1
core/modules/block_content/src/BlockContentForm.php 32 6 0.78
core/modules/block_content/src/Plugin/Block/BlockContentBlock.php 20 6 0.488
core/modules/block_content/src/Tests/BlockContentTestBase.php 16 6 0.39
core/modules/block_content/src/BlockContentTypeForm.php 18 4 0.347
core/modules/block_content/src/Controller/BlockContentController.php 8 6 0.195


File Times Changed Complexity Score
core/modules/comment/src/CommentForm.php 60 45 1
core/modules/comment/src/Entity/Comment.php 55 25 0.548
core/modules/comment/src/Tests/CommentTestBase.php 33 29 0.426
core/modules/comment/src/Controller/CommentController.php 32 20 0.274
core/modules/comment/src/CommentViewBuilder.php 37 16 0.25
core/modules/comment/src/Plugin/Field/FieldFormatter/CommentDefaultFormatter.php 32 18 0.24
core/modules/comment/src/Form/CommentAdminOverview.php 29 17 0.191
core/modules/comment/src/CommentAccessControlHandler.php 17 28 0.19
core/modules/comment/src/CommentLinkBuilder.php 15 29 0.17
core/modules/comment/src/CommentManager.php 29 15 0.157


File Times Changed Complexity Score
core/lib/Drupal/Core/Entity/ContentEntityBase.php 115 173 0.808
core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php 61 196 0.465
core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php 56 203 0.427
core/lib/Drupal/Core/Entity/Entity.php 131 43 0.212
core/lib/Drupal/Core/Entity/ContentEntityStorageBase.php 41 105 0.16


So, what to do with these results?

Well I think if you're looking to simplify your code-base and identify places that would warrant refactoring, those with a high 'churn' score would be a good place to start.

What do you think? Let us know in the comments.

Posted by lee.rowlands
Senior Developer