Skip to content

Commit 08fe118

Browse files
committed
add TODO(version) tests
1 parent cac447a commit 08fe118

File tree

3 files changed

+64
-1
lines changed

3 files changed

+64
-1
lines changed

lib/stylelint-todo.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
const semver = require('semver')
2+
const stylelint = require('stylelint')
3+
4+
const ruleName = 'primer-css/TODO'
5+
const pattern = /\bTODO@([^:]+):\s+(.+)$/
6+
7+
const messages = stylelint.utils.ruleMessages(ruleName, {
8+
rejected: message => message
9+
})
10+
11+
module.exports = stylelint.createPlugin(ruleName, (enabled, options = {}) => {
12+
const {currentVersion} = options
13+
if (!currentVersion) {
14+
console.warn(`No "currentVersion" supplied to ${ruleName}; bailing`)
15+
return () => null
16+
}
17+
18+
let match
19+
return (root, result) => {
20+
root.walkComments(node => {
21+
if ((match = node.text.match(pattern))) {
22+
const [substr, todoVersion, message] = match
23+
if (semver.lte(todoVersion, currentVersion)) {
24+
stylelint.utils.report({
25+
message: messages.rejected(`Unresolved TODO comment: "${message}" (expected to be resolved in "${todoVersion}")`),
26+
node,
27+
result,
28+
ruleName
29+
})
30+
}
31+
}
32+
})
33+
}
34+
})

script/test-todos.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#!/usr/bin/env node
2+
const stylelint = require('stylelint')
3+
const {red} = require('colorette')
4+
5+
const ruleName = 'primer-css/TODO'
6+
const cwd = process.cwd()
7+
8+
stylelint
9+
.lint({files: 'src/**/*.scss'})
10+
.then(data => {
11+
let fail = false
12+
for (const {source, warnings} of data.results) {
13+
if (warnings.some(w => w.rule === ruleName)) {
14+
console.warn('\n' + source.substr(cwd.length + 1))
15+
}
16+
for (const warning of warnings) {
17+
if (warning.rule === ruleName) {
18+
console.warn(`${red('✖')} ${warning.text}`)
19+
fail = true
20+
}
21+
}
22+
}
23+
24+
process.exit(fail ? 1 : 0)
25+
})

stylelint.config.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
1+
const currentVersion = process.env.PRIMER_VERSION || require('./package.json').version
2+
13
module.exports = {
24
extends: ['stylelint-config-primer'],
5+
plugins: ['./lib/stylelint-todo'],
36
syntax: 'scss',
47
rules: {
5-
'primer/no-override': false
8+
'primer/no-override': false,
9+
'primer-css/TODO': [true, {currentVersion, severity: 'error'}]
610
}
711
}

0 commit comments

Comments
 (0)