[![image.png](https://i.postimg.cc/0yC7LPx6/image.png)](https://postimg.cc/75fCzv5D)
![PyPI - Version](https://img.shields.io/pypi/v/todo-or-not?color=green)
[![Coverage Status](https://coveralls.io/repos/github/Start-Out/todo-or-not/badge.svg?branch=dev/staging&kill_cache=1)](https://coveralls.io/github/Start-Out/todo-or-not?branch=dev/staging&kill_cache=1)
![PyPI - Downloads](https://img.shields.io/pypi/dm/todo-or-not)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
![PyPI - Python Version](https://img.shields.io/pypi/pyversions/todo-or-not)
![PyPI - License](https://img.shields.io/pypi/l/todo-or-not?color=purple)
<!-- TOC start (generated with https://github.com/derlin/bitdowntoc) -->
- [Quick Start](#quick-start)
- [Overview](#overview)
- [Example](#example)
- [Workflow Inputs](#workflow-inputs)
- [Contributing](#contributing)
- [Help](#help)
- [Fun Promo Video](#fun-promo-video)
<!-- TOC end -->
<!-- TOC --><a name="quick-start"></a>
## Quick Start
Install [the app on GitHub](https://github.com/apps/todo-or-not) and [use todoon in your workflows!](https://github.com/marketplace/actions/todo-or-not)
[<img src="https://github.com/user-attachments/assets/3db70b41-f7af-4dcf-aae1-44d44e3d4340" alt="Install TODO-Or-Not on GitHub" width="45%"/>](https://github.com/apps/todo-or-not/installations/new)
```yaml
- name: run-todoon
uses: Start-Out/todo-or-not@v0.14.7
```
[Try it out locally! (see on PyPi)](https://pypi.org/project/todo-or-not/)
Or, if you are using Arch Linux, there is an [AUR Package](https://aur.archlinux.org/packages/python-todo-or-not) maintained by @mward25.
```bash
pip install --upgrade todo-or-not
todoignore-util -pc .gitignore
todoignore-util -ut .git
todoon
```
<!-- TOC --><a name="overview"></a>
## Overview
> TODO or not to do, that is the question
TODO Or Not (todoon) is, in essence, a simple tool that checks your project for TODOs and FIXMEs and lets you know where they are.
You can also integrate this tool into your GitHub workflow via actions, and automate generating issues from the discovered TODOs and
FIXMEs. These generated issues will include a link to the file in GitHub as well as the surrounding lines. [Check out the wiki](https://github.com/Start-Out/todo-or-not/wiki/Commands-%E2%80%90-todoignore%E2%80%90util) for
more details on the GitHub Issues integration!
<!-- TOC --><a name="example"></a>
## Example
Check out [this example code](blob/dev/staging/example.py) and
the [issues that it yielded](https://github.com/Start-Out/todo-or-not/issues?q=is%3Aissue+author%3Aapp%2Ftodo-or-not+label%3Aexample+)!
```py
###########################
# Example usage of # todoon
###########################
def an_unfinished_function():
# TODO Finish documenting todo-or-not
print("Hello, I'm not quite done, there's more to do!")
print("Look at all these things I have to do!")
a = 1 + 1
b = a * 2
print("Okay I'm done!")
def a_broken_function():
# This line might not show up in the generated issue because it's too far away
# from the line that triggered the issue.
# The search for pertinent lines will stop when it hits a line break or the
# maximum number of lines, set by PERTINENT_LINE_LIMIT
a = [
1, 1, 2, 3
]
b = sum(a)
c = b * len(a)
return c / 0 # FIXME I just don't know why this doesn't work!
# Notice that this line will be collected
# But this one won't, because there's some whitespace between it and the trigger!
def a_skipping_example():
# Since the line below has `# todoon` in it, the checker will give it a pass even though it has the magic words!
print("Sometimes you really have to write TODO or FIXME, like this!") # todoon
def a_very_pretty_example():
# TODO Titled Issue! | In this format, you can define a title and a body! Also labels like #example or #enhancement
print("Check this out!")
```
<!-- TOC --><a name="workflow-inputs"></a>
## Workflow Inputs
- `region` [default: "en_us"] Give an ISO code for todoon to report in your language (limited language support, [see the wiki](https://github.com/Start-Out/todo-or-not/wiki/Settings#region))
- `issues` [default: true] If true, will generate issues from TODO/FIXMEs found. Otherwise, TODO/FIXMEs will just be printed to workflow logs
- `max_issues` [default: 10] Maximum number of issues todoon may generate, if any more are attempted then the run will fail
- `closed_issue_check` [default: 0] todoon will fail if any more than the specified number of closed issues are found (set to -1 to allow any number of closed issues)
- `silent` [default: true] If true, todoon will NOT exit nonzero if any TODO/FIXMEs are found (good for generating issues when expected)
- `verbosity` [default: 2]
0. --very-quiet (none)
1. --quiet (summary)
2. (default)
3. --verbose (all)
- `python_version` [default: "3.11.7"] Version of Python to use (defaults to 3.11.7)
- `todoon_version` [default: ""] Version of todoon to use ("" for the latest)
<!-- TOC --><a name="contributing"></a>
## Contributing
Please target `dev/contribute` with your fork, and please use the appropriate PR template!
<!-- TOC --><a name="help"></a>
## Help
[See the wiki!](https://github.com/Start-Out/todo-or-not/wiki)
<!-- TOC --><a name="fun-promo-video"></a>
## Fun Promo Video
https://github.com/Start-Out/todo-or-not/assets/10158233/d2c860f6-efd8-4ca4-b5d6-fcabe0bae6ce
Raw data
{
"_id": null,
"home_page": "https://github.com/apps/todo-or-not",
"name": "todo-or-not",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.11",
"maintainer_email": null,
"keywords": "todo, github",
"author": "TrentonYo",
"author_email": "trentonyo@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/2d/a8/e0162a2da7e31afac0bd86bc5afa0efaebbe2bccbe57f31df4d56f1b9b92/todo_or_not-0.14.7.tar.gz",
"platform": null,
"description": "[![image.png](https://i.postimg.cc/0yC7LPx6/image.png)](https://postimg.cc/75fCzv5D)\n\n![PyPI - Version](https://img.shields.io/pypi/v/todo-or-not?color=green)\n[![Coverage Status](https://coveralls.io/repos/github/Start-Out/todo-or-not/badge.svg?branch=dev/staging&kill_cache=1)](https://coveralls.io/github/Start-Out/todo-or-not?branch=dev/staging&kill_cache=1)\n![PyPI - Downloads](https://img.shields.io/pypi/dm/todo-or-not)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/todo-or-not)\n![PyPI - License](https://img.shields.io/pypi/l/todo-or-not?color=purple)\n\n<!-- TOC start (generated with https://github.com/derlin/bitdowntoc) -->\n\n- [Quick Start](#quick-start)\n- [Overview](#overview)\n- [Example](#example)\n- [Workflow Inputs](#workflow-inputs)\n- [Contributing](#contributing)\n- [Help](#help)\n- [Fun Promo Video](#fun-promo-video)\n\n<!-- TOC end -->\n\n<!-- TOC --><a name=\"quick-start\"></a>\n## Quick Start\n\nInstall [the app on GitHub](https://github.com/apps/todo-or-not) and [use todoon in your workflows!](https://github.com/marketplace/actions/todo-or-not)\n\n[<img src=\"https://github.com/user-attachments/assets/3db70b41-f7af-4dcf-aae1-44d44e3d4340\" alt=\"Install TODO-Or-Not on GitHub\" width=\"45%\"/>](https://github.com/apps/todo-or-not/installations/new)\n\n```yaml\n - name: run-todoon\n uses: Start-Out/todo-or-not@v0.14.7 \n```\n\n[Try it out locally! (see on PyPi)](https://pypi.org/project/todo-or-not/) \nOr, if you are using Arch Linux, there is an [AUR Package](https://aur.archlinux.org/packages/python-todo-or-not) maintained by @mward25.\n\n```bash\npip install --upgrade todo-or-not\ntodoignore-util -pc .gitignore \ntodoignore-util -ut .git\ntodoon\n```\n\n<!-- TOC --><a name=\"overview\"></a>\n## Overview\n\n> TODO or not to do, that is the question\n\nTODO Or Not (todoon) is, in essence, a simple tool that checks your project for TODOs and FIXMEs and lets you know where they are. \n\nYou can also integrate this tool into your GitHub workflow via actions, and automate generating issues from the discovered TODOs and\nFIXMEs. These generated issues will include a link to the file in GitHub as well as the surrounding lines. [Check out the wiki](https://github.com/Start-Out/todo-or-not/wiki/Commands-%E2%80%90-todoignore%E2%80%90util) for \nmore details on the GitHub Issues integration!\n\n\n<!-- TOC --><a name=\"example\"></a>\n## Example\n\nCheck out [this example code](blob/dev/staging/example.py) and\nthe [issues that it yielded](https://github.com/Start-Out/todo-or-not/issues?q=is%3Aissue+author%3Aapp%2Ftodo-or-not+label%3Aexample+)!\n\n```py\n###########################\n# Example usage of # todoon\n###########################\n\ndef an_unfinished_function():\n # TODO Finish documenting todo-or-not\n print(\"Hello, I'm not quite done, there's more to do!\")\n print(\"Look at all these things I have to do!\")\n a = 1 + 1\n b = a * 2\n print(\"Okay I'm done!\")\n\n\ndef a_broken_function():\n # This line might not show up in the generated issue because it's too far away\n # from the line that triggered the issue.\n # The search for pertinent lines will stop when it hits a line break or the\n # maximum number of lines, set by PERTINENT_LINE_LIMIT\n a = [\n 1, 1, 2, 3\n ]\n b = sum(a)\n c = b * len(a)\n return c / 0 # FIXME I just don't know why this doesn't work!\n # Notice that this line will be collected\n\n # But this one won't, because there's some whitespace between it and the trigger!\n\n\ndef a_skipping_example():\n # Since the line below has `# todoon` in it, the checker will give it a pass even though it has the magic words!\n print(\"Sometimes you really have to write TODO or FIXME, like this!\") # todoon\n\n\ndef a_very_pretty_example():\n # TODO Titled Issue! | In this format, you can define a title and a body! Also labels like #example or #enhancement\n print(\"Check this out!\")\n\n```\n\n<!-- TOC --><a name=\"workflow-inputs\"></a>\n## Workflow Inputs\n\n- `region` [default: \"en_us\"] Give an ISO code for todoon to report in your language (limited language support, [see the wiki](https://github.com/Start-Out/todo-or-not/wiki/Settings#region))\n- `issues` [default: true] If true, will generate issues from TODO/FIXMEs found. Otherwise, TODO/FIXMEs will just be printed to workflow logs\n- `max_issues` [default: 10] Maximum number of issues todoon may generate, if any more are attempted then the run will fail\n- `closed_issue_check` [default: 0] todoon will fail if any more than the specified number of closed issues are found (set to -1 to allow any number of closed issues)\n- `silent` [default: true] If true, todoon will NOT exit nonzero if any TODO/FIXMEs are found (good for generating issues when expected)\n- `verbosity` [default: 2]\n 0. --very-quiet (none) \n 1. --quiet (summary) \n 2. (default) \n 3. --verbose (all)\n- `python_version` [default: \"3.11.7\"] Version of Python to use (defaults to 3.11.7)\n- `todoon_version` [default: \"\"] Version of todoon to use (\"\" for the latest)\n\n<!-- TOC --><a name=\"contributing\"></a>\n## Contributing\n\nPlease target `dev/contribute` with your fork, and please use the appropriate PR template! \n\n<!-- TOC --><a name=\"help\"></a>\n## Help\n\n[See the wiki!](https://github.com/Start-Out/todo-or-not/wiki)\n\n<!-- TOC --><a name=\"fun-promo-video\"></a>\n## Fun Promo Video\n\nhttps://github.com/Start-Out/todo-or-not/assets/10158233/d2c860f6-efd8-4ca4-b5d6-fcabe0bae6ce\n\n\n\n",
"bugtrack_url": null,
"license": "GPL-3.0-only",
"summary": "todoon integrates the TODOs in your codebase with your GitHub repository",
"version": "0.14.7",
"project_urls": {
"Documentation": "https://github.com/Start-Out/todo-or-not/wiki",
"Homepage": "https://github.com/apps/todo-or-not",
"Repository": "https://github.com/Start-Out/todo-or-not"
},
"split_keywords": [
"todo",
" github"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "70021fffafb99eb9567440257d6c3e72b2bb24952fd8221afe7b8838b198d6fa",
"md5": "bbe654be3ce9431ea14da2f07c9b27e6",
"sha256": "82abea0e64ee63da742f9daa29a79e7b208ff901bbea6eefeb8905227d0f9ffd"
},
"downloads": -1,
"filename": "todo_or_not-0.14.7-py3-none-any.whl",
"has_sig": false,
"md5_digest": "bbe654be3ce9431ea14da2f07c9b27e6",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.11",
"size": 35045,
"upload_time": "2024-10-23T06:52:41",
"upload_time_iso_8601": "2024-10-23T06:52:41.366897Z",
"url": "https://files.pythonhosted.org/packages/70/02/1fffafb99eb9567440257d6c3e72b2bb24952fd8221afe7b8838b198d6fa/todo_or_not-0.14.7-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2da8e0162a2da7e31afac0bd86bc5afa0efaebbe2bccbe57f31df4d56f1b9b92",
"md5": "db1700f0b8e9e194ef4641366910060d",
"sha256": "82fd20524419c591bdab3d7f5f05ed4669cfd164edac16952576ab428d0ebf2e"
},
"downloads": -1,
"filename": "todo_or_not-0.14.7.tar.gz",
"has_sig": false,
"md5_digest": "db1700f0b8e9e194ef4641366910060d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.11",
"size": 34283,
"upload_time": "2024-10-23T06:52:43",
"upload_time_iso_8601": "2024-10-23T06:52:43.007110Z",
"url": "https://files.pythonhosted.org/packages/2d/a8/e0162a2da7e31afac0bd86bc5afa0efaebbe2bccbe57f31df4d56f1b9b92/todo_or_not-0.14.7.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-23 06:52:43",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "apps",
"github_project": "todo-or-not",
"github_not_found": true,
"lcname": "todo-or-not"
}