Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

fand/anylint

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

10 Commits

Repository files navigation

Anylint

Linter for any languages.

TravisCI badge

Anylint is a linter created to lint anything with custom rules. You can easily write your own linters in any languages!

Install

npm install -g anylint

Usage

$ anylint foo.js

To specify rc file, use --config:

$ anylint foo.pl --config ./custom-anylintrc

.anylintrc

Anylint can be configured by .anylintrc files. .anylintrc is parsed as JSON5 format. Write settings like below and put it to the project root or your $HOME/.anylintrc.

{
 // Rules applied for all files
 "*": {
 // Key must be the path of executable
 "~/bin/lint-trailing-whitespace.sh": 2 // 2 is error
 },
 // Rules for `.js` files
 ".js": {
 "~/bin/eslint-wrapper.js": 2,
 "~/bin/jshint-wrapper.pl": 2,
 },
}

Writing Rules

Anylint accepts any rules you write. Rules must satisfy following spec:

  • Rules must be executable file (Don't forget chmod +x)
  • Rules take code to lint from stdin
  • Rules output errors in JSON format
$ cat foo.md | ./rule.pl
[{
 line: 1,
 column: 1,
 message: "Invalid indent",
 ruleId: "indent"
}, {
 line: 10,
 column: 13,
 message: "Use snake_case for variables",
 ruleId: "snake-case"
}]

Errors must have following properties:

  • line
  • column
  • message
  • ruleId

Note that line and column starts from 1, not 0.

Examples

in JavaScript:

#!/usr/bin/env node
// This rule disallows more than 2 blank lines
process.stdin.on('data', data => {
 const lines = data.toString().split('\n');
 let lastline = 'DUMMY';
 let errors = [];
 lines.forEach((line, lineNum) => {
 if (lastline.match(/^\s*$/) && line.match(/^\s*$/)) {
 errors.push({
 line: lineNum + 1,
 column: 1,
 message: 'Too many blank lines!',
 ruleId: 'no-multiple-blank-lines'
 });
 }
 lastline = line;
 });
 console.log(JSON.stringify(errors));
});

in Perl:

#!/usr/bin/env perl
# This rule disallows more than 2 blank lines
use strict;
use warnings;
use JSON;
use v5.010;
my $errors = [];
my $linenum = 1;
my $lastline = 'DUMMY';
while (<>) {
 my $line = $_;
 if ($line =~ /^\s*$/ && $lastline =~ /^\s*$/) {
 push @$errors, {
 line => $linenum,
 column => 1,
 message => 'Too many blank lines!',
 ruleId => 'no-multiple-blank-lines',
 }
 }
 $linenum++;
 $lastline = $line;
}
say encode_json($errors);

LICENSE

MIT

About

🔮Linter for any languages🔮

Resources

Stars

Watchers

Forks

Packages

Contributors

AltStyle によって変換されたページ (->オリジナル) /