Sha256: 2c52319b36bdc749984e8e522393da35d90cf53bf8c7a0495817fe2a5135025f

Contents?: true

Size: 1.32 KB

Versions: 24

Compression:

Stored size: 1.32 KB

Contents

'use strict';

const { isComment, hasSource } = require('./typeGuards');

/**
 * @param {import('postcss').Node} statement
 * @returns {boolean}
 */
module.exports = function (statement) {
	const parentNode = statement.parent;

	if (parentNode === undefined || parentNode.type === 'root') {
		return false;
	}

	if (statement === parentNode.first) {
		return true;
	}

	/*
	 * Search for the statement in the parent's nodes, ignoring comment
	 * nodes on the same line as the parent's opening brace.
	 */

	const parentNodes = parentNode.nodes;

	if (!parentNodes) {
		return false;
	}

	const firstNode = parentNodes[0];

	if (
		!isComment(firstNode) ||
		(typeof firstNode.raws.before === 'string' && firstNode.raws.before.includes('\n'))
	) {
		return false;
	}

	if (!hasSource(firstNode) || !firstNode.source.start) {
		return false;
	}

	const openingBraceLine = firstNode.source.start.line;

	if (!firstNode.source.end || openingBraceLine !== firstNode.source.end.line) {
		return false;
	}

	for (let i = 1; i < parentNodes.length; i++) {
		const node = parentNodes[i];

		if (node === statement) {
			return true;
		}

		if (
			!isComment(node) ||
			(hasSource(node) && node.source.end && node.source.end.line !== openingBraceLine)
		) {
			return false;
		}
	}

	/* istanbul ignore next: Should always return in the loop */
	return false;
};

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
trusty-cms-6.3.1 node_modules/stylelint/lib/utils/isFirstNested.js
trusty-cms-5.0.7 node_modules/stylelint/lib/utils/isFirstNested.js
trusty-cms-5.0.6 node_modules/stylelint/lib/utils/isFirstNested.js
trusty-cms-5.0.5 node_modules/stylelint/lib/utils/isFirstNested.js
trusty-cms-5.0.4 node_modules/stylelint/lib/utils/isFirstNested.js
trusty-cms-5.0.3 node_modules/stylelint/lib/utils/isFirstNested.js
trusty-cms-5.0.2 node_modules/stylelint/lib/utils/isFirstNested.js
trusty-cms-5.0.1 node_modules/stylelint/lib/utils/isFirstNested.js
trusty-cms-4.3.5 node_modules/stylelint/lib/utils/isFirstNested.js
trusty-cms-5.0.0 node_modules/stylelint/lib/utils/isFirstNested.js
trusty-cms-4.3.4 node_modules/stylelint/lib/utils/isFirstNested.js
trusty-cms-4.3.3 node_modules/stylelint/lib/utils/isFirstNested.js
trusty-cms-4.3.2 node_modules/stylelint/lib/utils/isFirstNested.js
trusty-cms-4.3.1 node_modules/stylelint/lib/utils/isFirstNested.js
trusty-cms-4.3 node_modules/stylelint/lib/utils/isFirstNested.js
trusty-cms-4.2.3 node_modules/stylelint/lib/utils/isFirstNested.js
trusty-cms-4.2.2 node_modules/stylelint/lib/utils/isFirstNested.js
trusty-cms-4.2.1 node_modules/stylelint/lib/utils/isFirstNested.js
trusty-cms-4.2 node_modules/stylelint/lib/utils/isFirstNested.js
trusty-cms-4.1.9 node_modules/stylelint/lib/utils/isFirstNested.js