• Stars
    star
    384
  • Rank 111,080 (Top 3 %)
  • Language
    TypeScript
  • License
    MIT License
  • Created over 6 years ago
  • Updated over 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

✨ A zero config JavaScript linter with support for Typescript, Flow, and React.

lynt

A zero config JavaScript linter with support for React, Flow, and Typescript.

Build Status linter: lynt style: prettier tests

Lynt has two main philosophies:

  1. Zero configuration by default. Out of the box, Lynt is a working linter and does not need any configuration. However, if you would like to add or remove rules from the default Lynt config, you have the option to do so.
  2. No style rules. Lynt is completely unopinionated when it comes to code style. It doesn't care whether or not you use semicolons, tabs or spaces, trailing commas, etc. Lynt only handles the error checking side of things and it leaves code style up to better-suited tools like prettier.

The real value of ESLint is in the non-style rules that prevent common errors.

– Nicholas C. Zakas, the creator of ESLint.


output

How It Works

Under the hood, Lynt uses ESLint and TSLint to lint your files.

It will know which linter to use as well as which rules/parsers/ignores/etc to apply based on the options you pass to it.

Installation

Make sure you have node and npm installed first.

You can install the package locally for a single project:

$ npm install lynt --save-dev

Or you can install it globally (not recommended):

$ npm install lynt --global

Usage

If you want to lint all your project files, you can just run the lynt command by itself.

Add a script to your package.json:

{
  "scripts": {
    "lint": "lynt"
  }
}

And then run the script in your terminal whenever you want to lint your code:

$ npm run lint

By default, folders like dist and node_modules are ignored.

If you only want to lint a subset of your project or individual files, you can pass globs:

{
  "scripts": {
    "lint": "lynt src/**/*.js"
  }
}

You can use flags to add support for Flow, React, or TypeScript. For example, if you were using TypeScript and React, you can set your lint script to:

{
  "scripts": {
    "lint": "lynt --typescript --react"
  }
}

You can see a full list of flags you can pass to lynt in the CLI section.

Notes on TypeScript Usage

Lynt uses TSLint to lint TypeScript files, and some TSLint rules need to get information from your project's tsconfig.json file.

If your tsconfig.json is in your root project folder, just run:

$ lynt --typescript

If your tsconfig.json file is somewhere else (for example, ./config/tsconfig.json, you can point to it with a --project flag.

$ lynt --typescript --project config

If you have lynt installed globally and are trying to use it with --typescript, you will need to make sure that you have typescript installed globally as well.

CLI

  Usage
    $ lynt [files] <options>

  Options
    --typescript   Add support for TypeScript.
    --flow         Add support for FlowType.
    --react        Add support for React.
    --ignore       Glob patterns for paths to ignore.
    --fix          Automatically fix linting issues.
    --global       Add support for a given global variable.
    --env          Add support for a given environment.
    --json         Get lint results in JSON format instead of default "stylish" format.
    --project      Specify your project's main directory if it isn't in the root (only use with --typescript).

  JavaScript Examples
    $ lynt
    $ lynt --react
    $ lynt --react --flow --env jest
    $ lynt src
    $ lynt src --ignore out/**/*.* --ignore tests/**/*.*
    $ lynt src --global chrome --global atom

  TypeScript Examples
    $ lynt --typescript
    $ lynt --typescript --react
    $ lynt --typescript --project .
    $ lynt src --typescript
    $ lynt src --typescript --ignore out/**/*.* --ignore tests/**/*.*

Configuration

You can specify your Lynt configuration in one of three ways:

  1. Use CLI flags:
$ lynt --typescript --react --ignore tests/**/*.* --ignore fixtures/**/*.*
  1. Have a "lynt" property in your package.json:
{
  "lynt": {
    "typescript": true,
    "react": true,
    "ignore": ["tests/**/*.*", "fixtures/**/*.*"]
  }
}
  1. Have a .lyntrc file in your root project folder:
{
  "typescript": true,
  "react": true,
  "ignore": ["tests/**/*.*", "fixtures/**/*.*"]
}

Rule Configuration

If you want to turn off any of the default lynt rules, or add your own custom rules, you can add a rules object in your configuration. Note that rule configuration cannot be done from the CLI, you must use a lynt property in package.json or use a .lyntrc file.

Disabling a default rule

You can set a value to 'off' to turn off a default rule.

{
  "rules": {
    "curly": "off",
    "no-unused-vars": "off"
  }
}

Adding a rule

If you want to add a rule, you can set it to on to use the rule's default setting, or set it to something more complicated.

{
  "rules": {
    "prefer-const": "on",
    "no-console": "on",
    "no-magic-numbers": ["error", { "ignore": [1] }]
  }
}

Note: Style rules will still be ignored.

API

import lynt, { format } from 'lynt'

or

const { default: lynt, format } = require('lynt')

lynt(files[, options]) => LyntResults

Uses ESLint or TSLint to lint a given set of files. Returns an array of LyntResult objects (see below to see its properties).

  • files – A string or array of strings of file paths to lint. Required.
  • options – A configuration object that lets you customize how lynt works. Optional

Here are the possible options you can pass:

{
  typescript?: boolean
  flow?: boolean
  react?: boolean
  ignore?: string | Array<string>
  fix?: boolean
  global?: string | Array<string>
  env?: string | Array<string>
  json?: string | Array<string>
  project?: string,
	rules?: {
		[ruleName: string]: any
	}
}

See the CLI section to see a detailed description of what each option is for.

Example (no options):

import lynt from 'lynt'

const results = lynt(['foo.js', 'bar.js'])
console.log(results)

Example (with options):

import lynt from 'lynt'

const options = {
  flow: true,
  react: true,
  rules: {
    'no-unused-vars': 'off'
  }
}

const results = lynt(['foo.js', 'bar.js'], options)
console.log(results)

LyntResult Example:

{
  filePath: string
  errors: Array<{
    ruleName: string
    message: string
    line: number
    column: number
    endLine?: number
    endColumn?: number
  }>
  errorCount: number
  fixCount: number
}

format(lintResults) => string

Formats an array of LyntResult objects (like the one returned from calling lynt()) into a nice looking table.

  • lintResults – An array of LyntResult objects.

Example:

import lynt, { format } from 'lynt'

const results = lynt(['foo.js', 'bar.js'])
const table = format(results)

console.log(table)

Badge

You can show off that your project uses Lynt with this badge:

linter: lynt

Just put the following in your README:

[![linter: lynt](https://img.shields.io/badge/linter-lynt-E81AAF.svg)](https://github.com/saadq/lynt)

FAQ

Why not standard or xo?

I think these are awesome projects, and I have been a user of both. I definitely drew a lot of inspiration from them – however, one the main philosophies of lynt was to be an error-checker, not a style guide. Both standard and xo are very opinionated when it comes to style. xo is actually configurable, so you can manually remove all the style rules, but it is still troublesome when trying to use it with TypeScript and Flow – with lynt it is seamless.

Are the current rules set in stone?

While lynt is still in v0.X, the rules are considered to be tentative – there will probably be rules being added in and removed. Once Lynt reaches a point where most are happy with the rules, v1 will be released and rules will change a lot less often. New rules will be added as ESLint and TSLint introduce them though and will be introduced to Lynt as a major version upgrade. However, at no point will any style rules be accepted as part of lynt.

How can I voice my opinion about some of the linting rules?

The best way would be to open up a GitHub issue and people will be able to chime in with their opinion.

Are there any editor plugins?

Unfortunately, I haven't gotten around to trying to make any yet. I can definitely use some help in this department, so if anyone would like to try to make a plugin for their favorite editor it would be greatly appreciated! Also, please let me know if there's anything I can improve with the API in order to make editor integration easier.

License

MIT

More Repositories

1

resumake.io

πŸ“ A website for automatically generating elegant LaTeX resumes.
TeX
3,255
star
2

Materialize

🎨 Elegant themes for Sublime Text 3
Python
420
star
3

proposals.es

πŸ“š A website for exploring ECMAScript proposals/champions/specs and more.
TypeScript
184
star
4

node-latex

🧾 A utility for running LaTeX subprocesses in Node.
JavaScript
58
star
5

koa-combine-routers

Middleware for composing multiple instances of koa-router.
JavaScript
39
star
6

koa2-skeleton

A simple boilerplate for a Koa v2 web-app.
HTML
33
star
7

hyper-blyss

A port of Bliss for Hyper.
JavaScript
19
star
8

bliss-ui

Ultra minimalist theme optimized for usage with base16-ocean.
CSS
17
star
9

ClearConsole

A hacky way to clear the console in Sublime.
Python
10
star
10

bliss-syntax

The awesome base16-ocean color scheme optimized for ES6+.
CSS
9
star
11

zencuber.com

🧩 A modern Rubik's Cube speedcubing website.
JavaScript
5
star
12

Anagrams

A fun game involving anagrams.
JavaScript
5
star
13

Hex-Color-Clock

Changing the current time to a hexadecimal value.
JavaScript
4
star
14

cc-invoice

Invoice generator for Codecademy advisors.
JavaScript
4
star
15

night-syntax

Dark monochrome Syntax theme.
CSS
3
star
16

reddit-image-scraper

An image scraper for Reddit written in Ruby.
CSS
3
star
17

intercom-code

A chrome extension that embeds a code editor into Intercom.
JavaScript
3
star
18

pretty-latex

LaTeX beautifier for Node.
JavaScript
3
star
19

night-ui

Dark monochrome UI theme.
CSS
3
star
20

hyper-night

A port of the Night theme for Hyper.
JavaScript
2
star
21

misc

Random stuff
JavaScript
2
star
22

bliss-alfred

A port of the Bliss theme for Alfred.
2
star
23

scramby

A scramble generator for twisty puzzles.
JavaScript
2
star
24

ExcuseGenerator

hackRU Spring 2014.
JavaScript
2
star
25

MozillaQuery

Improve your workflow when working in a Mozilla environment.
Python
1
star
26

storybook-issue

TypeScript
1
star
27

instabug-android-issue

Java
1
star
28

nextjs-encoding-issue

TypeScript
1
star
29

latrex

A small library for running LaTeX child processes in Deno.
TypeScript
1
star
30

koa-error-lite

A minimal error-handler middleware for Koa apps
JavaScript
1
star
31

stackline

TypeScript
1
star
32

package-control

An API client for searching Package Control packages.
JavaScript
1
star
33

blyss

[DEPRECATED] Zero config JS linter with builtin support for Flow.
JavaScript
1
star
34

sanitize-latex

A string sanitizer for LaTeX symbols.
JavaScript
1
star