Skip to content

Commit

Permalink
Merge pull request #1 from hhru/HH-60889
Browse files Browse the repository at this point in the history
HH-60889 add eslint
  • Loading branch information
a-demochko authored Jul 8, 2016
2 parents 94bec51 + b7e00dc commit 6e1852e
Show file tree
Hide file tree
Showing 4 changed files with 173 additions and 0 deletions.
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
*.esproj
.idea
.DS_Store
node_modules
npm-debug.log
123 changes: 123 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
module.exports = {
// https://github.com/airbnb/javascript/tree/master/packages/eslint-config-airbnb-base
"extends": "airbnb-base",
"globals": {
"ga": true,
"yaCounter": true,
"ignoreCounters": true,
"jsx": true,
"define": true,
"jsxComponents": true,
"module": true
},
"plugins": [
"dollar-sign"
],
"parserOptions": {
// Мы еще не используем ES6 модули,
// поэтому эта настройка нужна для того чтобы корректно отрабатывало правило `strict`
"sourceType": "script"
},
"rules": {
"indent": ["error", 4, { "SwitchCase": 1, "VariableDeclarator": 1 }],
"no-return-assign": 0,
"max-len": ["error", 120],
// Мы не особо хотим делать так:
// const data = [];
// data[123] = '3'
// Логичнее смотрится:
// let data = [];
// data[123] = '3'
// http://eslint.org/docs/rules/prefer-const
"prefer-const": 0,
"arrow-body-style": 0,
"no-unused-expressions": ["error", { "allowShortCircuit": true }],
"default-case": 0,
"padded-blocks": 0,
// Последовательность в том, что функция возвращает
// http://eslint.org/docs/rules/consistent-return
"consistent-return": ["warn"],
// Вызывать до декларирования можно функции, ибо hoisting
"no-use-before-define": ["error", { "functions": false }],
"no-confusing-arrow": 0,
"wrap-iife": ["error", "inside"],
"no-restricted-syntax": [
"error",
"DebuggerStatement",
"WithStatement"
],
"func-names": 0,
"space-before-function-paren": ["error", "never"],
"keyword-spacing": ["error", {"overrides": {
"catch": {
"after": true
}
}}],
"no-console": ["error", { "allow": ["warn", "error"] }],
"no-shadow": 0,

// Мы используем AMD модули
// https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-amd.md
"import/no-amd": 0,
// Все еще используем 'use strict'
// http://eslint.org/docs/rules/strict
"strict": ["error", "function"],
// Не обязательно декларировать переменные в начале функции
"vars-on-top": 0,
// Мы используем нижнее подчеркивание для "приватных" методов у объектов
// http://eslint.org/docs/rules/no-underscore-dangle
"no-underscore-dangle": 0,
// Мы не разрешаем пробелы до и после унарных операторов: !, !!, ++, --, ~
"space-unary-ops": ["error"],
// У нас нет пробелов внутри фигурных скобок
"object-curly-spacing": ["error", "never"],
// Оператор должен стоять перед переводом каретки
"operator-linebreak": ["error", "after"],
// Переменные с jQuery объектами должны начинаться с символа $
"dollar-sign/dollar-sign": [2, "ignoreProperties"],
// Мы поддерживаем 2 варианта переменной для контекста: "that", "self"
"consistent-this": ["error", "that", "self"],
// Не проверяем на первую заглавную букву на свойствах объектов
// иначе использование $.Deferred(); будет считаться ошибкой
"new-cap": ["error", {
"properties": false
}],
// require можно вызывать не только из начала файла
"global-require": 0,
// Не обязываем переносить каждое звено цепочки на новую строчку
"newline-per-chained-call": 0,
// Не выводим ошибку при переназначении аргументов функции (только предупреждение)
// Потому что хотим использовать вот так:
// function(options) {
// options = options || {};
// }
"no-param-reassign": ["warn"],
// Не используем кавычки для свойств объектов, только если без них никуда либо это зарезервированное слово
"quote-props": ["error", "as-needed", {
"keywords": true
}],
// Не выводим ошибку если в цикле for in не проверяется на hasOwnProperty (только предупреждение)
"guard-for-in": ["warn"],


/*
* Ниже перечислены правила, которые нужно убрать после перехода на es6
*/

// Запятую в последнем свойстве объекта не ставим
// Из-за того, что поддерживаем IE8 - выводим ошибку
"comma-dangle": ["error", "never"],
// Для колбеков "толстые стрелки" выглядят компактнее,
// но у нас много легаси просто с безымянными функциями, поэтому не будем на этом настаивать
"prefer-arrow-callback": 0,
// Пока не настаиваем на использовании let
"no-var": 0,
// Пока не настаиваем на использовании ...rest
"prefer-rest-params": 0,
// Можно без строк шаблонов
"prefer-template": 0,
// Легаси, не настаиваем на сокращенной форме объекта
// http://eslint.org/docs/rules/object-shorthand
"object-shorthand": 0
}
};
19 changes: 19 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"name": "eslint-config-hh",
"repository": "hhru/eslint-config-hh",
"version": "1.0.0",
"main": "index.js",
"description": "HH.ru eslint configuration",
"scripts": {},
"license": "MIT",
"bugs": {
"url": "https://github.com/hhru/eslint-config-hh/issues"
},
"homepage": "https://github.com/hhru/eslint-config-hh#readme",
"dependencies": {
"eslint": "~2.13.1",
"eslint-config-airbnb-base": "~3.0.1",
"eslint-plugin-dollar-sign": "0.0.5",
"eslint-plugin-import": "~1.9.2"
}
}
26 changes: 26 additions & 0 deletions readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# eslint конфиги HH.ru

Репозиторий, содержит файлы конфигурации для eslint.

## Установка конфигов

Все проекты подтягивают этот репозиторий по зависимости после запуска `npm install`

Достаточно, чтобы в проекте был файл `.eslintrc`:

```json
{
"extends": "hh"
}
```

За основу мы берем базовую конфигурацию [`eslint-config-airbnb-base`](https://github.com/airbnb/javascript/tree/master/packages/eslint-config-airbnb-base) и оверрайдим правила, которые отличаются.

На данный момент упразднены правила рассчитанные на ES6. После того как перейдем на него имеет смысл все "причесать".

## История изменений

### 1.0.0

* Первичный релиз
* Без поддержки es6

0 comments on commit 6e1852e

Please sign in to comment.