Giter VIP home page Giter VIP logo

xo's Introduction


XO


JavaScript happiness style ❤️ XOXO

Build Status

Enforce strict code style. Never discuss code style on a pull request again!

No decision-making. No .eslintrc, .jshintrc, .jscsrc to manage. It just works!

Uses ESLint underneath, so issues regarding rules should should be opened over there.

Code style

  • Tab indentation
  • Semicolons
  • Single-quotes
  • No unused variables
  • Space after keyword if (condition) {}
  • Always === instead of ==

Any of these can be overridden if necessary.

Check out an example and the ESLint rules.

Install

$ npm install --global xo

Usage

$ xo --help

  Usage
    $ xo [<file|glob> ...]

  Options
    --init          Add XO to your project
    --compact       Compact output
    --stdin         Validate code from stdin
    --esnext        Enable ES2015 support and rules
    --env           Environment preset  [Can be set multiple times]
    --global        Global variable  [Can be set multiple times]
    --ignore        Additional paths to ignore  [Can be set multiple times]
    --space         Use space indent instead of tabs  [Default: 2]
    --no-semicolon  Prevent use of semicolons

  Examples
    $ xo
    $ xo index.js
    $ xo *.js !foo.js
    $ xo --esnext --space
    $ xo --esnext --env=node --env=mocha

  Tips
    Put options in package.json instead of using flags so other tools can read it.

Workflow

The recommended workflow is to add XO locally to your project and run it with the tests.

Simply run $ xo --init to add XO to your package.json:

Before

{
	"name": "my-awesome-project",
	"scripts": {
		"test": "mocha"
	},
	"devDependencies": {
		"mocha": "^2.0.0"
	}
}

After

{
	"name": "my-awesome-project",
	"scripts": {
		"test": "xo && mocha"
	},
	"devDependencies": {
		"mocha": "^2.0.0",
		"xo": "^0.5.0"
	}
}

Config

You can configure some options in XO by putting it in package.json:

{
	"name": "my-awesome-project",
	"xo": {
		"envs": ["node", "mocha"]
	}
}

Globals and rules can be configured inline in files.

esnext

Type: boolean
Default: false

Enable ES2015 support and linting rules.

envs

Type: array
Default: ['node']

Which environments your code is designed to run in. Each environment brings with it a certain set of predefined global variables.

globals

Type: array

Additional global variables your code accesses during execution.

ignores

Type: array

Some paths are ignored by default. Additional ignores can be added here.

space

Type: boolean, number
Default: false (tab indentation)

Set it to true to get 2-space indentation or specify the number of spaces.

This option exists for pragmatic reasons, but I would strongly recommend you read "Why tabs are superior".

rules

Type: object

Override any of the default rules. See the ESLint docs for more info on each rule.

Please take a moment to consider if you really need to use this option.

semicolon

Type: boolean
Default: true (semicolons required)

Set it to false to enforce no-semicolon style.

FAQ

Why not Standard?

The Standard style is a really cool idea. I too wish we could have one style to rule them all! Unfortunately, they made the mistake of pushing their own style instead of the most popular one. I don't think it's realistic to convert everyone. In contrast, XO is more pragmatic and has no aspiration of being the style. XO does use tabs by default, but everything is configurable if necessary.

Why not ESLint?

XO is based on ESLint. This project started out as just a shareable ESLint config, but it quickly grew out of that. I wanted something even simpler. Just typing xo and be done. No decision-making. No config. I also have some exciting future plans for it. However, you can still get most of the XO benefits while using ESLint directly with the ESLint shareable config.

Editor plugins

Build-system plugins

Configs

License

MIT © Sindre Sorhus

xo's People

Contributors

sindresorhus avatar kevva avatar rosszurowski avatar

Watchers

James Cloos avatar Richard Littauer avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.