eslint-config-chain-able
Version:
an opinionated ESLint configuration
66 lines (57 loc) • 1.92 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
var schema = exports.schema = [];
exports.default = function (context) {
var globalScope = void 0;
// do nearly the same thing that eslint does for config globals
// https://github.com/eslint/eslint/blob/v2.0.0/lib/eslint.js#L118-L194
var makeDefined = function makeDefined(ident) {
var ii = void 0;
// start from the right since we're going to remove items from the array
for (ii = globalScope.through.length - 1; ii >= 0; ii--) {
var ref = globalScope.through[ii];
if (ref.identifier.name === ident.name) {
// use "__defineGeneric" since we don't have a reference to "escope.Variable"
globalScope.__defineGeneric( // eslint-disable-line no-underscore-dangle
ident.name, globalScope.set, globalScope.variables);
var variable = globalScope.set.get(ident.name);
variable.writeable = false;
// "through" contains all references whose definition cannot be found
// so we need to update references and remove the ones that were added
globalScope.through.splice(ii, 1);
ref.resolved = variable;
variable.references.push(ref);
}
}
};
return {
ClassImplements(node) {
makeDefined(node.id);
},
GenericTypeAnnotation(node) {
if (node.id.type === 'Identifier') {
makeDefined(node.id);
} else if (node.id.type === 'QualifiedTypeIdentifier') {
var qid = void 0;
qid = node.id;
do {
qid = qid.qualification;
} while (qid.qualification);
makeDefined(qid);
}
},
InterfaceDeclaration(node) {
makeDefined(node.id);
},
Program() {
globalScope = context.getScope();
},
TypeParameterDeclaration(node) {
node.params.forEach(function (param) {
makeDefined(param);
});
}
};
};
;