📄 no-for-in-array¶
📊 Analysis Summary¶
| Metric | Count |
|---|---|
| 🔧 Functions | 4 |
| 📦 Imports | 4 |
📚 Table of Contents¶
🛠️ File Location:¶
📂 packages/eslint-plugin/src/rules/no-for-in-array.ts
📤 Default Export¶
| Property | Value |
|---|---|
name |
'no-for-in-array' |
meta.type |
'problem' |
meta.docs.description |
'Disallow iterating over an array with a for-in loop' |
meta.docs.recommended |
'recommended' |
meta.docs.requiresTypeChecking |
true |
meta.messages.forInViolation |
'For-in loops over arrays skips holes, returns indices as strings, and may visit the prototype chain or other enumera... |
meta.schema |
[] |
defaultOptions |
[] |
Entry point: create — documented under Functions.
📦 Imports¶
| Name | Source |
|---|---|
createRule |
../util |
getConstrainedTypeAtLocation |
../util |
getParserServices |
../util |
getForStatementHeadLoc |
../util/getForStatementHeadLoc |
Functions¶
create(context: any): { ForInStatement(node: any): void; }¶
Parameters:
contextany
Returns: { ForInStatement(node: any): void; }
Calls:
getParserServices (from ../util)services.program.getTypeCheckergetConstrainedTypeAtLocation (from ../util)isArrayLikecontext.reportgetForStatementHeadLoc (from ../util/getForStatementHeadLoc)
Code
create(context) {
return {
ForInStatement(node): void {
const services = getParserServices(context);
const checker = services.program.getTypeChecker();
const type = getConstrainedTypeAtLocation(services, node.right);
if (isArrayLike(checker, type)) {
context.report({
loc: getForStatementHeadLoc(context.sourceCode, node),
messageId: 'forInViolation',
});
}
},
};
}
isArrayLike(checker: ts.TypeChecker, type: ts.Type): boolean¶
Parameters:
checkerts.TypeCheckertypets.Type
Returns: boolean
Calls:
isTypeRecursert.getNumberIndexTypehasArrayishLength
Code
hasArrayishLength(checker: ts.TypeChecker, type: ts.Type): boolean¶
Parameters:
checkerts.TypeCheckertypets.Type
Returns: boolean
Calls:
type.getPropertytsutils.isTypeFlagSetchecker.getTypeOfSymbol
Code
isTypeRecurser(type: ts.Type, predicate: (t: ts.Type) => boolean): boolean¶
Parameters:
typets.Typepredicate(t: ts.Type) => boolean
Returns: boolean
Calls:
type.isUnionOrIntersectiontype.types.someisTypeRecurserpredicate
Code
Generated by Syntax Scribe