alecxe/eslint-plugin-protractor

View on GitHub
lib/extract-class-names.js

Summary

Maintainability
C
1 day
Test Coverage
'use strict'
 
/**
* @fileoverview Utility function to extract class names from a CSS selector
* @author Alexander Afanasyev
*/
 
var parser = require('./get-css-parser')
 
function extractClassNames (rule) {
var classNames = []
// extract class names defined with ".", e.g. .myclass
if (rule.classNames) {
classNames.push.apply(classNames, rule.classNames)
}
 
// extract class names defined in attributes, e.g. [class*=myclass]
if (rule.attrs) {
rule.attrs.forEach(function (attr) {
if (attr.name === 'class') {
classNames.push(attr.value)
}
})
}
return classNames
}
 
Function `exports` has a Cognitive Complexity of 7 (exceeds 5 allowed). Consider refactoring.
Similar blocks of code found in 2 locations. Consider refactoring.
module.exports = function (cssSelector) {
try {
var result = parser.parse(cssSelector)
} catch (err) {
// ignore parsing errors - we don't want it to fail miserably on a target machine during a ESLint run
return []
}
 
// handling empty inputs
if (!result) {
return []
}
 
var classNames = []
if (result.type === 'ruleSet') {
var rule = result.rule
while (rule) {
classNames.push.apply(classNames, extractClassNames(rule))
rule = rule.rule
}
} else if (result.type === 'selectors' && result.selectors) {
result.selectors.forEach(function (selector) {
var rule = selector.rule
while (rule) {
classNames.push.apply(classNames, extractClassNames(rule))
rule = rule.rule
}
})
}
return classNames
}