index.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. 'use strict';
  2. module.exports = {
  3. extends: 'stylelint-config-recommended',
  4. rules: {
  5. 'alpha-value-notation': [
  6. 'percentage',
  7. {
  8. exceptProperties: [
  9. 'opacity',
  10. 'fill-opacity',
  11. 'flood-opacity',
  12. 'stop-opacity',
  13. 'stroke-opacity',
  14. ],
  15. },
  16. ],
  17. 'at-rule-empty-line-before': [
  18. 'always',
  19. {
  20. except: ['blockless-after-same-name-blockless', 'first-nested'],
  21. ignore: ['after-comment'],
  22. },
  23. ],
  24. 'at-rule-no-vendor-prefix': true,
  25. 'color-function-notation': 'modern',
  26. 'color-hex-length': 'short',
  27. 'comment-empty-line-before': [
  28. 'always',
  29. {
  30. except: ['first-nested'],
  31. ignore: ['stylelint-commands'],
  32. },
  33. ],
  34. 'comment-whitespace-inside': 'always',
  35. 'custom-property-empty-line-before': [
  36. 'always',
  37. {
  38. except: ['after-custom-property', 'first-nested'],
  39. ignore: ['after-comment', 'inside-single-line-block'],
  40. },
  41. ],
  42. 'custom-media-pattern': [
  43. '^([a-z][a-z0-9]*)(-[a-z0-9]+)*$',
  44. {
  45. message: (name) => `Expected custom media query name "${name}" to be kebab-case`,
  46. },
  47. ],
  48. 'custom-property-pattern': [
  49. '^([a-z][a-z0-9]*)(-[a-z0-9]+)*$',
  50. {
  51. message: (name) => `Expected custom property name "${name}" to be kebab-case`,
  52. },
  53. ],
  54. 'declaration-block-no-redundant-longhand-properties': true,
  55. 'declaration-empty-line-before': [
  56. 'always',
  57. {
  58. except: ['after-declaration', 'first-nested'],
  59. ignore: ['after-comment', 'inside-single-line-block'],
  60. },
  61. ],
  62. 'font-family-name-quotes': 'always-where-recommended',
  63. 'function-name-case': 'lower',
  64. 'function-url-quotes': 'always',
  65. 'hue-degree-notation': 'angle',
  66. 'import-notation': 'url',
  67. 'keyframe-selector-notation': 'percentage-unless-within-keyword-only-block',
  68. 'keyframes-name-pattern': [
  69. '^([a-z][a-z0-9]*)(-[a-z0-9]+)*$',
  70. {
  71. message: (name) => `Expected keyframe name "${name}" to be kebab-case`,
  72. },
  73. ],
  74. 'length-zero-no-unit': [
  75. true,
  76. {
  77. ignore: ['custom-properties'],
  78. },
  79. ],
  80. 'media-feature-name-no-vendor-prefix': true,
  81. 'media-feature-range-notation': 'context',
  82. 'number-max-precision': 4,
  83. 'property-no-vendor-prefix': true,
  84. 'rule-empty-line-before': [
  85. 'always-multi-line',
  86. {
  87. except: ['first-nested'],
  88. ignore: ['after-comment'],
  89. },
  90. ],
  91. 'selector-attribute-quotes': 'always',
  92. 'selector-class-pattern': [
  93. '^([a-z][a-z0-9]*)(-[a-z0-9]+)*$',
  94. {
  95. message: (selector) => `Expected class selector "${selector}" to be kebab-case`,
  96. },
  97. ],
  98. 'selector-id-pattern': [
  99. '^([a-z][a-z0-9]*)(-[a-z0-9]+)*$',
  100. {
  101. message: (selector) => `Expected id selector "${selector}" to be kebab-case`,
  102. },
  103. ],
  104. 'selector-no-vendor-prefix': true,
  105. 'selector-not-notation': 'complex',
  106. 'selector-pseudo-element-colon-notation': 'double',
  107. 'selector-type-case': 'lower',
  108. 'shorthand-property-no-redundant-values': true,
  109. 'value-keyword-case': 'lower',
  110. 'value-no-vendor-prefix': [
  111. true,
  112. {
  113. // `-webkit-box` is allowed as standard. See https://www.w3.org/TR/css-overflow-3/#webkit-line-clamp
  114. ignoreValues: ['box', 'inline-box'],
  115. },
  116. ],
  117. },
  118. };