mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-05-23 09:09:36 +02:00
61 lines
1.9 KiB
JavaScript
61 lines
1.9 KiB
JavaScript
module.exports = {
|
|
meta: {
|
|
type: 'problem',
|
|
fixable: 'code',
|
|
docs: {
|
|
description: 'Ensure that Trans with values has shouldUnescape',
|
|
},
|
|
},
|
|
create(context) {
|
|
return {
|
|
'JSXOpeningElement[name.name="Trans"]'(node) {
|
|
const attributes = new Map(
|
|
node.attributes.map(attr => [attr.name.name, attr])
|
|
)
|
|
|
|
if (attributes.has('values') && !attributes.has('shouldUnescape')) {
|
|
context.report({
|
|
node,
|
|
message: 'Trans with values must have shouldUnescape',
|
|
fix(fixer) {
|
|
return fixer.insertTextAfter(
|
|
attributes.get('values'),
|
|
'\nshouldUnescape' // Note: Prettier can fix indentation
|
|
)
|
|
},
|
|
})
|
|
}
|
|
|
|
if (attributes.has('values') && attributes.has('shouldUnescape')) {
|
|
const tOptions = attributes.get('tOptions')
|
|
if (!tOptions) {
|
|
context.report({
|
|
node,
|
|
message:
|
|
'Trans with shouldUnescape must have tOptions.interpolation.escapeValue',
|
|
fix(fixer) {
|
|
return fixer.insertTextAfter(
|
|
attributes.get('shouldUnescape'),
|
|
'\ntOptions={{ interpolation: { escapeValue: true } }}' // Note: Prettier can fix indentation
|
|
)
|
|
},
|
|
})
|
|
} else {
|
|
const property = tOptions.value.expression.properties
|
|
.find(p => p.key.name === 'interpolation')
|
|
?.value.properties.find(p => p.key.name === 'escapeValue')
|
|
|
|
if (property?.value.value !== true) {
|
|
context.report({
|
|
node,
|
|
message:
|
|
'Trans with shouldUnescape must have tOptions.interpolation.escapeValue set to true',
|
|
})
|
|
}
|
|
}
|
|
}
|
|
},
|
|
}
|
|
},
|
|
}
|