Leasot
Intelligently parse and output TODOs and FIXMEs from comments in your files
Easily extract, collect and report TODOs and FIXMEs in your code. This project uses regex in order
to extract your todos from comments.
TODO: add some info
- Spaces are optional.
- Colon is optional.
- Must be in a comment (line or block) in its' own line (
some code(); //TODO: do something
is not supported). - Can be prefixed with a @ (i.e @TODO).
- Spaces are trimmed around comment text.
- Supported default types are
TODO
and FIXME
- case insensitive. - Additional types can be added (using
tags
in cli and customTags
in leasot.parse
) - New extensions can be associated with bundled parsers as many languages have overlapping syntax
- Supports both leading and trailing references. Examples:
// TODO(tregusti): Make this better
// TODO: Text /tregusti
Supported languages
49+ languages are supported, pull requests for additional language support is most welcomed!
Usage in command line
npm install --global leasot
Command line help
$ leasot --help
Usage: leasot [options] <file ...>
Parse and output TODOs and FIXMEs from comments in your files
Options:
-V, --version output the version number
-A, --associate-parser [ext,parser] associate unknown extensions with bundled parsers (parser optional / default: defaultParser) (default: {})
-i, --ignore <patterns> add ignore patterns (default: [])
-I, --inline-files parse possible inline files (default: false)
-r, --reporter [reporter] use reporter (table|json|xml|markdown|vscode|raw) (default: table) (default: "table")
-S, --skip-unsupported skip unsupported filetypes (default: false)
-t, --filetype [filetype] force the filetype to parse. Useful for streams (default: .js)
-T, --tags <tags> add additional comment types to find (alongside todo & fixme) (default: [])
-x, --exit-nicely exit with exit code 0 even if todos/fixmes are found (default: false)
-h, --help output usage information
Examples:
$ leasot index.js
$ leasot '**/*.php'
$ leasot 'app/**/*.js' test.rb
$ leasot --reporter json index.js
$ leasot --tags review index.js
$ leasot 'app/**/*.js' --ignore '**/custom.js'
$ leasot --tags review index.js
$ cat index.coffee | leasot --filetype .coffee
$ leasot 'tests/**/*.styl' --reporter json | jq 'map(select(.tag == "TODO"))' | leasot-reporter
$ leasot -A '.svelte,twigParser' -A '.svelte,defaultParser' 'frontend/*.svelte'
Usage in NPM scripts
Use leasot -x
in order to prevent exiting with a non-zero exit code. This is a good solution if you plan to
run leasot
in a CI tool to generate todos.
{
"scripts": {
"todo": "leasot 'src/**/*.js'",
"todo-ci": "leasot -x --reporter markdown 'src/**/*.js' > TODO.md"
},
"devDependencies": {
"leasot": "^7.0.0"
}
}
Programmatic Installation
npm install --save-dev leasot
Programmatic Examples
const fs = require('fs');
const leasot = require('leasot');
const contents = fs.readFileSync('./contents.js', 'utf8');
const filetype = path.extname('./contents.js');
const file = 'contents.js';
const todos = leasot.parse(contents, { extension: filetype, filename: file });
const output = leasot.report(todos, 'json', { spacing: 2 });
console.log(output);
Leasot with build tools
API
const leasot = require('leasot');
See main exported functions
Mainly, you should be using 2 functions:
- parse for parsing file contents
- report for reporting the todos
Type documentation
Built-in Reporters
See built-in reporters
License
MIT © Gilad Peleg