sass-lint
Version:
All Node Sass linter!
78 lines (68 loc) • 2.32 kB
JavaScript
;
var helpers = require('../helpers'),
yaml = require('js-yaml'),
fs = require('fs'),
path = require('path');
var pseudoElements = yaml.safeLoad(
fs.readFileSync(path.join(__dirname, '../../data', 'pseudoElements.yml'), 'utf8')
).split(' '),
pseudoClasses = yaml.safeLoad(
fs.readFileSync(path.join(__dirname, '../../data', 'pseudoClasses.yml'), 'utf8')
).split(' ');
/**
* Check if the given argument is a prefixed string. If it is we return an unprefixed
* version, else return it unmodified
*
* @param {Object|string} name - The value to test
* @returns {string} A prefix free version of the string
*/
var prefixFree = function prefixFree (name) {
return typeof name === 'string' && name.charAt(0) === '-' ? helpers.stripPrefix(name) : name;
};
/**
* Determine if the given string matches a pseudo-element
*
* @param {string} name - The name to check
* @returns {Boolean} Whether or not name is pseudo-element
*/
var isPseudoElement = function isPseudoElement (name) {
return pseudoElements.indexOf(prefixFree(name)) !== -1;
};
/**
* Determine if the given string matches a pseudo-class
*
* @param {string} name - The name to check
* @returns {Boolean} Whether or not name is pseudo-class
*/
var isPseudoClass = function isPseudoClass (name) {
return pseudoClasses.indexOf(prefixFree(name)) !== -1;
};
module.exports = {
'name': 'pseudo-element',
'detect': function (ast, parser) {
var result = [];
ast.traverseByType('pseudoClass', function (node) {
if (isPseudoElement(node.content[0].content)) {
result = helpers.addUnique(result, {
'ruleId': parser.rule.name,
'line': node.start.line,
'column': node.start.column,
'message': 'Pseudo-elements must start with double colons',
'severity': parser.severity
});
}
});
ast.traverseByType('pseudoElement', function (node) {
if (isPseudoClass(node.content[0].content)) {
result = helpers.addUnique(result, {
'ruleId': parser.rule.name,
'line': node.start.line,
'column': node.start.column,
'message': 'Pseudo-classes must start with a single colon',
'severity': parser.severity
});
}
});
return result;
}
};