β¬ οΈ Back to Table of Contents
π related-getter-setter-pairs¶
π Analysis Summary¶
| Metric | Count |
|---|---|
| π§ Functions | 3 |
| π¦ Imports | 5 |
| π Interfaces | 1 |
| π Type Aliases | 4 |
π Table of Contents¶
π οΈ File Location:¶
π packages/eslint-plugin/src/rules/related-getter-setter-pairs.ts
π€ Default Export¶
| Property | Value |
|---|---|
name |
'related-getter-setter-pairs' |
meta.type |
'problem' |
meta.docs.description |
'Enforce that get() types should be assignable to their equivalent set() type' |
meta.docs.recommended |
'strict' |
meta.docs.requiresTypeChecking |
true |
meta.messages.mismatch |
'get() type should be assignable to its equivalent set() type.' |
meta.schema |
[] |
defaultOptions |
[] |
Entry point: create β documented under Functions.
π¦ Imports¶
| Name | Source |
|---|---|
TSESTree |
@typescript-eslint/utils |
AST_NODE_TYPES |
@typescript-eslint/utils |
createRule |
../util |
getNameFromMember |
../util |
getParserServices |
../util |
Functions¶
create(context: any): { ':matches(ClassBody, TSInterfaceBody, TSTypeLiteral):exit⦶
Parameters:
contextany
Returns: { ':matches(ClassBody, TSInterfaceBody, TSTypeLiteral):exit'(): void; ':matches(MethodDefinition, TSMethodSignature)[kind=get]'(node: GetMethodRaw): void; ':matches(MethodDefinition, TSMethodSignature)[kind=set]'(node: SetMethod): void; 'ClassBody, TSInterfaceBody, TSTypeLiteral'(): void; }
Calls:
getParserServices (from ../util)services.program.getTypeCheckergetNameFromMember (from ../util)methodPairs.setmethodPairs.getmethodPairs.valuesservices.getTypeAtLocationchecker.isTypeAssignableTocontext.reportmethodPairsStack.popgetMethodFromNodeaddPropertyNodemethodPairsStack.push
Code
create(context) {
const services = getParserServices(context);
const checker = services.program.getTypeChecker();
const methodPairsStack: Map<string, MethodPair>[] = [];
function addPropertyNode(
member: GetMethod | SetMethod,
inner: TSESTree.Node,
kind: 'get' | 'set',
): void {
const methodPairs = methodPairsStack[methodPairsStack.length - 1];
const { name } = getNameFromMember(member, context.sourceCode);
methodPairs.set(name, {
...methodPairs.get(name),
[kind]: inner,
});
}
return {
':matches(ClassBody, TSInterfaceBody, TSTypeLiteral):exit'(): void {
const methodPairs = methodPairsStack[methodPairsStack.length - 1];
for (const pair of methodPairs.values()) {
if (!pair.get || !pair.set) {
continue;
}
const getter = pair.get;
const getType = services.getTypeAtLocation(getter);
const setType = services.getTypeAtLocation(pair.set.params[0]);
if (!checker.isTypeAssignableTo(getType, setType)) {
context.report({
node: getter.returnType.typeAnnotation,
messageId: 'mismatch',
});
}
}
methodPairsStack.pop();
},
':matches(MethodDefinition, TSMethodSignature)[kind=get]'(
node: GetMethodRaw,
): void {
const getter = getMethodFromNode(node);
if (getter.returnType) {
addPropertyNode(node, getter, 'get');
}
},
':matches(MethodDefinition, TSMethodSignature)[kind=set]'(
node: SetMethod,
): void {
const setter = getMethodFromNode(node);
if (setter.params.length === 1) {
addPropertyNode(node, setter, 'set');
}
},
'ClassBody, TSInterfaceBody, TSTypeLiteral'(): void {
methodPairsStack.push(new Map());
},
};
}
getMethodFromNode(node: GetMethodRaw | SetMethod): any¶
Parameters:
nodeGetMethodRaw | SetMethod
Returns: any
Code
Internal helpers¶
Declared inside another function in this file.
addPropertyNode(member: GetMethod | SetMethod, inner: TSESTree.Node, kind: 'get' | 'set'): void¶
Parameters:
memberGetMethod | SetMethodinnerTSESTree.Nodekind'get' | 'set'
Returns: void
Calls:
getNameFromMember (from ../util)methodPairs.setmethodPairs.get
Code
function addPropertyNode(
member: GetMethod | SetMethod,
inner: TSESTree.Node,
kind: 'get' | 'set',
): void {
const methodPairs = methodPairsStack[methodPairsStack.length - 1];
const { name } = getNameFromMember(member, context.sourceCode);
methodPairs.set(name, {
...methodPairs.get(name),
[kind]: inner,
});
}
Interfaces¶
MethodPair¶
Properties¶
| Name | Type | Optional | Description |
|---|---|---|---|
get |
GetMethod |
β | not shown |
set |
SetMethod |
β | not shown |
Type Aliases¶
Method¶
GetMethod¶
GetMethodRaw¶
SetMethod¶
Generated by Syntax Scribe