Skip to content

Commit e0d307d

Browse files
committed
Put all utilities to one file and add supporting of tag literals
1 parent 7d67753 commit e0d307d

File tree

3 files changed

+41
-8
lines changed

3 files changed

+41
-8
lines changed

lib/rules/uses-react.js

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

6+
const { isReactPugReference } = require('../utilities')
7+
68
//------------------------------------------------------------------------------
79
// Rule Definition
810
//------------------------------------------------------------------------------
@@ -21,9 +23,8 @@ module.exports = {
2123
return {
2224
TaggedTemplateExpression: function (node) {
2325
const pragma = 'React'
24-
const { tag } = node
2526

26-
if (tag && tag.name === 'pug') {
27+
if (isReactPugReference(node)) {
2728
context.markVariableAsUsed(pragma)
2829
}
2930
},

lib/rules/uses-vars.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*/
55

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

89
//------------------------------------------------------------------------------
910
// Rule Definition
@@ -20,14 +21,10 @@ module.exports = {
2021
},
2122

2223
create: function (context) {
23-
const sourceCode = context.getSourceCode()
24-
2524
return {
2625
TaggedTemplateExpression: function (node) {
27-
const { tag, quasi } = node
28-
29-
if (tag && tag.name === 'pug') {
30-
const template = sourceCode.getText(quasi, -1, -1).trim()
26+
if (isReactPugReference(node)) {
27+
const template = getTemplate(node)
3128

3229
findVariablesInTemplate(template).forEach(context.markVariableAsUsed)
3330
}

lib/utilities.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
const getQuasiValue = ({ value }) => {
2+
if (value && typeof value === 'object') {
3+
return value.raw.trim()
4+
}
5+
6+
return ''
7+
}
8+
9+
const getInterpolatedTemplate = (template, interpolations) => template
10+
.map((quasi, index) => {
11+
const rawValue = getQuasiValue(quasi)
12+
13+
// We need to stringify interpolation so babel will understand the code
14+
return interpolations[index] ? `${rawValue}` : rawValue
15+
})
16+
.join('')
17+
18+
function isReactPugReference({ tag }) {
19+
return tag && tag.name === 'pug'
20+
}
21+
22+
function getTemplate({ quasi }) {
23+
const { quasis, expressions } = quasi
24+
25+
if (expressions && expressions.length) {
26+
return getInterpolatedTemplate(quasis, expressions)
27+
}
28+
29+
return getQuasiValue(quasis[0])
30+
}
31+
32+
module.exports = {
33+
isReactPugReference,
34+
getTemplate,
35+
}

0 commit comments

Comments
 (0)