Skip to content

Commit 6e71499

Browse files
committed
refactor(core): improve 'is-from-react' utilities
1 parent e6d4a93 commit 6e71499

File tree

13 files changed

+312
-119
lines changed

13 files changed

+312
-119
lines changed

packages/core/docs/-internal-/interfaces/TSTypeOperator.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ The loc property is defined as nullable by ESTree, but ESLint requires this prop
2828

2929
### operator
3030

31-
> **operator**: `"keyof"` \| `"readonly"` \| `"unique"`
31+
> **operator**: `"readonly"` \| `"keyof"` \| `"unique"`
3232
3333
***
3434

packages/core/docs/README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,11 @@
8383
- [isForwardRef](functions/isForwardRef.md)
8484
- [isForwardRefCall](functions/isForwardRefCall.md)
8585
- [isFromReact](functions/isFromReact.md)
86+
- [isFromReactLoose](functions/isFromReactLoose.md)
87+
- [isFromReactMember](functions/isFromReactMember.md)
88+
- [isFromReactMemberLoose](functions/isFromReactMemberLoose.md)
89+
- [isFromReactMemberStrict](functions/isFromReactMemberStrict.md)
90+
- [isFromReactStrict](functions/isFromReactStrict.md)
8691
- [isFunctionOfComponentDidMount](functions/isFunctionOfComponentDidMount.md)
8792
- [isFunctionOfComponentWillUnmount](functions/isFunctionOfComponentWillUnmount.md)
8893
- [isFunctionOfRenderMethod](functions/isFunctionOfRenderMethod.md)

packages/core/docs/functions/isFromReact.md

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,16 @@
88

99
> **isFromReact**(`name`): (`node`, `context`) => `boolean`
1010
11-
Checks if the given node is a call expression to the given function or method of the pragma
12-
1311
## Parameters
1412

1513
### name
1614

1715
`string`
1816

19-
The name of the function or method to check
20-
2117
## Returns
2218

2319
`Function`
2420

25-
A predicate that checks if the given node is a call expression to the given function or method
26-
2721
### Parameters
2822

2923
#### node
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
[**@eslint-react/core**](../README.md)
2+
3+
***
4+
5+
[@eslint-react/core](../README.md) / isFromReactLoose
6+
7+
# Function: isFromReactLoose()
8+
9+
> **isFromReactLoose**(`node`, `name`): `boolean`
10+
11+
## Parameters
12+
13+
### node
14+
15+
[`Identifier`](../-internal-/interfaces/Identifier.md) | [`MemberExpression`](../-internal-/type-aliases/MemberExpression.md)
16+
17+
### name
18+
19+
`string`
20+
21+
## Returns
22+
23+
`boolean`
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
[**@eslint-react/core**](../README.md)
2+
3+
***
4+
5+
[@eslint-react/core](../README.md) / isFromReactMember
6+
7+
# Function: isFromReactMember()
8+
9+
> **isFromReactMember**(`memberName`, `name`): (`node`, `context`) => `boolean`
10+
11+
## Parameters
12+
13+
### memberName
14+
15+
`string`
16+
17+
### name
18+
19+
`string`
20+
21+
## Returns
22+
23+
`Function`
24+
25+
### Parameters
26+
27+
#### node
28+
29+
[`MemberExpression`](../-internal-/type-aliases/MemberExpression.md)
30+
31+
#### context
32+
33+
[`Readonly`](../-internal-/type-aliases/Readonly.md)
34+
35+
### Returns
36+
37+
`boolean`
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
[**@eslint-react/core**](../README.md)
2+
3+
***
4+
5+
[@eslint-react/core](../README.md) / isFromReactMemberLoose
6+
7+
# Function: isFromReactMemberLoose()
8+
9+
> **isFromReactMemberLoose**(`node`, `memberName`, `name`): `boolean`
10+
11+
## Parameters
12+
13+
### node
14+
15+
[`MemberExpression`](../-internal-/type-aliases/MemberExpression.md)
16+
17+
### memberName
18+
19+
`string`
20+
21+
### name
22+
23+
`string`
24+
25+
## Returns
26+
27+
`boolean`
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
[**@eslint-react/core**](../README.md)
2+
3+
***
4+
5+
[@eslint-react/core](../README.md) / isFromReactMemberStrict
6+
7+
# Function: isFromReactMemberStrict()
8+
9+
> **isFromReactMemberStrict**(`node`, `memberName`, `name`, `importSource`, `initialScope`): `boolean`
10+
11+
## Parameters
12+
13+
### node
14+
15+
[`MemberExpression`](../-internal-/type-aliases/MemberExpression.md)
16+
17+
### memberName
18+
19+
`string`
20+
21+
### name
22+
23+
`string`
24+
25+
### importSource
26+
27+
`string`
28+
29+
### initialScope
30+
31+
[`Scope`](../-internal-/type-aliases/Scope.md)
32+
33+
## Returns
34+
35+
`boolean`
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
[**@eslint-react/core**](../README.md)
2+
3+
***
4+
5+
[@eslint-react/core](../README.md) / isFromReactStrict
6+
7+
# Function: isFromReactStrict()
8+
9+
> **isFromReactStrict**(`node`, `name`, `importSource`, `initialScope`): `boolean`
10+
11+
## Parameters
12+
13+
### node
14+
15+
[`Identifier`](../-internal-/interfaces/Identifier.md) | [`MemberExpression`](../-internal-/type-aliases/MemberExpression.md)
16+
17+
### name
18+
19+
`string`
20+
21+
### importSource
22+
23+
`string`
24+
25+
### initialScope
26+
27+
[`Scope`](../-internal-/type-aliases/Scope.md)
28+
29+
## Returns
30+
31+
`boolean`

packages/core/src/utils/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
export * from "./is-call-from-react";
12
export * from "./is-display-name-assignment";
23
export * from "./is-from-react";
34
export * from "./is-initialized-from-react";
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import * as AST from "@eslint-react/ast";
2+
import { dual } from "@eslint-react/eff";
3+
import type { RuleContext } from "@eslint-react/shared";
4+
import type { TSESTree } from "@typescript-eslint/types";
5+
import { AST_NODE_TYPES as T } from "@typescript-eslint/types";
6+
7+
import { isFromReact, isFromReactMember } from "./is-from-react";
8+
9+
export declare namespace isCallFromReact {
10+
type ReturnType = {
11+
(context: RuleContext): (node: TSESTree.Node) => node is TSESTree.CallExpression;
12+
(node: TSESTree.Node, context: RuleContext): node is TSESTree.CallExpression;
13+
};
14+
}
15+
16+
export function isCallFromReact(name: string): isCallFromReact.ReturnType {
17+
return dual(2, (node: TSESTree.Node, context: RuleContext): node is TSESTree.CallExpression => {
18+
if (node.type !== T.CallExpression) return false;
19+
if (!AST.isOneOf([T.Identifier, T.MemberExpression])(node.callee)) return false;
20+
return isFromReact(name)(node.callee, context);
21+
});
22+
}
23+
24+
export declare namespace isCallFromReactMember {
25+
type ReturnType = {
26+
(context: RuleContext): (node: TSESTree.Node) => node is
27+
& TSESTree.CallExpression
28+
& { callee: TSESTree.MemberExpression };
29+
(node: TSESTree.Node, context: RuleContext): node is
30+
& TSESTree.CallExpression
31+
& { callee: TSESTree.MemberExpression };
32+
};
33+
}
34+
35+
export function isCallFromReactMember(
36+
pragmaMemberName: string,
37+
name: string,
38+
): isCallFromReactMember.ReturnType {
39+
return dual(2, (node: TSESTree.Node, context: RuleContext): node is
40+
& TSESTree.CallExpression
41+
& { callee: TSESTree.MemberExpression } =>
42+
{
43+
if (node.type !== T.CallExpression) return false;
44+
if (!AST.is(T.MemberExpression)(node.callee)) return false;
45+
return isFromReactMember(pragmaMemberName, name)(node.callee, context);
46+
});
47+
}

0 commit comments

Comments
 (0)