{"id":42829903,"url":"https://github.com/euforic/todos","last_synced_at":"2026-01-30T11:22:56.790Z","repository":{"id":101744996,"uuid":"609006074","full_name":"euforic/todos","owner":"euforic","description":"Golang TODO style comment parser","archived":false,"fork":false,"pushed_at":"2023-03-10T17:58:12.000Z","size":44,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-06-20T22:33:55.686Z","etag":null,"topics":["cli","fixme","linter","todos"],"latest_commit_sha":null,"homepage":"https://euforic.in/todos/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/euforic.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-03T07:10:48.000Z","updated_at":"2023-03-18T19:25:02.000Z","dependencies_parsed_at":"2023-05-04T22:30:54.102Z","dependency_job_id":null,"html_url":"https://github.com/euforic/todos","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/euforic/todos","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/euforic%2Ftodos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/euforic%2Ftodos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/euforic%2Ftodos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/euforic%2Ftodos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/euforic","download_url":"https://codeload.github.com/euforic/todos/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/euforic%2Ftodos/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28911821,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-30T08:15:08.179Z","status":"ssl_error","status_checked_at":"2026-01-30T08:14:31.507Z","response_time":66,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["cli","fixme","linter","todos"],"created_at":"2026-01-30T11:22:54.927Z","updated_at":"2026-01-30T11:22:56.785Z","avatar_url":"https://github.com/euforic.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Todos\n\n[![Go Report Card](https://goreportcard.com/badge/github.com/euforic/todos)](https://goreportcard.com/report/github.com/euforic/todos)\n[![Go Reference](https://pkg.go.dev/badge/github.com/euforic/todos/todos.svg)](https://pkg.go.dev/github.com/euforic/todos/todos)\n[![ci-badger-tests](https://github.com/euforic/todos/actions/workflows/lint.yml/badge.svg)](https://github.com/euforic/todos/actions/workflows/lint.yml)\n[![Sourcegraph](https://sourcegraph.com/github.com/euforic/todos/-/badge.svg)](https://sourcegraph.com/github.com/euforic/todos?badge)\n\nThis is a command-line program written in Go that searches for `// TODO: xxxx` style comments in a directory and outputs them to the console or in JSON format.\n\n## Usage\n\n```bash\ntodos [options] \u003cdir\u003e\n```\n\nThe program accepts the following command-line arguments:\n\n- `-ignore`: A comma-separated list of files and directories to ignore, in gitignore format.\n- `-sortby`: Sort results by field (`author`, `file`, `line`, `type`, or `text`)\n- `-output`: Output style (table, file, json). Default: table\n- `-types`: A comma-separated list of comment types to search for. The default is \"TODO,FIXME\".\n- `-hidden`: Search hidden files and directories.\n- `-permissive`: Permissive mode (looser regex, but can match more than intended, strict format is 'TYPE(author): text' where author is optional)\n- `-format`: Uses the provide go template to output the result\n- `-no-gitignore`: Ignore .gitignore file\n- `-validate-max`: Validate that the number of comments is less than or equal to the max.\n\n## Install\n\nTo install the program, run the following command:\n\n```bash\ngo install github.com/euforic/todos@latest\n```\n\n## Running the Program\n\nTo run the program for the current dir, execute the following command:\n\n```bash\ntodos\n```\n\nYou can also pass command-line arguments to the program. For example, to search for comments in the directory \"myproject\" and output the results in JSON format, run the following command:\n\n```bash\ntodos -output json ./myproject\n```\n\n### Search a Specific Directory\n\nTo search a specific directory, use `todos [options] \u003cdir\u003e` the first arg is the directory path. For example, to search the directory `~/projects/myproject`, run the following command:\n\n```bash\ntodos ~/projects/myproject\n```\n\n### Ignore Files and Directories\n\nTo ignore files and directories, use the `-ignore` flag followed by a comma-separated list of files and directories in gitignore format. For example, to ignore files with the extensions `.txt` and `.log`, and directories named `vendor` and `node_modules`, run the following command:\n\n```bash\ntodos -ignore \"*.txt,*.log,vendor/,node_modules/\"\n```\n\n### Output in Format Style\n\nTo output the results in the chosen format (json, file, table), use the `-output` flag. For example, to output the results in json format, run the following command:\n\n```bash\ntodos -output json\n```\n\n### Sort Results\n\nTo sort the results, use the `-sortby` flag followed by the field to sort by. The valid fields are `author`, `file`, `line`, `type`, and `text`. For example, to sort the results by comment type, run the following command:\n\n```bash\ntodos -sortby type\n```\n\nTo sort in descending order add the postfix `:desc`. For example to sort by author in decending order, you would run the following command:\n\n```bash\ntodos -sortby author:desc\n```\n\n### Search for Different Comment Types\n\nTo search for different types of comments, use the `-types` flag followed by a comma-separated list of comment types. For example, to search for comments with the types `TODO`, `FIXME`, and `NOTE`, run the following command:\n\n```bash\ntodos -types=TODO,FIXME,NOTE\n```\n\n### Format\n\nTo format the output of the comments, use the `-format` flag followed by a Go template string. For example, to see all of the comments, use the following command:\n\n```bash\ntodos -format \"{{range .}}{{ .File}}\\n  Line: {{.Line}}\\n  Text: {{.Text}}\\n  Author: {{- .Author}}\\n\\n{{end}}\"\n```\n\nTo use a template file, use the following command:\n\n```bash\ntodos -format \"$(cat some.template)\"\n```\n\n### Validate Max\n\nTo validate the maximum amount of comments does not exceed a certin value, use the `-validate-max` flag followed by the maximium number of comments. For example, to limit the maximum amount of comments to `20`, run the following command:\n\n```bash\ntodos -validate-max 20\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feuforic%2Ftodos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feuforic%2Ftodos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feuforic%2Ftodos/lists"}