{"id":18552446,"url":"https://github.com/andrejewski/codo","last_synced_at":"2025-04-09T22:31:53.681Z","repository":{"id":205399158,"uuid":"711245162","full_name":"andrejewski/codo","owner":"andrejewski","description":"Code TODO-driven development","archived":false,"fork":false,"pushed_at":"2023-11-07T05:11:29.000Z","size":24,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-05T00:02:37.833Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andrejewski.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-10-28T16:41:55.000Z","updated_at":"2025-01-08T01:05:24.000Z","dependencies_parsed_at":"2023-11-07T06:24:51.635Z","dependency_job_id":"b15e7720-8635-44f0-a2a2-689647188c84","html_url":"https://github.com/andrejewski/codo","commit_stats":null,"previous_names":["andrejewski/codo"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrejewski%2Fcodo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrejewski%2Fcodo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrejewski%2Fcodo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrejewski%2Fcodo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andrejewski","download_url":"https://codeload.github.com/andrejewski/codo/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248123741,"owners_count":21051523,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T21:14:13.864Z","updated_at":"2025-04-09T22:31:53.391Z","avatar_url":"https://github.com/andrejewski.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Codo\n\u003e The code comment TODO tool\n\nMake TODO comments powerful with Codo, a command-line tool to search, manage, format, and validate your codebase's TODO comments.\n\n## Installation\n\nCodo is distributed as a Rust crate, so [Rustup](https://rustup.rs/) and then run:\n\n```sh\ncargo install codo\n```\n\n## TODO anatomy\n\nCodo-style TODO comments have these shapes:\n\n```rs\n// TODO: Simple example with no metadata\n// TODO(@chris): Example TODO assigned to \"chris\"\n// TODO(#123): Example TODO citing Github-like issue \"#123\"\n// TODO(PROJ-123): Example TODO citing a Jira-like issue\n// TODO(2023-11-01): Example TODO with a due date of November 1st, 2023\n// TODO(#123, @chris, 2023-11-01): Example of all three metadata pieces\n```\n\nDon't worry about the syntax too much though, `codo format` and `codo validate` as shown below will keep up the hygiene.\n\n## Basic commands\n\n### Search TODOs\n\n```sh\n# list all TODOs\ncodo list\n\n# list all overdue TODOs\ncodo list --overdue\n\n# list all unassigned TODOs\ncodo list --unassigned\n\n# list all TODOs assigned to someone\ncodo list --assignee=chris\n```\n\n### Get TODO stats\n\n```sh\n# Get total TODO count \ncodo stat\n\n# Get TODO count by assignee\ncodo stat --group-by=assignee\n```\n\n### Format TODOs\n\n```sh\ncodo format\n```\n\nThis command rewrites TODO comments into proper form. For examples:\n\n```\n// TODO example\n// todo example\n// ToDo example\n//    TODO: example\n```\n\nAll get formatted to `// TODO: example`. Version control is highly recommended, especially when running this command as it modifies files in-place.\n\n### Validate TODOs\n\nHave TODO hygiene you'd like to enforce? This command is for you:\n\n```sh\ncodo validate\n  --require-assignees\n  --require-due-dates\n  --require-issues\n```\n\nThis command will return a non-zero exit status and print out validation errors if there are any.\nA great tool to add to your pre-push/commit hooks and CI pipeline to force consistency.\n\n### Export TODOs\n\n```sh\ncodo export json\n```\n\nPrints out JSON in this shape:\n\n```json\n{\n  \"version\": \"\u003ccurrent codo version\u003e\",\n  \"todos\": [\n    {\n       \"assignee\": \"chris\",\n        \"due\": \"2023-11-01\",\n        \"issue\": \"#123\",\n        \"line\": 42,\n        \"note\": \"This is an example\",\n        \"path\": \"./README.md\"\n    }\n  ]\n}\n```\n\n### Various code mods\n\nThere are code mods you can use to manipulate TODOs. Some cool ones:\n\n```sh\n# Assign all TODOs which lack an issue with issue #123\ncodo mod add-issue-for-all-untracked --issue=\"#123\"\n\n# Bulk update TODO assignees\ncodo mod rename-assignee --from=\"old_name\" --to=\"new_name\"\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrejewski%2Fcodo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandrejewski%2Fcodo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrejewski%2Fcodo/lists"}