<p>Today, I watched a video recording of a session by Ondřej Mirtes - the creator of PHPStan - on writing custom rules for PHPStan.</p>
<p>After explaining how to write them, he showed some examples of custom rules - one of which was ensuring a <code>Person</code> class couldn't be created outside of a <code>PersonRepository</code> class.</p>
<p>This seemed straightforwardso I thought about how I could do something similar within my <a href="/atdc">Drupal automated testing email course</a> to check my Drupal code.</p>
<p>Similar to Ondřej's example, I wondered if I could enforce that no post nodes should be created outside of the <code>PostBuilder</code> class by searchingfor any code like <code>Node::create(['type' => 'post'])</code>.</p>
<p>I was able to get a version working quickly and have <a href="https://gist.github.com/opdavies/a2f9d92cf3b67db6a64b9fca4e4e6697">posted it as a gist</a>.</p>
<p>I'm sure some improvements can be made, but it was a successful experiment and something I can see me using more in the future.</p>
format:full_html
processed:|
<p>Today, I watched a video recording of a session by Ondřej Mirtes - the creator of PHPStan - on writing custom rules for PHPStan.</p>
<p>After explaining how to write them, he showed some examples of custom rules - one of which was ensuring a <code>Person</code> class couldn't be created outside of a <code>PersonRepository</code> class.</p>
<p>This seemed straightforward so I thought about how I could do something similar within my <a href="/atdc">Drupal automated testing email course</a> to check my Drupal code.</p>
<p>Similar to Ondřej's example, I wondered if I could enforce that no post nodes should be created outside of the <code>PostBuilder</code> class by searching for any code like <code>Node::create(['type' => 'post'])</code>.</p>
<p>I was able to get a version working quickly and have <a href="https://gist.github.com/opdavies/a2f9d92cf3b67db6a64b9fca4e4e6697">posted it as a gist</a>.</p>
<p>I'm sure some improvements can be made, but it was a successful experiment and something I can see me using more in the future.</p>