Skip to content

Commit 18f4850

Browse files
committed
Do not throw an error when pug template is not valid
1 parent 98c3af6 commit 18f4850

File tree

4 files changed

+61
-6
lines changed

4 files changed

+61
-6
lines changed

lib/rules/no-undef.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
* @author Eugene Zhlobo
44
*/
55

6-
const { findVariablesInTemplate } = require('pug-uses-variables')
7-
const { isReactPugReference, getTemplate } = require('../utilities')
6+
const { isReactPugReference, getTemplate, extractVariables } = require('../utilities')
87

98
//------------------------------------------------------------------------------
109
// Rule Definition
@@ -38,7 +37,7 @@ module.exports = {
3837
if (isReactPugReference(node)) {
3938
const template = getTemplate(node)
4039

41-
const usedVariables = findVariablesInTemplate(template)
40+
const usedVariables = extractVariables(template)
4241
const definedVariables = getDefinedVariables()
4342

4443
const isVariableDefined = variable => !definedVariables.includes(variable.value)

lib/rules/uses-vars.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
* @author Eugene Zhlobo
44
*/
55

6-
const { findVariablesInTemplate } = require('pug-uses-variables')
7-
const { isReactPugReference, getTemplate } = require('../utilities')
6+
const { isReactPugReference, getTemplate, extractVariables } = require('../utilities')
87

98
//------------------------------------------------------------------------------
109
// Rule Definition
@@ -26,7 +25,7 @@ module.exports = {
2625
if (isReactPugReference(node)) {
2726
const template = getTemplate(node)
2827

29-
findVariablesInTemplate(template)
28+
extractVariables(template)
3029
.forEach(variable => context.markVariableAsUsed(variable.value))
3130
}
3231
},

lib/utilities.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
const { findVariablesInTemplate } = require('pug-uses-variables')
2+
13
const getQuasiValue = ({ value }) => {
24
if (value && typeof value === 'object') {
35
return value.raw.trimRight()
@@ -29,7 +31,16 @@ function getTemplate({ quasi }) {
2931
return getQuasiValue(quasis[0])
3032
}
3133

34+
function extractVariables(template) {
35+
try {
36+
return findVariablesInTemplate(template)
37+
} catch (e) {
38+
return []
39+
}
40+
}
41+
3242
module.exports = {
3343
isReactPugReference,
3444
getTemplate,
45+
extractVariables,
3546
}

tests/broken-template.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
const fs = require('fs')
2+
const path = require('path')
3+
const { Linter } = require('eslint')
4+
5+
const customRules = fs.readdirSync(path.join(process.cwd(), 'lib/rules'))
6+
.reduce((files, filename) => {
7+
const key = `react-pug/${filename.replace(/\.js$/, '')}`
8+
9+
// eslint-disable-next-line no-param-reassign, global-require, import/no-dynamic-require
10+
files[key] = require(path.join(process.cwd(), `lib/rules/${filename}`))
11+
12+
return files
13+
}, {})
14+
15+
const linter = new Linter()
16+
17+
linter.defineRules(customRules)
18+
19+
const rulesSetting = Object.keys(customRules)
20+
.reduce((files, ruleName) => {
21+
// eslint-disable-next-line no-param-reassign
22+
files[ruleName] = 2
23+
return files
24+
}, {})
25+
26+
describe('broken-template', () => {
27+
const configuration = {
28+
globals: {
29+
pug: true,
30+
},
31+
parserOptions: {
32+
sourceType: 'module',
33+
},
34+
rules: rulesSetting,
35+
}
36+
37+
it('does not throw an exception', () => {
38+
const template = `
39+
pug\`
40+
each item, index in 1, 2, 3]
41+
\`
42+
`
43+
44+
linter.verify(template, configuration, 'foo.js')
45+
})
46+
})

0 commit comments

Comments
 (0)