Sha256: df39b76572986ff228751a09243407c214a7ad8dc99bc867973f7e282b32c278

Contents?: true

Size: 1.78 KB

Versions: 45

Compression:

Stored size: 1.78 KB

Contents

'use strict';

var helpers = require('../helpers');

module.exports = {
  'name': 'nesting-depth',
  'defaults': {
    'max-depth': 2
  },
  'detect': function (ast, parser) {
    var result = [],
        nodes = {},
        depth = 0;

    var recursiveSearch = function (node) {
      if (node.contains('block')) {
        node.forEach('block', function (block) {
          if (block.contains('ruleset')) {
            depth++;
            block.forEach('ruleset', function (ruleset) {
              var selector = ruleset.first('selector');

              if (depth > parser.options['max-depth']) {
                var nodeLineColumn = selector.start.line + ':' + selector.start.column;

                if (nodes[nodeLineColumn]) {
                  if (depth > nodes[nodeLineColumn].depth) {
                    nodes[nodeLineColumn].depth = depth;
                  }
                }
                else {
                  nodes[nodeLineColumn] = {
                    'line': selector.start.line,
                    'column': selector.start.column,
                    'depth': depth
                  };
                }
              }
              else {
                recursiveSearch(ruleset);
              }
            });
          }
        });
      }
      depth--;
    };

    ast.traverseByType('selector', function (selector, i, parent) {
      recursiveSearch(parent);
      depth = 0;
    });

    Object.keys(nodes).forEach(function (node) {
      node = nodes[node];
      result = helpers.addUnique(result, {
        'ruleId': parser.rule.name,
        'line': node.line,
        'column': node.column,
        'message': 'Nesting depth ' + node.depth + ' greater than max of ' + parser.options['max-depth'],
        'severity': parser.severity
      });
    });


    return result;
  }
};

Version data entries

45 entries across 45 versions & 2 rubygems

Version Path
govuk_publishing_components-18.0.0 node_modules/sass-lint/lib/rules/nesting-depth.js
govuk_publishing_components-17.21.0 node_modules/sass-lint/lib/rules/nesting-depth.js
govuk_publishing_components-17.20.0 node_modules/sass-lint/lib/rules/nesting-depth.js
govuk_publishing_components-17.19.1 node_modules/sass-lint/lib/rules/nesting-depth.js
govuk_publishing_components-17.19.0 node_modules/sass-lint/lib/rules/nesting-depth.js
govuk_publishing_components-17.18.0 node_modules/sass-lint/lib/rules/nesting-depth.js
govuk_publishing_components-17.17.0 node_modules/sass-lint/lib/rules/nesting-depth.js
govuk_publishing_components-17.16.0 node_modules/sass-lint/lib/rules/nesting-depth.js
govuk_publishing_components-17.15.0 node_modules/sass-lint/lib/rules/nesting-depth.js
govuk_publishing_components-17.14.0 node_modules/sass-lint/lib/rules/nesting-depth.js
govuk_publishing_components-17.13.0 node_modules/sass-lint/lib/rules/nesting-depth.js
govuk_publishing_components-17.12.2 node_modules/sass-lint/lib/rules/nesting-depth.js
govuk_publishing_components-17.12.1 node_modules/sass-lint/lib/rules/nesting-depth.js
govuk_publishing_components-17.12.0 node_modules/sass-lint/lib/rules/nesting-depth.js
govuk_publishing_components-17.11.0 node_modules/sass-lint/lib/rules/nesting-depth.js
govuk_publishing_components-17.10.0 node_modules/sass-lint/lib/rules/nesting-depth.js
govuk_publishing_components-17.9.0 node_modules/sass-lint/lib/rules/nesting-depth.js
govuk_publishing_components-17.8.0 node_modules/sass-lint/lib/rules/nesting-depth.js
govuk_publishing_components-17.7.0 node_modules/sass-lint/lib/rules/nesting-depth.js
govuk_publishing_components-17.6.1 node_modules/sass-lint/lib/rules/nesting-depth.js