PHPackages                             nilportugues/php\_todo - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. nilportugues/php\_todo

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

nilportugues/php\_todo
======================

Looks into the code using a user-defined list of to-do phrases and stops commit if the total amount increased or is above a threshold.

1.0.0(10y ago)1210.0kMITPHPPHP &gt;=5.4

Since Nov 10Pushed 10y ago1 watchersCompare

[ Source](https://github.com/nilportugues/php_todo_finder)[ Packagist](https://packagist.org/packages/nilportugues/php_todo)[ Docs](http://nilportugues.com)[ RSS](/packages/nilportugues-php-todo/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (1)Dependencies (3)Versions (2)Used By (0)

PHP To-do Finder
================

[](#php-to-do-finder)

[![Scrutinizer Code Quality](https://camo.githubusercontent.com/933446e585ce0fc6960056abc4f1365e824c500c3ae20a34be435bb893331ff5/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6e696c706f727475677565732f7068705f746f646f5f66696e6465722f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/nilportugues/php_todo_finder/?branch=master)[![SensioLabsInsight](https://camo.githubusercontent.com/6abd5136b2bb8f7c2b86b5244d066bcf69d313335eaf0583244561c14ca13b6e/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f64653466633839372d653162632d346162322d396163322d6233353138353338666164312f6d696e692e706e67)](https://insight.sensiolabs.com/projects/de4fc897-e1bc-4ab2-9ac2-b3518538fad1)[![Latest Stable Version](https://camo.githubusercontent.com/9a1f7df8ac5e94653767a1406b0735f254e3b9e1f480a6e06dc6026edb4684ff/68747470733a2f2f706f7365722e707567782e6f72672f6e696c706f727475677565732f7068705f746f646f2f762f737461626c65)](https://packagist.org/packages/nilportugues/php_todo)[![Total Downloads](https://camo.githubusercontent.com/2ed20f89581313c1cde8e14e87afbe42919abdacc3696d8b1ec5618defba429e/68747470733a2f2f706f7365722e707567782e6f72672f6e696c706f727475677565732f7068705f746f646f2f646f776e6c6f616473)](https://packagist.org/packages/nilportugues/php_todo)[![License](https://camo.githubusercontent.com/5c4caea2ffb35603283a3b23e63d0c7f169bef9d8d89d91b2d1ce202db88b9f0/68747470733a2f2f706f7365722e707567782e6f72672f6e696c706f727475677565732f7068705f746f646f2f6c6963656e7365)](https://packagist.org/packages/nilportugues/php_todo)[![Donate](https://camo.githubusercontent.com/7b6de155df30b37b25eb5fec52f9213680c3dbf067dfb7d7e2850ac4096c7d05/68747470733a2f2f7777772e70617970616c6f626a656374732e636f6d2f656e5f55532f692f62746e2f62746e5f646f6e6174655f534d2e676966)](https://paypal.me/nilportugues)

Why
---

[](#why)

Keep the @todo count for each commit.

Do not allow commits if the total amount of @todo increased or is above a user-defined threshold.

Purpose is to keep the @todo list low and forcing cleaning the code or resolving them.

**Based on the ideas of:**

-

Installation
------------

[](#installation)

Use [Composer](https://getcomposer.org) to install the package:

```
$ composer require --dev nilportugues/php_todo

```

Usage
-----

[](#usage)

It is really this simple:

```
$ php bin/php_todo find

```

### Configuration file

[](#configuration-file)

- Define the todo annotations to look for in the code.
- Define the amount of @todo that will be tolerated.

When run the first time, if no `php_todo_finder.yml` file is found you will have to create it.

A configuration for instance, should formatted as follows:

```
todo_finder:
  total_allowed: 5
  expressions:
    - @todo
    - TODO
    - refactor
    - FIX ME
```

You can specify an alternate location for the configuration file by passing in the `-c` parameter. Example:

```
$  php bin/php_todo find -c configs/php_todo_finder.yml src/

```

Contribute
----------

[](#contribute)

Contributions to the package are always welcome!

- Report any bugs or issues you find on the [issue tracker](https://github.com/nilportugues/php_todo_finder/issues/new).
- You can grab the source code at the package's [Git repository](https://github.com/nilportugues/php_todo_finder).

Support
-------

[](#support)

Get in touch with me using one of the following means:

- Emailing me at
- Opening an [Issue](https://github.com/nilportugues/php_todo_finder/issues/new)

Authors
-------

[](#authors)

- [Nil Portugués Calderó](http://nilportugues.com)
- [The Community Contributors](https://github.com/nilportugues/php_todo_finder/graphs/contributors)

License
-------

[](#license)

The code base is licensed under the [MIT license](LICENSE).

###  Health Score

31

—

LowBetter than 68% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity25

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity58

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 84.6% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

3836d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/beba5d66ff48128da92c91850e69b9294768718bcdc12e61cc9ee8453d0d6b69?d=identicon)[nilportugues](/maintainers/nilportugues)

---

Top Contributors

[![nilportugues](https://avatars.githubusercontent.com/u/550948?v=4)](https://github.com/nilportugues "nilportugues (11 commits)")[![mathewpeterson](https://avatars.githubusercontent.com/u/203190?v=4)](https://github.com/mathewpeterson "mathewpeterson (2 commits)")

---

Tags

cicommentcommentscomposercontinuous-integrationgitgit-hookgit-hookshookphpphp7qualityquality-controlphpfixerfunctiongitfunctionsHOOKcheckerforbidden

### Embed Badge

![Health badge](/badges/nilportugues-php-todo/health.svg)

```
[![Health](https://phpackages.com/badges/nilportugues-php-todo/health.svg)](https://phpackages.com/packages/nilportugues-php-todo)
```

###  Alternatives

[nilportugues/php_backslasher

Adds all PHP internal functions to its namespace by adding backslash to them. Improves the application's performance when OPCache is on.

889.3k18](/packages/nilportugues-php-backslasher)[ramsey/conventional-commits

A PHP library for creating and validating commit messages according to the Conventional Commits specification. Includes a CaptainHook action!

1931.2M122](/packages/ramsey-conventional-commits)[bruli/php-git-hooks

Git hooks for PHP projects.

675370.8k5](/packages/bruli-php-git-hooks)[nilportugues/php_forbidden

Looks into the code using a user-defined list of forbidden function in a given path.

108.1k](/packages/nilportugues-php-forbidden)[marcocesarato/php-conventional-changelog

Generate changelogs and release notes from a project's commit messages and metadata and automate versioning with semver.org and conventionalcommits.org

2511.3M109](/packages/marcocesarato-php-conventional-changelog)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
