| import { isComment, isRoot } from './typeGuards.mjs'; |
| import getNextNonSharedLineCommentNode from './getNextNonSharedLineCommentNode.mjs'; |
| import getPreviousNonSharedLineCommentNode from './getPreviousNonSharedLineCommentNode.mjs'; |
| |
| /** @typedef {import('postcss').Node} PostcssNode */ |
| |
| /** |
| * @param {PostcssNode | void} a |
| * @param {PostcssNode | void} b |
| */ |
| function nodesShareLines(a, b) { |
| const endLine = a && a.source && a.source.end && a.source.end.line; |
| const startLine = b && b.source && b.source.start && b.source.start.line; |
| |
| return endLine === startLine; |
| } |
| |
| /** |
| * @param {PostcssNode} node |
| * @returns {boolean} |
| */ |
| export default 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; |
| } |