Skip to content

Commit a5a2d84

Browse files
committed
fix: implement fluent for pipeable overloads
1 parent 2f572be commit a5a2d84

File tree

3 files changed

+35
-12
lines changed

3 files changed

+35
-12
lines changed

effect/packages/package2/fp-ts__core.json

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,5 +47,28 @@
4747
}
4848
]
4949
}
50+
],
51+
"@fp-ts/core/Option": [
52+
{
53+
"definitionName": "Option",
54+
"definitionKind": "type",
55+
"extensions": [
56+
{
57+
"kind": "type",
58+
"typeName": "fp-ts/Option"
59+
}
60+
]
61+
},
62+
{
63+
"definitionName": "filter",
64+
"definitionKind": "const",
65+
"extensions": [
66+
{
67+
"kind": "pipeable",
68+
"typeName": "fp-ts/Option",
69+
"name": "filter"
70+
}
71+
]
72+
}
5073
]
5174
}

effect/packages/package2/src/external-definitions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ import { Sync } from '@fp-ts/core/Sync'
33

44
Async.fromSync(() => console.log("Fluent in fp-ts!")).delay(1)
55

6-
Sync.of(1).map((n) => n + 1)
6+
Sync.of(1).map((n) => n + 1)

src/compiler/checker.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -48237,7 +48237,6 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
4823748237
if (every(signatures, (sig) => !!sig.declaration && !!sig.declaration.type && isFunctionTypeNode(sig.declaration.type) && sig.declaration.type.parameters.length === 1)) {
4823848238
const tsPlusSignatures = flatMap(signatures, (sig) => {
4823948239
const returnType = getReturnTypeOfSignature(sig);
48240-
const returnTypeNode = sig.declaration!.type! as FunctionTypeNode;
4824148240
const returnSignatures = getSignaturesOfType(returnType, SignatureKind.Call);
4824248241
if (signatures.find(isPipeableSelfARestParameter)) {
4824348242
error(pipeable, Diagnostics.The_first_parameter_of_a_pipeable_annotated_function_cannot_be_a_rest_parameter);
@@ -48254,9 +48253,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
4825448253
pipeable.modifiers,
4825548254
pipeable.asteriskToken,
4825648255
pipeable.name,
48257-
[...(returnTypeNode.typeParameters ?? []), ...(pipeable.typeParameters ?? [])],
48258-
[...returnTypeNode.parameters, ...pipeable.parameters],
48259-
returnTypeNode.type,
48256+
[...(rsig.declaration?.typeParameters as NodeArray<TypeParameterDeclaration> ?? []), ...(sig.declaration?.typeParameters as NodeArray<TypeParameterDeclaration> ?? [])],
48257+
[...(rsig.declaration?.parameters as NodeArray<ParameterDeclaration> ?? []), ...(sig.declaration?.parameters as NodeArray<ParameterDeclaration> ?? [])],
48258+
rsig.declaration?.type as TypeNode,
4826048259
undefined
4826148260
);
4826248261
newDecl.jsDoc = pipeable.jsDoc;
@@ -48379,7 +48378,6 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
4837948378
isFunctionTypeNode(sig.declaration.type) &&
4838048379
sig.declaration.type.parameters.length === 1)
4838148380
) {
48382-
const pipeableWithType = pipeable as VariableDeclarationWithFunctionType
4838348381
if (signatures.find(isPipeableSelfARestParameter)) {
4838448382
error(pipeable, Diagnostics.The_first_parameter_of_a_pipeable_annotated_function_cannot_be_a_rest_parameter);
4838548383
return;
@@ -48394,10 +48392,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
4839448392
newSig.typeParameters = [...(rsig.typeParameters ?? []), ...(sig.typeParameters ?? [])];
4839548393
newSig.resolvedReturnType = getReturnTypeOfSignature(rsig);
4839648394
newSig.minArgumentCount = newSig.minArgumentCount + 1;
48397-
const newDecl = factory.updateFunctionTypeNode(
48398-
pipeableWithType.type,
48399-
factory.createNodeArray([...(returnFn.typeParameters ?? []), ...(pipeableWithType.type.typeParameters ?? [])]),
48400-
factory.createNodeArray([...returnFn.parameters, ...pipeableWithType.type.parameters]),
48395+
const newDecl = factory.createFunctionTypeNode(
48396+
factory.createNodeArray([...(returnFn.typeParameters ?? []), ...(sig.declaration?.typeParameters as NodeArray<TypeParameterDeclaration> ?? [])]),
48397+
factory.createNodeArray([...returnFn.parameters, ...(sig.declaration?.parameters as NodeArray<ParameterDeclaration> ?? [])]),
4840148398
returnFn.type
4840248399
);
4840348400
newDecl.jsDoc = pipeable.jsDoc;
@@ -48877,8 +48874,11 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
4887748874
}
4887848875
}
4887948876
function cacheTsPlusPipeableVariable(file: SourceFile, declaration: VariableDeclarationWithIdentifier) {
48880-
if((declaration.initializer && isFunctionLikeDeclaration(declaration.initializer)) ||
48881-
(declaration.type && isFunctionTypeNode(declaration.type))) {
48877+
if(
48878+
(declaration.initializer && isFunctionLikeDeclaration(declaration.initializer)) ||
48879+
(declaration.type && isFunctionTypeNode(declaration.type)) ||
48880+
((declaration.type) && isTypeLiteralNode(declaration.type) && every(declaration.type.members, isCallSignatureDeclaration))
48881+
) {
4888248882
for (const { target, name, priority } of collectTsPlusPipeableTags(declaration)) {
4888348883
getTsPlusSourceFileCache(target).add(getSourceFileOfNode(declaration));
4888448884
if (!unresolvedPipeableCache.has(target)) {

0 commit comments

Comments
 (0)