eslint-plugin-commonjs-require-name
Version:
eslint plugin for enforcing a `require` naming convention
63 lines (48 loc) • 999 B
JavaScript
const LeftToRight = exports;
function instance() {
return {
compare(actual, expected) {
if (strict(actual, expected)) {
return true;
}
return loose(actual, expected);
},
error() {
return 'order left-to-right: out of order token matches';
}
};
}
function same(actual, expected) {
for (let i = 0; i < expected.length(); i++) {
if (!expected.index(i).equals(actual.index(i))) {
return false;
}
}
return true;
}
function strict(actual, expected) {
if (expected.length() !== actual.length()) {
return false;
}
if (same(expected.sort(), actual.sort())) {
return same(actual, expected);
}
}
function loose(actual, expected) {
let start = -1;
for (const item of expected) {
const index = actual.indexOf({left: item});
if (index < 0) {
continue;
}
if (start < 0) {
start = index;
}
if (index < start || index - start > 0) {
return false;
}
actual = actual.pullAt(index);
}
return true;
}
LeftToRight.instance = instance;