'use strict'; const getNextNonSharedLineCommentNode = require('./getNextNonSharedLineCommentNode'); const getPreviousNonSharedLineCommentNode = require('./getPreviousNonSharedLineCommentNode'); const { isRoot, isComment } = require('./typeGuards'); /** @typedef {import('postcss').Node} PostcssNode */ /** * * @param {PostcssNode | void} a * @param {PostcssNode | void} b */ function nodesShareLines(a, b) { const aLine = a && a.source && a.source.end && a.source.end.line; const bLine = b && b.source && b.source.start && b.source.start.line; return aLine === bLine; } /** * @param {PostcssNode} node * @returns {boolean} */ module.exports = function isSharedLineComment(node) { if (!isComment(node)) { return false; } const previousNonSharedLineCommentNode = getPreviousNonSharedLineCommentNode(node); if (nodesShareLines(previousNonSharedLineCommentNode, node)) { return true; } const nextNonSharedLineCommentNode = getNextNonSharedLineCommentNode(node); if (nextNonSharedLineCommentNode && nodesShareLines(node, nextNonSharedLineCommentNode)) { return true; } const parentNode = node.parent; // It's a first child and located on the same line as block start if ( parentNode !== undefined && !isRoot(parentNode) && parentNode.index(node) === 0 && node.raws.before !== undefined && !node.raws.before.includes('\n') ) { return true; } return false; };