Commit 96a30cb4 authored by Nikolay Gromov's avatar Nikolay Gromov

Добавил стайллинт

parent e4ee5b7a
# перечисление игнорируемых stylelint-ом файлов # перечисление игнорируемых stylelint-ом файлов
src/blocks/sprite-png/sprite-png.scss
{ {
"syntax": "scss",
"plugins": [ "plugins": [
"stylelint-scss", "stylelint-scss",
"stylelint-declaration-use-variable"
], ],
# http://stylelint.io/user-guide/rules/ # http://stylelint.io/user-guide/rules/
"rules": { "rules": {
# "sh-waqar/declaration-use-variable": [["z-index"], { "at-else-closing-brace-newline-after": ["always-last-in-chain", {
# "message": "В свойстве этом переменная необходима" "message": "После } перенос строки следовать должен"
# }], }],
"at-if-closing-brace-newline-after": ["always-last-in-chain", {
"message": "После } перенос строки следовать должен"
}],
"dollar-variable-colon-newline-after": ["always-multi-line", {
"message": "Перенос строки в значении переменной добавь"
}],
"dollar-variable-colon-space-after": ["always", {
"message": "Пробел после двоеточия добавь"
}],
"dollar-variable-colon-space-before": ["never", {
"message": "Пробел перед двоеточием убери"
}],
"dollar-variable-pattern": ["/[a-zA-z]/", {
"message": "Недопустимые символы в имени переменной"
}],
"double-slash-comment-whitespace-inside": ["always", {
"message": "Пробел после // следовать должен"
}],
"declaration-nested-properties": ["never", {
"message": "Не вкладывай свойства, используй Emmet"
}],
"operator-no-unspaced": [true, {
"message": "Оператор пробелами отделяй"
}],
"color-hex-case": ["lower", { "color-hex-case": ["lower", {
"message": "HEX цвета буквами строчными указывать следует", "message": "HEX цвета буквами строчными указывать следует",
"severity": "warning" "severity": "warning"
}], }],
# "color-hex-length": ["long", {
# "message": "HEX цвета полностью писать нужно.",
# }],
"color-named": ["never", { "color-named": ["never", {
"message": "Цвета ключевыми словами нельзя писать" "message": "Цвета ключевыми словами нельзя писать"
}], }],
...@@ -28,9 +50,6 @@ ...@@ -28,9 +50,6 @@
"message": "Плотность — цифрой: https://goo.gl/58eKi7", "message": "Плотность — цифрой: https://goo.gl/58eKi7",
ignore: ["relative"] ignore: ["relative"]
}], }],
# "function-blacklist": [["scale", "rgba", "linear-gradient"], {
# "message": "Запрещено функцию эту использовать."
# }],
"function-calc-no-unspaced-operator": [true, { "function-calc-no-unspaced-operator": [true, {
"message": "Для calc() пробелы вокруг операторов нужны" "message": "Для calc() пробелы вокруг операторов нужны"
}], }],
...@@ -49,23 +68,14 @@ ...@@ -49,23 +68,14 @@
"function-name-case": ["lower", { "function-name-case": ["lower", {
"message": "Функций имена строчными буквами набирать следует" "message": "Функций имена строчными буквами набирать следует"
}], }],
# "function-parentheses-newline-inside": ["never-multi-line", {
# "message": "Внутри скобок () не ставь переносы"
# }],
# "function-url-data-uris": ["never", {
# "message": "Нельзя использовать data URI"
# }],
# "function-url-quotes": ["always", {
# "message": "Всегда нужно ставить кавычки для url"
# }],
"function-whitespace-after": ["always", { "function-whitespace-after": ["always", {
"message": "Всегда нужны пробелы между функциями" "message": "Всегда нужны пробелы между функциями"
}], }],
"number-leading-zero": ["always", { "number-leading-zero": ["always", {
"message": "Нуль перед точкой явно указать следует" "message": "Нуль перед точкой явно указать следует"
}], }],
"number-max-precision": [8, { "number-max-precision": [6, {
"message": "Максимум 8 символов после точки в десятичной дроби" "message": "Максимум 6 символов после точки в десятичной дроби"
}], }],
"number-no-trailing-zeros": [true, { "number-no-trailing-zeros": [true, {
"message": "Лишний (необязательный) нуль в дроби" "message": "Лишний (необязательный) нуль в дроби"
...@@ -79,25 +89,15 @@ ...@@ -79,25 +89,15 @@
"length-zero-no-unit": [true, { "length-zero-no-unit": [true, {
"message": "Нулю не нужны измерения единицы" "message": "Нулю не нужны измерения единицы"
}], }],
"time-no-imperceptible": [true, { "time-min-milliseconds": [100, {
"message": "Время менее 100мс — нет смысла использовать" "message": "Время менее 100мс — нет смысла использовать"
}], }],
# "unit-blacklist": [["px", "deg"], {
# "message": "Запрещенные единицы измерения"
# }],
"unit-case": ["lower", { "unit-case": ["lower", {
"message": "Измерения единицы буквами строчными надобно" "message": "Измерения единицы буквами строчными надобно"
}], }],
"unit-no-unknown": [true, { "unit-no-unknown": [true, {
"message": "Нет единиц измерения таких" "message": "Нет единиц измерения таких"
}], }],
# "unit-whitelist": [["rem", "ms", "deg"], {
# "message": "Единицы измерения не соответствуют белому списку"
# }],
# Реагирует на названия шрифтов, в топку
# "value-keyword-case": ["lower", {
# "message": "Свойств значение буквами строчными быть должны"
# }],
"value-no-vendor-prefix": [true, { "value-no-vendor-prefix": [true, {
"message": "Вендорные префиксы использовать не следует" "message": "Вендорные префиксы использовать не следует"
}], }],
...@@ -135,7 +135,7 @@ ...@@ -135,7 +135,7 @@
"message": "Перед знаком восклицательным пробел оставить хочешь ты" "message": "Перед знаком восклицательным пробел оставить хочешь ты"
}], }],
"declaration-colon-newline-after": ["always-multi-line", { "declaration-colon-newline-after": ["always-multi-line", {
"message": "Для свойств множественных каждое — на строке свой быть должно" "message": "Для свойств множественных каждое — на строке своей быть должно"
}], }],
"declaration-colon-space-after": ["always", { "declaration-colon-space-after": ["always", {
"message": "Правило задавая, один пробел после двоеточия ставь" "message": "Правило задавая, один пробел после двоеточия ставь"
...@@ -143,46 +143,19 @@ ...@@ -143,46 +143,19 @@
"declaration-colon-space-before": ["never", { "declaration-colon-space-before": ["never", {
"message": "Правило задавая, пробел перед двоеточием не используй" "message": "Правило задавая, пробел перед двоеточием не используй"
}], }],
"declaration-empty-line-before": ["never", { "declaration-no-important": [true, {
"message": "Пустые строки между правилами убрать следует" "message": "!important с опаской применять следует",
"severity": "warning"
}],
"declaration-property-unit-blacklist": [{
"font-size": ["pt"],
"/^animation/": ["ms"]
}, {
"message": "Для этого свойства данные единицы измерения в чёрном списке"
}], }],
# "declaration-no-important": [true, {
# "message": "!important с опаской применять следует",
# "severity": "warning"
# }],
# "declaration-property-unit-blacklist": [{
# "font-size": ["em", "px"],
# "/^animation/": ["s"]
# }, {
# "message": "Для этого свойства данные единицы измерения в чёрном списке"
# }],
# "declaration-property-unit-whitelist": [{
# "font-size": ["em", "px"],
# "/^animation/": ["s"]
# }, {
# "message": "Для этого свойства данные единицы измерения не в белом списке"
# }],
# "declaration-property-value-blacklist": [{
# "transform": ["/scale3d/", "/rotate3d/", "/translate3d/"],
# "position": ["fixed"],
# "color": ["/^green/"]
# "/^animation/": ["/ease/"]
# }, {
# "message": "Это значение данного свойства в чёрном списке"
# }],
# "declaration-property-value-whitelist": [{
# "transform": ["/scale/"],
# "whitespace": ["nowrap"],
# "/color/": ["/^green/"]
# }, {
# "message": "Это значение данного свойства отсутствует в белом списке"
# }],
"declaration-block-no-duplicate-properties": [true, { "declaration-block-no-duplicate-properties": [true, {
"message": "Правила повторять не следует" "message": "Правила повторять не следует"
}], }],
"declaration-block-no-ignored-properties": [true, {
"message": "Правило это не сработает"
}],
"declaration-block-no-shorthand-property-overrides": [true, { "declaration-block-no-shorthand-property-overrides": [true, {
"message": "Свойство это неочевидно перебивает другое для селектора этого" "message": "Свойство это неочевидно перебивает другое для селектора этого"
}], }],
...@@ -207,10 +180,6 @@ ...@@ -207,10 +180,6 @@
# "block-no-empty": [true, { # "block-no-empty": [true, {
# "message": "Пустые блоки писать не следует" # "message": "Пустые блоки писать не следует"
# }], # }],
"block-no-single-line": [true, {
"message": "Селекторы строкой одной писать не следует",
"severity": "warning"
}],
"block-opening-brace-newline-after": ["always", { "block-opening-brace-newline-after": ["always", {
"message": "После «{» перенос строки быть должен" "message": "После «{» перенос строки быть должен"
}], }],
...@@ -236,8 +205,7 @@ ...@@ -236,8 +205,7 @@
"message": "Перед комбинатором в селекторе пробел нужен" "message": "Перед комбинатором в селекторе пробел нужен"
}], }],
"selector-no-id": [true, { "selector-no-id": [true, {
"message": "По ID джедай стилизовать не должен", "message": "По ID джедай стилизовать не должен"
# "severity": "warning"
}], }],
"selector-max-compound-selectors": [3, { "selector-max-compound-selectors": [3, {
"message": "Селектор более чем 3-составной не хочешь ты", "message": "Селектор более чем 3-составной не хочешь ты",
...@@ -246,7 +214,7 @@ ...@@ -246,7 +214,7 @@
"selector-no-qualifying-type": [true, { "selector-no-qualifying-type": [true, {
"message": "Возможно, перенасыщенный селектор (использован селектор типа)", "message": "Возможно, перенасыщенный селектор (использован селектор типа)",
ignore: ["attribute"], ignore: ["attribute"],
# "severity": "warning" "severity": "warning"
}], }],
"selector-pseudo-class-case": ["lower", { "selector-pseudo-class-case": ["lower", {
"message": "Псевдоклассы набирать буквами строчными надо" "message": "Псевдоклассы набирать буквами строчными надо"
...@@ -263,11 +231,8 @@ ...@@ -263,11 +231,8 @@
"selector-pseudo-element-no-unknown": [true, { "selector-pseudo-element-no-unknown": [true, {
"message": "Псевдоэлемента такого на светлой строне силы нет" "message": "Псевдоэлемента такого на светлой строне силы нет"
}], }],
"selector-root-no-composition": [true, {
"message": ":root всегда должен быть самостоятелен"
}],
"selector-type-case": ["lower", { "selector-type-case": ["lower", {
"message": "Селкторы буквами строчными набирать следует" "message": "Селекторы буквами строчными набирать следует"
}], }],
"selector-type-no-unknown": [true, { "selector-type-no-unknown": [true, {
"message": "Селектора такого на светлой стороне силы нет" "message": "Селектора такого на светлой стороне силы нет"
...@@ -287,14 +252,10 @@ ...@@ -287,14 +252,10 @@
"selector-list-comma-space-before": ["never", { "selector-list-comma-space-before": ["never", {
"message": "Перед запятой пробела быть не должно" "message": "Перед запятой пробела быть не должно"
}], }],
"rule-nested-empty-line-before": ["always", { "rule-empty-line-before": ["always", {
"message": "Перед селектором вложенным строку пустую оставь", "message": "Перед селектором вложенным строку пустую оставь",
ignore: ["after-comment"] ignore: ["after-comment"]
}], }],
"rule-non-nested-empty-line-before": ["always", {
"message": "Между селекторами строку пустую оставь",
ignore: ["after-comment"]
}],
"media-feature-colon-space-after": ["always", { "media-feature-colon-space-after": ["always", {
"message": "В @media после «:» пробелы необходимы" "message": "В @media после «:» пробелы необходимы"
}], }],
...@@ -308,9 +269,6 @@ ...@@ -308,9 +269,6 @@
"message": "Использовать вендорные префиксы не следует", "message": "Использовать вендорные префиксы не следует",
"severity": "warning" "severity": "warning"
}], }],
"media-feature-no-missing-punctuation": [true, {
"message": "Пунктуация в медиа нарушена в строке этой"
}],
"media-feature-parentheses-space-inside": ["never", { "media-feature-parentheses-space-inside": ["never", {
"message": "Пробелы после «(» и перед «)» нельзя использовать" "message": "Пробелы после «(» и перед «)» нельзя использовать"
}], }],
...@@ -324,22 +282,25 @@ ...@@ -324,22 +282,25 @@
"message": "В чёрном списке @-правило это" "message": "В чёрном списке @-правило это"
}], }],
"at-rule-empty-line-before": ["always", { "at-rule-empty-line-before": ["always", {
"message": "Перед @-правилами строку пустую оставь (кроме @import)", "message": "Перед @-правилами строку пустую оставь (кроме @import и @include)",
ignoreAtRules: ["import"], ignoreAtRules: ["import", "include"],
ignore: ["after-comment"] ignore: ["after-comment"]
}], }],
"at-rule-name-case": ["lower", { "at-rule-name-case": ["lower", {
"message": "@-правила буквами строчными набирать следует" "message": "@-правила буквами строчными набирать следует"
}], }],
"at-rule-name-newline-after": ["always-multi-line", {
"message": "Для @-правил переносов строк избегать следует"
}],
"at-rule-name-space-after": ["always", { "at-rule-name-space-after": ["always", {
"message": "После @-правила пробел ставить следует" "message": "После @-правила пробел ставить следует"
}], }],
"at-rule-no-unknown": [true, { "at-rule-no-unknown": [true, {
"message": "Неизвестное @-правило", "message": "Неизвестное @-правило",
ignoreAtRules: ["/^at-/"] ignoreAtRules: [
"/^at-/",
"/^mixin/",
"/^include/",
"/^if/",
"/^else/",
]
}], }],
"at-rule-no-vendor-prefix": [true, { "at-rule-no-vendor-prefix": [true, {
"message": "Для @-правил вендорные префиксы использовать не следует" "message": "Для @-правил вендорные префиксы использовать не следует"
...@@ -355,10 +316,6 @@ ...@@ -355,10 +316,6 @@
"comment-no-empty": [true, { "comment-no-empty": [true, {
"message": "Пустой коммент убрать нужно" "message": "Пустой коммент убрать нужно"
}], }],
# Сейчас не работает или работает наоборот
# "comment-whitespace-inside": ["always", {
# "message": "Коммент начинаться и заканчиваться пробелом должен"
# }],
"comment-word-blacklist": [ [/((Х|х)+уй|(Х|х)уе|(Х|х)уё|(Б|б)ляд|(М|м)уда|(П|п)идо|(П|п)еди|(П|п)еде|(^|\s)+(Б|б)ля)/], { "comment-word-blacklist": [ [/((Х|х)+уй|(Х|х)уе|(Х|х)уё|(Б|б)ляд|(М|м)уда|(П|п)идо|(П|п)еди|(П|п)еде|(^|\s)+(Б|б)ля)/], {
"message": "Комментарий херовый, при себе оставь его" "message": "Комментарий херовый, при себе оставь его"
}], }],
...@@ -366,22 +323,16 @@ ...@@ -366,22 +323,16 @@
"message": "Использовать пробела два для отступов должен ты" "message": "Использовать пробела два для отступов должен ты"
}], }],
"max-empty-lines": [3, { "max-empty-lines": [3, {
"message": "Максимум линий пустых допустимо 3" "message": "Максимум линий пустых допустимо: 3"
}], }],
"max-nesting-depth": [3, { "max-nesting-depth": [3, {
"message": "Вложения боле 3 уровней — на тёмную сторону путь", "message": "Вложения боле 3 уровней — на тёмную сторону путь",
"ignore": ["at-rules-without-declaration-blocks"], "ignore": ["blockless-at-rules"],
"severity": "warning" "severity": "warning"
}], }],
"no-browser-hacks": [true, {
"message": "Браузерные хаки не используем мы"
}],
"no-duplicate-selectors": [true, { "no-duplicate-selectors": [true, {
"message": "Селкторы дублировать не хочешь ты" "message": "Селкторы дублировать не хочешь ты"
}], }],
"no-empty-source": [true, {
"message": "Пелевинскую пустоту в файлах не хочешь ты"
}],
"no-eol-whitespace": [true, { "no-eol-whitespace": [true, {
"message": "Пустые символы в конце строки. Используй https://goo.gl/Co2tZ8" "message": "Пустые символы в конце строки. Используй https://goo.gl/Co2tZ8"
}], }],
...@@ -391,12 +342,5 @@ ...@@ -391,12 +342,5 @@
"no-missing-end-of-source-newline": [true, { "no-missing-end-of-source-newline": [true, {
"message": "Файл пустой строкой кончаться должен: https://goo.gl/Co2tZ8" "message": "Файл пустой строкой кончаться должен: https://goo.gl/Co2tZ8"
}], }],
"no-descending-specificity": [true, {
"message": "Осторожно, выше по коду есть более специфичный селектор",
"severity": "warning"
}],
"selector-no-empty": [true, {
"message": "Пустой селектор не хочешь ты"
}],
} }
} }
...@@ -28,6 +28,10 @@ ...@@ -28,6 +28,10 @@
<td><code>npm run deploy</code></td> <td><code>npm run deploy</code></td>
<td>Сборка проекта без карт кода и отправка содержимого папки сборки на GH-pages (для корректного сообщения адреса просмотра введите его в <code>./package.json</code>)</td> <td>Сборка проекта без карт кода и отправка содержимого папки сборки на GH-pages (для корректного сообщения адреса просмотра введите его в <code>./package.json</code>)</td>
</tr> </tr>
<tr>
<td><code>npm run test:style</code></td>
<td>Проверка стилевой составляющей проекта <a href="https://stylelint.io/">stylelint</a></td>
</tr>
</tbody> </tbody>
</table> </table>
......
...@@ -31,7 +31,7 @@ let lists = getFilesList(pjson.configProject); ...@@ -31,7 +31,7 @@ let lists = getFilesList(pjson.configProject);
// Запишем стилевой файл диспетчер подключений // Запишем стилевой файл диспетчер подключений
let styleImports = '/**\n * ВНИМАНИЕ! Этот файл генерируется автоматически.\n * Не пишите сюда ничего вручную, все такие правки будут потеряны.\n * Читайте ./README.md для понимания.\n */\n\n'; let styleImports = '/**\n * ВНИМАНИЕ! Этот файл генерируется автоматически.\n * Не пишите сюда ничего вручную, все такие правки будут потеряны.\n * Читайте ./README.md для понимания.\n */\n\n';
lists.css.forEach(function(blockPath) { lists.css.forEach(function(blockPath) {
styleImports += '@import "'+blockPath+'";\n'; styleImports += '@import \''+blockPath+'\';\n';
}); });
fs.writeFileSync(dirs.srcPath + 'scss/style.scss', styleImports); fs.writeFileSync(dirs.srcPath + 'scss/style.scss', styleImports);
......
...@@ -74,7 +74,7 @@ ...@@ -74,7 +74,7 @@
} }
}, },
"scripts": { "scripts": {
"test": "stylelint \"src/**/*.scss\" --syntax scss", "test:style": "stylelint \"src/**/*.scss\" --syntax scss",
"start": "gulp", "start": "gulp",
"deploy": "cross-env NODE_ENV=production ./node_modules/.bin/gulp build && cross-env ./node_modules/.bin/gulp deploy", "deploy": "cross-env NODE_ENV=production ./node_modules/.bin/gulp build && cross-env ./node_modules/.bin/gulp deploy",
"build": "cross-env NODE_ENV=production npm start build" "build": "cross-env NODE_ENV=production npm start build"
...@@ -120,7 +120,6 @@ ...@@ -120,7 +120,6 @@
"postcss-import": "^9.1.0", "postcss-import": "^9.1.0",
"postcss-inline-svg": "^2.3.0", "postcss-inline-svg": "^2.3.0",
"stylelint": "^7.9.0", "stylelint": "^7.9.0",
"stylelint-declaration-use-variable": "^1.6.0",
"stylelint-scss": "^1.4.3", "stylelint-scss": "^1.4.3",
"svg4everybody": "^2.1.7", "svg4everybody": "^2.1.7",
"vinyl-buffer": "^1.0.0" "vinyl-buffer": "^1.0.0"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment