Sha256: 0bfc265965c83fc3885f0d803e084f046ac717b7bc7187ea1c2881ff0f4f3bfd

Contents?: true

Size: 1.84 KB

Versions: 45

Compression:

Stored size: 1.84 KB

Contents

'use strict';

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

/**
 * Get the 'last' node of the tree to test for an EOL
 *
 * @param {Object} node - The node whose last child we want to return
 * @returns {Object} The last node
 */
var getLastNode = function (node) {
  var last = node.last();

  return last ? getLastNode(last) : node;
};

module.exports = {
  'name': 'final-newline',
  'defaults': {
    'include': true
  },
  'detect': function (ast, parser) {
    var result = [],
        last,
        error = {
          'ruleId': parser.rule.name,
          'severity': parser.severity
        };

    // If the syntax is Sass we must recursively loop to determine the last node.
    // This is not required for SCSS which will always use the last node in the
    // content of the parent stylesheet node
    if (ast.syntax === 'sass') {
      last = getLastNode(ast);
    }
    else {
      last = ast.content[ast.content.length - 1];
    }

    if (!last.is('space') && !last.is('declarationDelimiter')) {
      if (parser.options.include) {
        error.line = last.end.line;
        error.column = last.end.column;
        error.message = 'Files must end with a new line';
        result = helpers.addUnique(result, error);
      }
    }
    else if ((last.is('space') || last.is('declarationDelimiter'))) {
      if (!helpers.hasEOL(last.content) && parser.options.include) {
        error.line = last.start.line;
        error.column = last.start.column;
        error.message = 'Files must end with a new line';
        result = helpers.addUnique(result, error);
      }
      else if (helpers.hasEOL(last.content) && !parser.options.include) {
        error.line = last.start.line;
        error.column = last.start.column;
        error.message = 'Files must not end with a new line';
        result = helpers.addUnique(result, error);
      }
    }

    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/final-newline.js
govuk_publishing_components-17.21.0 node_modules/sass-lint/lib/rules/final-newline.js
govuk_publishing_components-17.20.0 node_modules/sass-lint/lib/rules/final-newline.js
govuk_publishing_components-17.19.1 node_modules/sass-lint/lib/rules/final-newline.js
govuk_publishing_components-17.19.0 node_modules/sass-lint/lib/rules/final-newline.js
govuk_publishing_components-17.18.0 node_modules/sass-lint/lib/rules/final-newline.js
govuk_publishing_components-17.17.0 node_modules/sass-lint/lib/rules/final-newline.js
govuk_publishing_components-17.16.0 node_modules/sass-lint/lib/rules/final-newline.js
govuk_publishing_components-17.15.0 node_modules/sass-lint/lib/rules/final-newline.js
govuk_publishing_components-17.14.0 node_modules/sass-lint/lib/rules/final-newline.js
govuk_publishing_components-17.13.0 node_modules/sass-lint/lib/rules/final-newline.js
govuk_publishing_components-17.12.2 node_modules/sass-lint/lib/rules/final-newline.js
govuk_publishing_components-17.12.1 node_modules/sass-lint/lib/rules/final-newline.js
govuk_publishing_components-17.12.0 node_modules/sass-lint/lib/rules/final-newline.js
govuk_publishing_components-17.11.0 node_modules/sass-lint/lib/rules/final-newline.js
govuk_publishing_components-17.10.0 node_modules/sass-lint/lib/rules/final-newline.js
govuk_publishing_components-17.9.0 node_modules/sass-lint/lib/rules/final-newline.js
govuk_publishing_components-17.8.0 node_modules/sass-lint/lib/rules/final-newline.js
govuk_publishing_components-17.7.0 node_modules/sass-lint/lib/rules/final-newline.js
govuk_publishing_components-17.6.1 node_modules/sass-lint/lib/rules/final-newline.js