Skip to content

Commit

Permalink
docs(*): update README and V8_MIGRATION_GUIDE
Browse files Browse the repository at this point in the history
  • Loading branch information
kiskv committed Oct 22, 2024
1 parent c7c77e9 commit ea83a81
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 42 deletions.
68 changes: 28 additions & 40 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
Далее произвести следующие настройки:

## Конфигурация всех линтеров через `package.json`:
## Подключение конфигов через `package.json`:

```json
{
Expand All @@ -43,69 +43,57 @@
}
```

## Конфигурация скриптов для запуска линтеров и форматтера в `package.json`:
## Конфигурация скриптов для запуска в `package.json`:

```json
{
"scripts": {
"lint:css": "stylelint **/*.css",
"lint:scripts": "eslint \"**/*.{js,jsx,ts,tsx}\" --ext .js,.jsx,.ts,.tsx",
"lint": "yarn lint:css && yarn lint:scripts && prettier --check \"./**/*.{ts,tsx,js,jsx,css,json}\"",
"lint:fix": "yarn lint:scripts --fix && yarn lint:css --fix && prettier --write \"./**/*.{ts,tsx,js,jsx,css,json}\"",
"lint:css": "arui-presets-lint css",
"lint:scripts": "arui-presets-lint scripts",
"lint": "arui-presets-lint lint",
"lint:fix": "arui-presets-lint fix",
}
}
```

Если eslint/stylelint/prettier затрагивают файлы, над которыми вы не имеете контроль, вы можете исключить
их с помощью [.eslintignore](https://eslint.org/docs/latest/user-guide/configuring/ignoring-code#the-eslintignore-file) / [.stylelintignore](https://stylelint.io/user-guide/ignore-code/#files-entirely) / [.prettierignore](https://prettier.io/docs/en/ignore.html#ignoring-files-prettierignore)
## Конфигурация [lefthook](https://github.com/evilmartians/lefthook)

> ⚠️ Внимание, .eslintignore [по умолчанию не подтягиватся в lint-staged](https://github.com/okonet/lint-staged#how-can-i-ignore-files-from-eslintignore)!
При установке библиотеки в корне проекта создался файл lefthook.yml,
он должен содержать следующее:

Для запуска eslint/stylelint рекомендуется использовать флаг [--max-warnings](https://eslint.org/docs/latest/user-guide/command-line-interface#--max-warnings), который позволяет ограничить количество возникающих предупреждений.

## Конфигурация [lint-staged](https://github.com/lint-staged/lint-staged):

```json
{
"lint-staged": {
"*.{js,jsx,ts,tsx,json}": ["prettier --write", "eslint"],
"*.css": ["prettier --write", "stylelint"],
}
}
```yaml
extends:
- ./node_modules/arui-presets-lint/lefthook/index.yml
```
## Конфигурация [git hooks](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)

Для настройки git hooks рекомендуется использовать библиотеки [simple-git-hooks](https://github.com/toplenboren/simple-git-hooks), либо [husky@4](https://github.com/typicode/husky/tree/v4.3.8)
Чтобы eslint / stylelint / prettier не проверял файлы, которые не находятся в .gitignore, вы можете исключить
их с помощью .eslintignore / .stylelintignore / prettierignore. Прописывать там файлы, которые уже есть в .gitignore не требуется!
Для запуска eslint/stylelint рекомендуется использовать флаг [--max-warnings](https://eslint.org/docs/latest/user-guide/command-line-interface#--max-warnings), который позволяет ограничить количество возникающих предупреждений.
### Пример конфигурации для simple-git-hooks:

Пример такой конфигурации:
```json
{
"simple-git-hooks": {
"pre-commit": "yarn tsc --noEmit && yarn lint-staged",
"commit-msg": "yarn commitlint --edit $1"
},
"scripts": {
"lint:css": "arui-presets-lint css --max-warnings=0",
"lint:scripts": "arui-presets-lint scripts --max-warnings=0",
}
}

```

## CLI

### Пример конфигурации для husky@4:
Так как yarn berry не поддерживает возможность запускать бинарные файлы, которые не установлены как прямые зависимости, существует возможность это сделать через CLI библиотеки, например:

```json
{
"husky": {
"hooks": {
"pre-commit": "yarn tsc --noEmit && yarn lint-staged",
"commit-msg": "yarn commitlint -E HUSKY_GIT_PARAMS"
}
},
```sh
yarn arui-presets-lint run lefthook install

}
yarn arui-presets-lint run prettier --write
```

- что примерно равно поведению при запуске бинарника через команду `npx --no-install ...`
Таким образом можно гибко настраивать поведение линтеров для вашего проекта, если по какой-то причине стандартная конфигурация вам не подходит.

## Настройка IDE:

1. Включить ESLint
Expand Down
56 changes: 54 additions & 2 deletions V8_MIGRATION_GUIDE.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,57 @@
Для обновления библиотеки с версии ниже чем 8.0.0, в проекте нужно выполнить команду:
# Гид по миграции на arui-presets-lint@8

## Введение
Обновление содержит в себе множество изменений, которые позволяют работать с конфигурацией линтеров в проектах проще. Ключевые изменения:
- Поставляется готовая конфигурация lefthook - инструмента, который заменяет lint-staged и husky
- Больше никаких peer dependency - работа с ними вызывала боль, инструменты по их автоматической установке не работают в yarn 4. Никто больше не сможет сломать вашу конфигурацию случайным поднятием зависимости
- CLI для запуска команд позволяет не писать копипасту в каждом проекте
- Новые решения гибкие - возможность писать собственные команды остается, как и возможность расширить конфигурацию lefthook (см [README](./README.md))

1. Для начала нужно выполнить команду:

```bash
yarn remove eslint eslint-config-airbnb eslint-config-airbnb-typescript eslint-config-prettier eslint-import-resolver-typescript eslint-plugin-cypress eslint-plugin-dirnames eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-react eslint-plugin-react-hooks eslint-plugin-simple-import-sort eslint-plugin-unicorn lint-staged prettier stylelint @typescript-eslint/parser @typescript-eslint/eslint-plugin kebab-case
yarn remove eslint eslint-config-airbnb eslint-config-airbnb-typescript eslint-config-prettier eslint-import-resolver-typescript eslint-plugin-cypress eslint-plugin-dirnames eslint-plugin-import eslint-plugin-jsx-a11y eslint-plugin-react eslint-plugin-react-hooks eslint-plugin-simple-import-sort eslint-plugin-unicorn lint-staged prettier stylelint @typescript-eslint/parser @typescript-eslint/eslint-plugin stylelint-config-prettier husky kebab-case
```
-- отмечу, что никаких зависимостей с плагинами stylelint/eslint в проекте быть не должно, кроме тех, которые использует ваш локальный конфиг

2. Добавить в конец .gitignore строчку:
```
.eslintcache
```

3. Удалить конфигурации husky и lint-staged (могут находится в .husky, .huskyrc.js, package.json.husky, .lintstagedrc.js, package.json.lint-staged, итп)

4. Добавить в lefthook.yml следующее:
```yaml
extends:
- ./node_modules/arui-presets-lint/lefthook/index.yml
```
[документация](https://github.com/evilmartians/lefthook/blob/master/docs/configuration.md)
5. Выполнить следующую команду:
```
yarn arui-presets-lint run lefthook install
```
чтобы установить новую конфигурацию githook. Отмечу, что в библиотеке lefthook есть postinstall скрипт, который это делает автоматически.

1. Поменять команды для запуска в package.json.scripts, они должны выглядить следующим образом:

```json
{
"scripts": {
"lint:css": "arui-presets-lint css",
"lint:scripts": "arui-presets-lint scripts",
"lint": "arui-presets-lint lint",
"lint:fix": "arui-presets-lint fix",
}
}
```
Команда 'format', если она использовась ранее, больше не нужна - ```lint:fix``` запускает по очереди stylelint, eslint и prettier в режиме автофикса

7. Выполнить команду ```yarn lint:fix```, и исправить возникающие ошибки

## Возможные проблемы и способы их решения:

> Q: Получаю ошибку `node_modules/.bin/prettier: Permission denied`
> A: Это плавающая проблема с установкой библиотеки prettier, которая решается командой: `chmod +x ./node_modules/.bin/prettier`
Происходит такое только на системах macOS [issue](https://github.com/prettier/prettier/issues/15164)

0 comments on commit ea83a81

Please sign in to comment.