Все заметные изменения в этом проекте будут задокументированы в этом файле.
Формат основан на Keep a Changelog, и этот проект придерживается Semantic Versioning.
4.2.3 — 2024–05–28
Обновили Stylelint до 16.6.1
4.2.2 — 2024–05–24
Обновили Stylelint до 16.6.0
4.2.1 — 2024–05–02
- Обновили Stylelint до 16.5.0
- Обновили
@stylistic/stylelint-plugin
до 2.1.2
4.2.0 — 2024–04–02
-
Обновили все зависимости до самых свежих
-
Добавили новые правила:
- declaration-block-no-redundant-longhand-properties, который запрещает избыточные блоки объявлений
a { padding-top: 1px; padding-right: 2px; padding-bottom: 3px; padding-left: 4px; }
a { padding: 1px 2px 3px 4px; }
- no-unknown-custom-properties, который запрещает неизвестные кастомные свойства
4.1.0 — 2024–02–19
- Обновили husky до последней версии 9.0.11
- Обновили @htmlacademy/editorconfig-cli до версии 2.0.9
- Добавили новое правило named-grid-areas-alignment, которое выравнивает обращение к именованным областям в гриде
Плохо
/* ❌ Not aligned cell tokens */
div {
grid-template-areas:
'a a a'
'bb bb bb';
}
Хорошо
/* ✅ Aligned cell tokens */
div {
grid-template-areas:
'a a a'
'bb bb bb'
}
4.0.5 — 2024–02–01
- Добавили новое правило
shorthand-property-no-redundant-values
, которое запрещает избыточные значения в сокращённых свойствах. - Обновили husky до последней версии 9.0.10
- Обновили stylelint до версии 16.2.1
4.0.4 — 2024–01–28
Обновили husky до последней версии 9.0.6
4.0.3 — 2024–01–19
Обновили stylelint до версии 16.2.0
4.0.2 — 2024–01–16
Добавили новое правило comment-whitespace-inside
, которое требует пробелы внутри комментариев. Это повышает читабельность комментариев.
4.0.1 — 2023–12–28
- Отсортировали правило по документу https://stylelint.io/user-guide/rules/
- Добавили требование прописывать CSS-свойства в lowercase
"selector-class-pattern": "^[a-z0-9-_]+$",
4.0.0 — 2023–12–25
- Обновили
stylelint-codeguide
до"@stylistic/stylelint-plugin": "2.0.0"
- Обновили stylelint до версии 16.1.0
3.0.2 — 2023–12–13
Перенесли stylelint-codeguide в правильные зависимости
3.0.1 — 2023–12–12
Обновили все зависимости
3.0.0 — 2023–12–12
- Обновили поддержку stylelint до 16 версии
- Изменили поддержку node.js по рекомендации stylelint, не ниже 18.12
- Обновили stylelint-codeguide
2.0.6 — 2023–10–19
- Обновили node engine до современной. Удалили 16.x
- Обновили stylelint-codeguide
- Обновили peerDependencies
2.0.5 — 2023–10–17
Обновили все зависимости и заменили окончания строк
2.0.4 — 2023–08–02
Обновили все зависимости и уточняет версию peerDependencies
2.0.3 — 2023–07–28
Починили поле "exports": "./.stylelintrc",
в package.json
2.0.2 — 2023–07–25
Обновили peerDependencies
2.0.1 — 2023–07–20
Добавили media-query-no-invalid
, которое запрещает недопустимые медиа-запросы и media-feature-name-value-no-unknown
, которое запрещает неизвестные значения для медиавыражений.
2.0.0 — 2023–07–20
- Основной файл конфига конвертирован из js в json с переименованием его в стандартное имя конфига для stylelint —
.stylelintrc
. Теперь stylelint распознаёт его как свой конфиг и применяет прямо в этом проекте. Конфиг теперь можно взять и не изменяя использовать в другом месте даже без подключения его как зависимость. И, что наиболее важно, можно легко копировать из него строки и вставлять в свой, расширяемый этим, конфиг для переопределения правил. - Правила отсортированы по алфавиту для более быстрого и удобного поиска. Именование правил уже само по себе группирует их так, чтобы было проще их найти.
package.json
реорганизован для большего удобства пользователей пакета.- Команды линтинга теперь не нуждаются в уточнении синтаксиса, благодаря переопределениям (см. ниже).
-
Бэйджи в README для наглядности состояния проекта.
-
Файл с текстом лицензии.
-
Переопределения (
overrides
) для кастомных синтаксисовless
иscss
. В эти переопределения:- для обоих синтаксисов добавлено отключение правила
declaration-property-value-no-unknown
, как и советует документация Stylelint; - для
less
перенесено из общих правил разрешение кастомной функцииfade()
; - для
scss
перенесено из общих правил разрешение кастомных директив, в которые добавлены@use
,@forward
,@if
,@else
и@for
.
- для обоих синтаксисов добавлено отключение правила
-
Плагин
stylelint-codeguide
, возвращающий поддержку удаляемых из Stylelint 76 стилистических правил. Теперь добавив к ним префиксcodeguide/
можно продолжать использовать их в stylelint@16+. -
Правило
function-linear-gradient-no-nonstandard-direction
с требованием валидных и стандартных значения направления линейных градиентов: углы илиto
с названием одной или двух смежных сторон./* Хорошо */ a { background: linear-gradient(45%, #ffffff, #000000); } a { background: linear-gradient(to top, #ffffff, #000000); } a { background: linear-gradient(to top left, #ffffff, #000000); } /* Плохо */ a { background: linear-gradient(45, #ffffff, #000000); } a { background: linear-gradient(top, #ffffff, #000000); } a { background: linear-gradient(to top top, #ffffff, #000000); } a { background: linear-gradient(to top bottom, #ffffff, #000000); }
- Правило
declaration-colon-newline-after
с требованием переноса строки после двоеточия в многострочных декларациях.
/* Хорошо */ a { background: url("foo.png"), url("bar.png"); } a { background: url("foo.png"), url("bar.png"); } a { transform: translate(1px, 1px); } a { transform: translate( 1px, 1px ); } /* Плохо */ a { transform: translate( 1px, 1px ); } a { background: url("foo.png"), url("bar.png"); }
- Правило
-
Правило
import-notation
с требованием указания пути простой строкой, а не функциейurl()
, потому что хоть в CSS и работают оба варианта, но Sass склеивает только варианты со строками, а сurl()
оставляет в коде./* Хорошо */ @import "foo.css"; /* Плохо */ @import url("foo.css");
-
Правило
selector-max-compound-selectors
с запретом уровня сложности составных селекторов выше 3. Сложносоставные селекторы — это те, что ошибочно называют селекторами потомка или вложенности. Ошибочно, потому что любые комбинаторы повышают уровень сложности составного селектора, включая+
и~
, которые «не увеличивают вложенность»./* Хорошо */ .foo div {} .foo > .bar {} .foo + .bar:not(a ~ b) {} /* Плохо */ .foo .bar .baz {} .foo .bar + .baz {} .foo { .baz { & > .bar {} } }
-
Ограничение вложенности. Правило
max-nesting-depth
ограничивает именно вложенности блоков кода (фигурных скобок) друг в друга (уберегая от «ад вложенности» вроде «ада колбэков» в JS), а не так называемые «вложенные селекторы», которые правильнее называть сложносоставными селекторами. Причём прежняя настройка ингнорирования директивы@media
отключала линтинг этим правилом внутри вложенной@media
, что позволяет делать там неограниченное количество уровней вложенности. Новая настройка игнорирует псевдоклассы всегда и директивы тогда, когда они не содержат собственные CSS-правила, а лишь оборачивают собой другие блоки кода. И при этом внутри проигнорированных псевдоклассов и директив продолжается подсчёт уровеней вложенности./* Хорошо */ a { b { /* 1 */ i { /* 2 */ top: 0; } } } .foo { &--bar { /* 1 */ a { /* 2 */ top: 0; } } } a { &:hover { b { /* 1 */ i { /* 2 */ top: 0; } } } } a { @media print { b { /* 1 */ i { /* 2 */ top: 0; } } } } a { @media print { /* 1 */ left: 0; b { /* 2 */ top: 0; } } } /* Плохо */ a { b { /* 1 */ i { /* 2 */ u { /* 3 */ top: 0; } } } } .foo { &--bar { /* 1 */ b { /* 2 */ i { /* 3 */ top: 0; } } } } a { &:hover { b { /* 1 */ i { /* 2 */ u { /* 3 */ top: 0; } } } } } a { @media print { /* 1 */ left: 0; b { /* 2 */ i { /* 3 */ top: 0; } } } } a { @media print { b { /* 1 */ i { /* 2 */ u { /* 3 */ top: 0; } } } } }
- Ненужные отключения некоторых правил.
- Этот файл (на основе Keep a Changelog) для удобства.
1.1.5 — 2023–06–11
- Зависимость
stylelint-config-recommended
(с сохранением его правил).
-
Возможность указывать размерность длины у
0
в функцииvar()
./* Хорошо */ a { top: 0; } a { --foo: 0px; } a { top: var(--bar, 0px); } /* Плохо */ a { top: 0px; }
1.1.4 — 2022–12–06
-
Правило
font-weight-notation
с требованием дляfont-weight
только числовых значений или относительных ключевых словbolder
иlighter
(спецификация)./* Хорошо */ a { font-weight: 400; } a { font: bolder 20px system-ui; } /* Плохо */ a { font-weight: normal; } a { font: bold 20px system-ui; }
1.1.3 — 2022–11–29
stylelint
до верисии14.15.0
.
1.1.2 — 2022–10–02
stylelint
до верисии14.13.0
.
1.1.1 — 2022–09–20
stylelint
до верисии14.12.0
.
1.1.0 — 2022–09–02
- Список правил отсортирован по rules list.
- Значения текущих правил не поменялись, но некоторые дополнились новыми значениями. Одно правило может иметь несколько значений используя массив
[rule, rule2]
.
-
Правило
color-hex-alpha
с запретом использования четвёртого параметра у hex-цветов для альфа-канала, потому что из значенияab
не понятно сколько это в дробях, а при коммуникации мы используем человекопонятные «Прозрачность 67.1%»./* Хорошо */ a { color: #ffffff; } a { color: rgb(255 255 255 / 67.1%); } /* Плохо */ a { color: #ffffffab; }
-
Правило
custom-property-no-missing-var-function
с запретом использовать кастомные свойства безvar
./* Хорошо */ a { color: var(--foo); } /* Плохо */ a { color: --foo; }
-
Правило
function-calc-no-unspaced-operator
с требованием пробелов вокруг операторов вcalc()
./* Хорошо */ a { top: calc(1px + 2px); } /* Плохо */ a { top: calc(1px+2px); }
-
В правило
length-zero-no-unit
игнорирование функцииvar()
. Напоминание: кастомным свойствам лучше указывать единицы измерения./* Хорошо */ a { top: 0; } a { --foo: 0px; } a { top: var(--bar, 0px); } /* Плохо */ a { top: 0px; }
-
Правило
alue-keyword-case
с требованием camelCase для ключевых слов из SVG, и нижнего регистра для всех остальных./* Хорошо */ a { display: block; } a { top: currentColor; } /* Плохо */ a { display: Block; } a { top: currentcolor; }
-
Правило
selector-not-notation
с запретом сложного синтаксиса псевдокласса:not()
./* Хорошо */ :not(a):not(div) {} /* Плохо */ :not(a, div) {}
-
Правило
annotation-no-unknown
с запретом неизвестных аннотаций./* Хорошо */ a { color: green !important; } /* Плохо */ a { color: green !imprtant; }
-
Правило
keyframe-block-no-duplicate-selectors
с запретом повторяющихся селекторов в@keyframe
./* Хорошо */ @keyframes foo { 0% {} 100% {} } /* Плохо */ @keyframes foo { 0% {} 0% {} }
-
Правило
keyframe-selector-notation
с требованием однотипных селекторов в@keyframes
: или только проценты, или только ключевые слова./* Хорошо */ @keyframes foo { 0% {} 100% {} } @keyframes foo { from {} to {} } /* Плохо */ @keyframes foo { from {} 100% {} }
-
Правило
selector-max-universal
с запретом использования более двух универсальных селекторов подряд./* Хорошо */ .foo * {} * * {} /* Плохо */ * * * {}
1.0.0 — 2022–08–23
stylelint
до верисии14.11.0
.stylelint-config-recommended
до верисии9.0.0
.
0.1.12 — 2021–12–07
- Небезопасные зависимости.
0.1.11 — 2021–11–09
-
Возможность указывать единицы измерения длины у
0
в кастомных свойствах, чтобы при использовании этих кастомных свойств вcalc()
у операндов всегда была верная размерность./* Хорошо */ a { top: 0; } a { --foo: 0px; } /* Плохо */ a { top: 0px; }
0.1.10 — 2021–06–15
- Зависимости.
0.1.9 — 2021–06–15
-
Возможность использовать многострочность в фунциях, при этом не ломая однострочные функции. Это позволяет достичь комбинация правил:
declaration-colon-space-after
с требованием пробела после двоеточия только для деклараций с однострочной функцией.function-comma-space-before
c запретом пробелов перед запятой между аргументами любых функций,function-comma-space-after
с требованием пробела после запятой между аргументами однострочных функций,function-parentheses-space-inside
с запретом пробельных символов внутри скобок только у однострочных функций.
/* Хорошо */ a { transform: translate(1px, 1px); } a { transform: translate( 1px, 1px ); } /* Плохо */ a { transform: translate(1px,1px); } a { transform: translate( 1px, 1px ); } a { transform: translate(1px, 1px); } a { transform: translate( 1px, 1px ); }
Спасибо @firefoxic
0.1.8 — 2021–06–10
- Зависимости.
0.1.7 — 2021–06–04
- Работа с зависимостями.
0.1.6 — 2021–06–01
- Правило
color-no-hex
отключено, что разрешает писать hex-цвета.
-
Правило
no-invalid-position-at-import-rule
с требованием указывать@import
раньше всех остальных директив, кроме@charset "utf-8";
./* Хорошо */ @charset "utf-8"; @import "foo.scss"; @import "bar.scss"; /* Плохо */ @import "foo.scss"; @media all {}; @import "bar.scss";
-
Правило
color-no-invalid-hex
с запретом невалидных hex-цветов./* Хорошо */ a { color: #fff1a0; } a { color: #123450aa; } /* Плохо */ a { color: #fff1az; } a { color: #12345aa; }
-
Правило
color-named
с запретом именованных цветов./* Хорошо */ a { color: #ff0000; } a { color: rgb(255 0 0); } a { color: hsl(0 100% 50%); } /* Плохо */ a { color: red; }
-
Правило
number-max-precision
с запретом превышения точности значений выше2
./* Хорошо */ a { top: 0; } a { top: 0.1%; } a { top: 0.12%; } /* Плохо */ a { top: 0.123%; }
0.1.5 — 2021–05–28
- README переведён на русский.
-
Тесты, чтобы правильнее следить за добавлением новых правил или изменением нынешних.
-
Стартовый конфиг stylelint-config-recommended.
-
Правило
declaration-no-important
с запретом использования аннотации!important
./* Хорошо */ a { color: #000000; } /* Плохо */ a { color: #000000 !important; }
-
Правило
keyframe-declaration-no-important
с запретом использования аннотации!important
в@keyframes
./* Хорошо */ @keyframes foo { from { opacity: 0; } to { opacity: 1; } } /* Плохо */ @keyframes foo { from { opacity: 0; } to { opacity: 1 !important; } }
-
Правило
max-nesting-depth
с запретом уровней вложенности больше2
без учёта директивы@media
./* Хорошо */ a { b { /* 1 */ i { /* 2 */ top: 0; } } } .foo { &--bar { /* 1 */ a { /* 2 */ top: 0; } } } a { &:hover { /* 1 */ b { /* 2 */ top: 0; } } } a { @media print { b { /* 1 */ i { /* 2 */ top: 0; } } } } /* Плохо */ a { b { /* 1 */ i { /* 2 */ u { /* 3 */ top: 0; } } } } a { @--my-at-rule { /* 1 */ b { /* 2 */ i { /* 3 */ top: 0; } } } } a { &--foo { /* 1 */ b { /* 2 */ i { /* 3 */ top: 0; } } } } a { b { /* 1 */ &:hover { /* 2 */ i { /* 3 */ top: 0; } } } }
- Правила, повторяющие правила из
stylelint-config-recommended
.
0.1.4 — 2019–07–08
- Директива
@each
в перечень разрешенных. - Правило
function-calc-no-invalid
.
0.1.1 — 2018–01–15
-
Правило
font-family-no-missing-generic-family-keyword
с требованием указания общего семейства шрифта./* Хорошо */ a { font-family: Arial, sans-serif; } a { font: 1em / 1.3 Times, serif, Apple Color Emoji; } a { font: inherit; } a { font-family: var(--font-family-common); } a { font-family: Helvetica, var(--font-family-common); } /* Плохо */ a { font-family: Helvetica, Arial, Verdana, Tahoma; } a { font: 1em / 1.3 Times; }
-
Правило
no-duplicate-at-import-rules
с запретом дублирования@import
./* Хорошо */ @import "foo.scss"; @import "bar.scss"; /* Плохо */ @import "foo.scss"; @import "bar.scss"; @import "foo.scss";
0.1.0 — 2017–09–11
- Правила для
stylelint
версии7.9.0
.