The pluggable linting tool for text and markdown.
It is similar to ESLint, but textlint for natural language.
Visit http://textlint.github.io/ and type text!
- No bundle rules.
- To use rule, run simply
npm install textlint-rule-xxx
. See a collection of textlint rule - Markdown and plain text are support by default. Additionally, HTML and other format support by custom plugin
- Formatter(reporter) is used both by bundled and custom formatters
$ npm install textlint -g
- more more document
textlint has not default rule!!
Use textlint with --rule
or --ruledir
, .textlintrc
config file.
# Install textlint's rule
npm install --save-dev textlint-rule-no-todo
Use with textlint-rule-no-todo
rule.
(allow to short textlint-rule-no-todo
to no-todo
)
textlint --rule no-todo README.md
See command help.
$ textlint -h
textlint [options] file.md [file.txt] [dir]
Options:
-h, --help Show help.
-c, --config path::String Use configuration from this file or sharable config.
--plugin [String] Specify plugins
--rule [path::String] Set rule package name
--preset [path::String] Set preset package name and load rules from preset package.
--rulesdir [path::String] Set rules from this directory and set all default rules to off.
-f, --format String Use a specific output format.
-v, --version Outputs the version number.
--ext [String] Specify text file extensions.
--no-color Disable color in piped output.
-o, --output-file path::String Enable report to be written to a file.
--quiet Report errors only. - default: false
--stdin Lint code provided on <STDIN>. - default: false
Allow to use with multiple rules.
$ textlint --rule no-todo --rule very-nice-rule README.md
Example:
- ℹ️ See examples/cli
.textlintrc
is config file that is loaded as JSON, YAML or JS via MoOx/rc-loader.
$ textlint --rule no-todo --rule very-nice-rule README.md
is equal to create .textlintrc
file
{
"rules": {
"no-todo": true,
"very-nice-rule": true,
}
}
and run textlint
command
$ textlint README.md
# Automatically load `.textlintrc` in current directory
.textlintrc
can define rule's option.
{
"rules": {
"no-todo": false, // disable
"very-nice-rule": {
"key": "value"
}
}
}
Pass rule's options("key": "value") to very-nice-rule
.
It mean that use the following format:
{
// Allow to comment in JSON
"rules": {
"<rule-name>": true | false | object
}
}
ℹ️ for more details
textlint plugin is a set of rules and rulesConfig or customize parser.
To enable plugin, put the "plugin-name" into .textlinrc
.
// `.textlinrc`
{
"plugins": [
"plugin-name"
],
// overwrite-plugins rules config
// <plugin>/<rule>
"rules": {
"plugin-name/rule-name" : false
}
}
ℹ️ See docs/plugin.md
Processor Plugin add new file format support. If you want to use textlint for HTML, use textlint-plugin-html as plugin.
npm install textlint-plugin-html
and Add "html" to .textlintrc
{
"plugins": [
"html"
]
}
Run textlint and work!
- Example : examples/html-plugin
- Document: docs/plugin.md
Rule list - Collection of textlint rule
See Collection of textlint rule · textlint/textlint Wiki.
If you create new rule, and add it to the wiki :)
Currently, you can use "stylish" (defaults), "compact", "checkstyle", "jslint-xml", "junit", "tap", "pretty-error", "json".
e.g.) use pretty-error.js
$ textlint -f pretty-error file.md
More detail in textlint/textlint-formatter.
You can use textlint as node modules.
$ npm install textlint --save-dev
Minimal usage:
import {TextLintEngine} from "textlint";
const engine = new TextLintEngine({
rulePaths: ["path/to/rule-dir"]
});
engine.executeOnFiles(["README.md"]).then(results => {
console.log(results[0].filePath);// => "README.md"
// messages are `TextLintMessage` array.
console.log(results[0].messages);
/*
[
{
id: "rule-name",
message:"lint message",
line: 1, // 1-based columns(TextLintMessage)
column:1 // 1-based columns(TextLintMessage)
}
]
*/
if (engine.isErrorResults(results)) {
var output = engine.formatResults(results);
console.log(output);
}
});
Low level usage:
import {textlint} from "textlint";
textlint.setupRules({
// rule-key : rule function(see docs/rule.md)
"rule-key": function(context){
var exports = {};
exports[context.Syntax.Str] = function (node) {
context.report(node, new context.RuleError("error message"));
};
return exports;
}
});
textlint.lintMarkdown("# title").then(results => {
console.log(results[0].filePath);// => "README.md"
console.log(results[0].messages);// => [{message:"lint message"}]
});
More detail on:
textlint has three extensible points
- rule
- rule is a rule for linting.
- rule-preset
- rule-preset contains rules.
- plugin
- plugin contains rules and a processor.
Please see docs/
- docs/txtnode.md
- What is is TxtNode?
- docs/rule.md
- How to create rules?
- Tutorial: creating
no-todo
rule.
gulp plugin for textlint.
The plugin for Atom Linter provides an interface to textlint.
The vuejs.org for japanese.
- Fork it!
- Create your feature branch:
git checkout -b my-new-feature
- Commit your changes:
git commit -am 'Add some feature'
- Push to the branch:
git push origin my-new-feature
- Submit a pull request :D
MIT and
lib/load-rules.js
, util/traverse.js
, cli.js
and timing.js
are:
ESLint
Copyright (c) 2013 Nicholas C. Zakas. All rights reserved.
https://github.com/eslint/eslint/blob/master/LICENSE
SCG: TextLint is similar project.
SCG: TextLint's place is equal to my textlint
(Fortuitously, project's name is the same too!).
via Natural Language Checking with Program Checking Tools
Many thanks to ESLint.