Skip to content

Commit a73826c

Browse files
authored
Merge pull request #608 from HelixDesignSystem/add-stylelint
Add stylelint
2 parents 8732536 + 81641e6 commit a73826c

File tree

33 files changed

+1488
-110
lines changed

33 files changed

+1488
-110
lines changed

.stylelintrc

Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
{
2+
"rules": {
3+
"at-rule-empty-line-before": ["always", {
4+
"except": [
5+
"blockless-after-same-name-blockless",
6+
"first-nested"
7+
],
8+
"ignore": [
9+
"after-comment"
10+
],
11+
"ignoreAtRules": [
12+
"else",
13+
"extend",
14+
"if",
15+
"include"
16+
]
17+
} ],
18+
"at-rule-name-case": "lower",
19+
"at-rule-semicolon-newline-after": "always",
20+
"block-closing-brace-empty-line-before": "never",
21+
"block-closing-brace-newline-after": ["always", {
22+
"ignoreAtRules": [
23+
"if",
24+
"else"
25+
]
26+
}],
27+
"block-closing-brace-newline-before": "always-multi-line",
28+
"block-closing-brace-space-before": "always-single-line",
29+
"block-opening-brace-newline-after": "always-multi-line",
30+
"block-opening-brace-space-after": "always-single-line",
31+
"block-opening-brace-space-before": "always",
32+
"color-hex-case": "lower",
33+
"color-hex-length": "long",
34+
"color-named": ["never", {
35+
"ignore": [
36+
"inside-function"
37+
]
38+
}],
39+
"color-no-invalid-hex": true,
40+
"comment-empty-line-before": ["always", {
41+
"except": [
42+
"first-nested"
43+
],
44+
"ignore": [
45+
"stylelint-commands"
46+
]
47+
}],
48+
"comment-no-empty": true,
49+
"comment-whitespace-inside": "always",
50+
"custom-property-empty-line-before": ["always", {
51+
"except": [
52+
"after-custom-property",
53+
"first-nested"
54+
],
55+
"ignore": [
56+
"after-comment",
57+
"inside-single-line-block"
58+
]
59+
}],
60+
"declaration-bang-space-after": "never",
61+
"declaration-bang-space-before": "always",
62+
"declaration-block-no-duplicate-properties": [true, {
63+
"ignore": [
64+
"consecutive-duplicates-with-different-values"
65+
]
66+
}],
67+
"declaration-block-no-shorthand-property-overrides": true,
68+
"declaration-block-semicolon-newline-after": "always-multi-line",
69+
"declaration-block-semicolon-newline-before": "never-multi-line",
70+
"declaration-block-semicolon-space-after": "always-single-line",
71+
"declaration-block-semicolon-space-before": "never",
72+
"declaration-block-single-line-max-declarations": 1,
73+
"declaration-block-trailing-semicolon": "always",
74+
"declaration-colon-newline-after": "always-multi-line",
75+
"declaration-colon-space-after": "always-single-line",
76+
"declaration-colon-space-before": "never",
77+
"declaration-empty-line-before": ["always", {
78+
"except": [
79+
"after-declaration",
80+
"first-nested"
81+
],
82+
"ignore": [
83+
"after-comment",
84+
"inside-single-line-block"
85+
]
86+
}],
87+
"font-family-name-quotes": "always-unless-keyword",
88+
"font-family-no-duplicate-names": true,
89+
"font-family-no-missing-generic-family-keyword": true,
90+
"font-weight-notation": "numeric",
91+
"function-calc-no-invalid": true,
92+
"function-calc-no-unspaced-operator": true,
93+
"function-comma-newline-after": "always-multi-line",
94+
"function-comma-newline-before": "never-multi-line",
95+
"function-comma-space-after": "always-single-line",
96+
"function-comma-space-before": "never",
97+
"function-linear-gradient-no-nonstandard-direction": true,
98+
"function-max-empty-lines": 0,
99+
"function-name-case": "lower",
100+
"function-parentheses-newline-inside": "always-multi-line",
101+
"function-parentheses-space-inside": "never-single-line",
102+
"function-url-quotes": "always",
103+
"function-whitespace-after": "always",
104+
"indentation": 2,
105+
"keyframe-declaration-no-important": true,
106+
"keyframes-name-pattern": "hx-.+",
107+
"length-zero-no-unit": [true, {
108+
"ignore": [
109+
"custom-properties"
110+
]
111+
}],
112+
"linebreaks": "unix",
113+
"max-empty-lines": 2,
114+
"max-line-length": 120,
115+
"media-feature-colon-space-after": "always",
116+
"media-feature-colon-space-before": "never",
117+
"media-feature-name-case": "lower",
118+
"media-feature-name-blacklist": [
119+
"max-width"
120+
],
121+
"media-feature-name-no-unknown": true,
122+
"media-feature-name-no-vendor-prefix": true,
123+
"media-feature-parentheses-space-inside": "never",
124+
"media-feature-range-operator-space-after": "always",
125+
"media-feature-range-operator-space-before": "always",
126+
"media-query-list-comma-newline-after": "always-multi-line",
127+
"media-query-list-comma-newline-before": "never-multi-line",
128+
"media-query-list-comma-space-after": "always-single-line",
129+
"media-query-list-comma-space-before": "never",
130+
"no-duplicate-at-import-rules": true,
131+
"no-empty-first-line": true,
132+
"no-empty-source": true,
133+
"no-eol-whitespace": true,
134+
"no-extra-semicolons": true,
135+
"no-missing-end-of-source-newline": true,
136+
"number-leading-zero": "always",
137+
"number-max-precision": 3,
138+
"number-no-trailing-zeros": true,
139+
"property-case": "lower",
140+
"property-no-unknown": [true, {
141+
"checkPrefixed": true
142+
}],
143+
"rule-empty-line-before": ["always-multi-line", {
144+
"except": [
145+
"first-nested"
146+
],
147+
"ignore": [
148+
"after-comment"
149+
]
150+
}],
151+
"selector-attribute-brackets-space-inside": "never",
152+
"selector-attribute-operator-space-after": "never",
153+
"selector-attribute-operator-space-before": "never",
154+
"selector-attribute-quotes": "always",
155+
"selector-list-comma-newline-after": "always-multi-line",
156+
"selector-list-comma-newline-before": "never-multi-line",
157+
"selector-list-comma-space-after": "always-single-line",
158+
"selector-list-comma-space-before": "never-single-line",
159+
"selector-max-empty-lines": 0,
160+
"selector-type-case": "lower",
161+
"selector-type-no-unknown": [true, {
162+
"ignoreTypes": [
163+
"/^hx-/"
164+
]
165+
}],
166+
"shorthand-property-no-redundant-values": true,
167+
"string-no-newline": true,
168+
"string-quotes": "double",
169+
"unit-blacklist": [
170+
"cm",
171+
"ex",
172+
"in",
173+
"mm",
174+
"pc",
175+
"pt"
176+
],
177+
"unit-case": "lower",
178+
"unit-no-unknown": true,
179+
"value-keyword-case": "lower",
180+
"value-list-comma-newline-after": "always-multi-line",
181+
"value-list-comma-newline-before": "never-multi-line",
182+
"value-list-comma-space-after": "always-single-line",
183+
"value-list-comma-space-before": "never",
184+
"value-list-max-empty-lines": 0
185+
}
186+
}

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
"rollup-pluginutils": "^2.0.1",
5656
"sinon": "^6.3.5",
5757
"sinon-chai": "^3.2.0",
58+
"stylelint": "^11.0.0",
5859
"svg-inline-loader": "^0.8.0",
5960
"tar": "^4.4.4",
6061
"uglify-es": "^3.2.2",
@@ -75,7 +76,7 @@
7576
"preghpages": "yarn generate",
7677
"ghpages": "scripts/publish.js",
7778
"install:clean": "rm -fr node_modules && yarn install",
78-
"lint": "eslint -c .eslintrc.prod.json src",
79+
"lint": "scripts/lint.sh",
7980
"postversion": "git push upstream --tags",
8081
"prepublishOnly": "yarn compile",
8182
"rollup": "rollup -c rollup.config.js",

scripts/lint.sh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/bin/sh
2+
3+
echo "[LINT] Checking JavaScript"
4+
eslint -c .eslintrc.prod.json src
5+
6+
echo "[LINT] Checking Stylesheets"
7+
stylelint "src/**/*.{scss,css}"
8+
9+
#echo "Linting Markup"
10+
# TBD?
11+

scripts/start.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ browserSync.emitter.on('init', () => {
1818
exec('yarn webdriver:start', { cwd: CONFIG.testDir }); // don't log anything to the dev server
1919
});
2020

21+
const lintStylesGlob = `${CONFIG.sourceDir}/**/*.{scss,css}`;
22+
2123
browserSync.init({
2224
logLevel: 'debug',
2325
notify: false,
@@ -98,6 +100,19 @@ browserSync.init({
98100
fn: _.debounce(generateApis, 1500),
99101
},
100102

103+
{
104+
match: [
105+
lintStylesGlob,
106+
],
107+
fn: _.debounce(() => {
108+
let _cmd = `stylelint --color "${lintStylesGlob}"`;
109+
let _proc = exec(_cmd, { cwd: CONFIG.root });
110+
111+
_proc.stdout.pipe(process.stdout);
112+
_proc.stderr.pipe(process.stderr);
113+
}),
114+
},
115+
101116
// Only copy when files change in dist/
102117
{
103118
match: [

0 commit comments

Comments
 (0)