2020-05-19 11:43:42 +03:00

105 lines
2.8 KiB
JavaScript

module.exports = {
beforeNode,
afterNode,
beforeDeclaration,
afterDeclaration,
};
function beforeNode(comments, previousNode, node, currentInitialIndex) {
if (!previousNode || previousNode.type !== 'comment') {
return comments;
}
if (
!previousNode.raws.before ||
(previousNode.raws.before.indexOf('\n') === -1 && previousNode.prev())
) {
return comments;
}
currentInitialIndex = currentInitialIndex || node.initialIndex;
previousNode.position = node.position;
previousNode.initialIndex = currentInitialIndex - 0.0001;
const newComments = [previousNode].concat(comments);
return beforeNode(newComments, previousNode.prev(), node, previousNode.initialIndex);
}
function afterNode(comments, nextNode, node, currentInitialIndex) {
if (!nextNode || nextNode.type !== 'comment') {
return comments;
}
if (!nextNode.raws.before || nextNode.raws.before.indexOf('\n') >= 0) {
return comments;
}
currentInitialIndex = currentInitialIndex || node.initialIndex;
nextNode.position = node.position;
nextNode.initialIndex = currentInitialIndex + 0.0001;
return afterNode(comments.concat(nextNode), nextNode.next(), node, nextNode.initialIndex);
}
function beforeDeclaration(comments, previousNode, nodeData, currentInitialIndex) {
if (!previousNode || previousNode.type !== 'comment') {
return comments;
}
if (!previousNode.raws.before || previousNode.raws.before.indexOf('\n') === -1) {
return comments;
}
currentInitialIndex = currentInitialIndex || nodeData.initialIndex;
const commentData = {
orderData: nodeData.orderData,
node: previousNode,
unprefixedName: nodeData.unprefixedName, // related property name for alphabetical order
unspecifiedPropertiesPosition: nodeData.unspecifiedPropertiesPosition,
};
commentData.initialIndex = currentInitialIndex - 0.0001;
// add a marker
previousNode.sortProperty = true;
const newComments = [commentData].concat(comments);
return beforeDeclaration(newComments, previousNode.prev(), nodeData, commentData.initialIndex);
}
function afterDeclaration(comments, nextNode, nodeData, currentInitialIndex) {
if (!nextNode || nextNode.type !== 'comment') {
return comments;
}
if (!nextNode.raws.before || nextNode.raws.before.indexOf('\n') >= 0) {
return comments;
}
currentInitialIndex = currentInitialIndex || nodeData.initialIndex;
const commentData = {
orderData: nodeData.orderData,
node: nextNode,
unprefixedName: nodeData.unprefixedName, // related property name for alphabetical order
unspecifiedPropertiesPosition: nodeData.unspecifiedPropertiesPosition,
};
commentData.initialIndex = currentInitialIndex + 0.0001;
// add a marker
nextNode.sortProperty = true;
return afterDeclaration(
comments.concat(commentData),
nextNode.next(),
nodeData,
commentData.initialIndex
);
}