# xo
**Repository Path**: mirrors_floatdrop/xo
## Basic Information
- **Project Name**: xo
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-09-24
- **Last Updated**: 2026-05-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
> JavaScript happiness style ❤️ [XOXO](https://en.wiktionary.org/wiki/xoxo)
[](https://travis-ci.org/sindresorhus/xo)
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](http://eslint.org) underneath, so issues regarding rules should be opened over [there](https://github.com/eslint/eslint/issues).
## Code style
- Tab indentation *[(or space)](#space)*
- Semicolons
- Single-quotes
- No unused variables
- Space after keyword `if (condition) {}`
- Always `===` instead of `==`
*Any of these can be [overridden](#rules) if necessary.*
Check out an [example](index.js) and the [ESLint rules](https://github.com/sindresorhus/eslint-config-xo/blob/master/index.js).
## Install
```
$ npm install --global xo
```
## Usage
```
$ xo --help
Usage
$ xo [ ...]
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 --env=node --env=mocha
$ xo --init --esnext
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` (with any options) to add XO to your package.json or create one.
### Before
```json
{
"name": "awesome-package",
"scripts": {
"test": "mocha"
},
"devDependencies": {
"mocha": "^2.0.0"
}
}
```
### After
```json
{
"name": "awesome-package",
"scripts": {
"test": "xo && mocha"
},
"devDependencies": {
"mocha": "^2.0.0",
"xo": "^0.8.0"
}
}
```
Then just run `$ npm test` and XO will be run before your tests.
## Config
You can configure some options in XO by putting it in package.json:
```js
{
"name": "awesome-package",
"xo": {
"envs": [
"node",
"mocha"
]
}
}
```
[Globals](http://eslint.org/docs/user-guide/configuring#specifying-globals) and [rules](http://eslint.org/docs/user-guide/configuring#configuring-rules) can be configured inline in files.
### esnext
Type: `boolean`
Default: `false`
Enable ES2015+ support and linting rules.
This will let you use ES2016 features like [`async`/`await`](https://github.com/lukehoban/ecmascript-asyncawait) and [decorators](https://github.com/wycats/javascript-decorators). For a full list of features see [Babel's experimental features](https://babeljs.io/docs/usage/experimental/) and their [Learn ES2015](https://babeljs.io/docs/learn-es2015/).
### envs
Type: `array`
Default: `['node']`
Which [environments](http://eslint.org/docs/user-guide/configuring#specifying-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](https://github.com/sindresorhus/xo/blob/4a0db396766118d7918577d759cacb05cd99a354/index.js#L14-L20) 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"](http://lea.verou.me/2012/01/why-tabs-are-clearly-superior/).
### rules
Type: `object`
Override any of the [default rules](https://github.com/sindresorhus/eslint-config-xo/blob/master/index.js). See the [ESLint docs](http://eslint.org/docs/rules/) 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](http://standardjs.com) is a really cool idea. I too wish we could have one style to rule them all! But the reality is that the JS community is just too diverse and opinionated to create *one* code style. They also made the mistake of pushing their own style instead of the most popular one. In contrast, XO is more pragmatic and has no aspiration of being *the* style. My goal with XO is to make it simple to enforce consistent code style with close to no config. XO comes with my code style preference by default, as I mainly made it for myself, but everything is configurable.
#### 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](https://github.com/sindresorhus/eslint-config-xo).
## Editor plugins
- [Sublime Text](https://github.com/sindresorhus/SublimeLinter-contrib-xo)
- [Atom](https://github.com/sindresorhus/atom-linter-xo)
## Build-system plugins
- [Gulp](https://github.com/sindresorhus/gulp-xo)
- [Grunt](https://github.com/sindresorhus/grunt-xo)
- [webpack](https://github.com/Semigradsky/xo-loader)
## Configs
- [eslint-config-xo](https://github.com/sindresorhus/eslint-config-xo) - ESLint shareable config for XO
- [eslint-config-xo-space](https://github.com/sindresorhus/eslint-config-xo-space) - ESLint shareable config for XO with 2-space indent
- [eslint-config-xo-react](https://github.com/sindresorhus/eslint-config-xo-react) - ESLint shareable config for React to be used with the above
- [jscs-xo](https://github.com/sindresorhus/jscs-xo) - JSCS shareable preset for XO
## License
MIT © [Sindre Sorhus](http://sindresorhus.com)