You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
2.8 KiB
104 lines
2.8 KiB
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 |
|
); |
|
}
|
|
|