checkNodeForEmptyLines.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. const { isProperty } = require('../../utils');
  2. const checkEmptyLineBefore = require('./checkEmptyLineBefore');
  3. const checkEmptyLineBeforeFirstProp = require('./checkEmptyLineBeforeFirstProp');
  4. const getNodeData = require('./getNodeData');
  5. module.exports = function checkNodeForEmptyLines({
  6. node,
  7. context,
  8. emptyLineBeforeUnspecified,
  9. emptyLineMinimumPropertyThreshold,
  10. expectedOrder,
  11. isFixEnabled,
  12. primaryOption,
  13. result,
  14. }) {
  15. let lastKnownSeparatedGroup = 1;
  16. let propsCount = node.nodes.filter((item) => isProperty(item)).length;
  17. let allNodesData = node.nodes.map((child) => getNodeData(child, expectedOrder));
  18. allNodesData.forEach(function checkEveryPropForEmptyLine(nodeData, index) {
  19. let previousNodeData = allNodesData[index - 1];
  20. // if previous node is shared-line comment, use second previous node
  21. if (
  22. previousNodeData &&
  23. previousNodeData.node.type === 'comment' &&
  24. !previousNodeData.node.raw('before').includes('\n')
  25. ) {
  26. previousNodeData = allNodesData[index - 2];
  27. }
  28. // skip first decl
  29. if (!previousNodeData) {
  30. return;
  31. }
  32. // Nodes should be standard declarations
  33. if (!isProperty(previousNodeData.node) || !isProperty(nodeData.node)) {
  34. return;
  35. }
  36. checkEmptyLineBefore({
  37. firstPropData: previousNodeData,
  38. secondPropData: nodeData,
  39. propsCount,
  40. lastKnownSeparatedGroup,
  41. context,
  42. emptyLineBeforeUnspecified,
  43. emptyLineMinimumPropertyThreshold,
  44. isFixEnabled,
  45. primaryOption,
  46. result,
  47. });
  48. });
  49. // Check if empty line before first prop should be removed
  50. if (isProperty(allNodesData[0].node)) {
  51. checkEmptyLineBeforeFirstProp({
  52. propData: allNodesData[0],
  53. primaryOption,
  54. emptyLineBeforeUnspecified,
  55. isFixEnabled,
  56. context,
  57. result,
  58. });
  59. }
  60. };