Spaces:
Running
Running
// Remark plugin to ignore citations inside code (block and inline) | |
export default function remarkIgnoreCitationsInCode() { | |
return (tree) => { | |
const visit = (node) => { | |
if (!node || typeof node !== 'object') return; | |
const type = node.type; | |
if (type === 'code' || type === 'inlineCode') { | |
if (typeof node.value === 'string' && node.value.includes('@')) { | |
// Use a sentinel to avoid rehype-citation, will be restored later in rehype | |
node.value = node.value.replace(/@/g, '__AT_SENTINEL__'); | |
} | |
return; // do not traverse into code | |
} | |
const children = Array.isArray(node.children) ? node.children : []; | |
children.forEach(visit); | |
}; | |
visit(tree); | |
}; | |
} | |