diff --git a/rules/no-forward/no-forward.test.js b/rules/no-forward/no-forward.test.js index 119b45a..dd99c51 100644 --- a/rules/no-forward/no-forward.test.js +++ b/rules/no-forward/no-forward.test.js @@ -35,7 +35,7 @@ forward({ from: eventOne, to: eventTwo }); { messageId: "replaceWithSample", output: ` -import { sample } from 'effector'; +import { forward, sample } from 'effector'; sample({ clock: eventOne, target: eventTwo }); `, }, @@ -56,7 +56,7 @@ forward({ from: eventOne.prepend((v) => v.length), to: eventTwo }); { messageId: "replaceWithSample", output: ` -import { sample } from 'effector'; +import { forward, sample } from 'effector'; sample({ clock: eventOne.prepend((v) => v.length), target: eventTwo }); `, }, @@ -77,7 +77,7 @@ forward({ from: eventOne.map((v) => v.length), to: eventTwo }); { messageId: "replaceWithSample", output: ` -import { sample } from 'effector'; +import { forward, sample } from 'effector'; sample({ clock: eventOne, fn: (v) => v.length, target: eventTwo }); `, }, @@ -98,7 +98,7 @@ forward({ from: eventOne, to: eventTwo.prepend((v) => v.length) }); { messageId: "replaceWithSample", output: ` -import { sample } from 'effector'; +import { forward, sample } from 'effector'; sample({ clock: eventOne, fn: (v) => v.length, target: eventTwo }); `, }, @@ -119,7 +119,7 @@ forward({ from: eventOne, to: serviceOne.featureOne.eventTwo.prepend((v) => v.le { messageId: "replaceWithSample", output: ` -import { sample } from 'effector'; +import { forward, sample } from 'effector'; sample({ clock: eventOne, fn: (v) => v.length, target: serviceOne.featureOne.eventTwo }); `, }, @@ -140,7 +140,7 @@ forward({ from: serviceOne.featureOne.eventOne.map((v) => v.length), to: eventTw { messageId: "replaceWithSample", output: ` -import { sample } from 'effector'; +import { forward, sample } from 'effector'; sample({ clock: serviceOne.featureOne.eventOne, fn: (v) => v.length, target: eventTwo }); `, }, @@ -161,7 +161,7 @@ forward({ from: merge(eventOne, eventOneOne), to: eventTwo }); { messageId: "replaceWithSample", output: ` -import { sample } from 'effector'; +import { forward, sample } from 'effector'; sample({ clock: merge(eventOne, eventOneOne), target: eventTwo }); `, }, @@ -171,7 +171,7 @@ sample({ clock: merge(eventOne, eventOneOne), target: eventTwo }); }, { code: ` -import { forward } from 'effector'; +import { sample, forward } from 'effector'; forward({ from: eventOne, to: [eventTwo, eventTwoTwo] }); `, errors: [ @@ -182,7 +182,7 @@ forward({ from: eventOne, to: [eventTwo, eventTwoTwo] }); { messageId: "replaceWithSample", output: ` -import { sample } from 'effector'; +import { sample, forward } from 'effector'; sample({ clock: eventOne, target: [eventTwo, eventTwoTwo] }); `, }, @@ -203,7 +203,7 @@ forward({ from: eventOne.map((v) => v.length), to: eventTwo.prepend(v => v.toStr { messageId: "replaceWithSample", output: ` -import { sample } from 'effector'; +import { forward, sample } from 'effector'; sample({ clock: eventOne.map((v) => v.length), target: eventTwo.prepend(v => v.toString()) }); `, }, diff --git a/rules/no-guard/no-guard.test.js b/rules/no-guard/no-guard.test.js index 200a4fd..319c4b5 100644 --- a/rules/no-guard/no-guard.test.js +++ b/rules/no-guard/no-guard.test.js @@ -39,7 +39,7 @@ guard({ clock: eventOne, target: eventTwo, filter: Boolean }); { messageId: "replaceWithSample", output: ` -import { sample } from 'effector'; +import { guard, sample } from 'effector'; sample({ clock: eventOne, filter: Boolean, target: eventTwo }); `, }, @@ -60,7 +60,7 @@ guard({ clock: eventOne, target: eventTwo.prepend((v) => v.length), filter: (v) { messageId: "replaceWithSample", output: ` -import { sample } from 'effector'; +import { guard, sample } from 'effector'; sample({ clock: eventOne, filter: (v) => v.length > 0, fn: (v) => v.length, target: eventTwo }); `, }, @@ -81,7 +81,7 @@ guard({ clock: eventOne, target: serviceOne.featureOne.eventTwo.prepend((v) => v { messageId: "replaceWithSample", output: ` -import { sample } from 'effector'; +import { guard, sample } from 'effector'; sample({ clock: eventOne, filter: $store, fn: (v) => v.length, target: serviceOne.featureOne.eventTwo }); `, }, @@ -102,7 +102,7 @@ guard({ source: $someStore, clock: merge(eventOne, eventOneOne), target: eventTw { messageId: "replaceWithSample", output: ` -import { sample } from 'effector'; +import { guard, sample } from 'effector'; sample({ clock: merge(eventOne, eventOneOne), source: $someStore, filter: Boolean, target: eventTwo }); `, }, @@ -112,7 +112,7 @@ sample({ clock: merge(eventOne, eventOneOne), source: $someStore, filter: Boolea }, { code: ` -import { guard } from 'effector'; +import { sample, guard } from 'effector'; guard({ clock: fFx.failData, filter: isAborted }); `, errors: [ @@ -123,7 +123,7 @@ guard({ clock: fFx.failData, filter: isAborted }); { messageId: "replaceWithSample", output: ` -import { sample } from 'effector'; +import { sample, guard } from 'effector'; sample({ clock: fFx.failData, filter: isAborted }); `, }, @@ -133,7 +133,7 @@ sample({ clock: fFx.failData, filter: isAborted }); }, { code: ` -import { guard } from 'effector'; +import SmthDefault, { guard, forward } from 'effector'; guard(fFx.failData, { filter: isAborted }); `, errors: [ @@ -144,7 +144,7 @@ guard(fFx.failData, { filter: isAborted }); { messageId: "replaceWithSample", output: ` -import { sample } from 'effector'; +import SmthDefault, { guard, sample, forward } from 'effector'; sample({ clock: fFx.failData, filter: isAborted }); `, }, diff --git a/rules/prefer-sample-over-forward-with-mapping/prefer-sample-over-forward-with-mapping.test.js b/rules/prefer-sample-over-forward-with-mapping/prefer-sample-over-forward-with-mapping.test.js index 9136324..033e58b 100644 --- a/rules/prefer-sample-over-forward-with-mapping/prefer-sample-over-forward-with-mapping.test.js +++ b/rules/prefer-sample-over-forward-with-mapping/prefer-sample-over-forward-with-mapping.test.js @@ -40,7 +40,7 @@ forward({ from: eventOne.map((v) => v.length), to: eventTwo }); { messageId: "replaceWithSample", output: ` -import { sample } from 'effector'; +import { forward, sample } from 'effector'; sample({ clock: eventOne, fn: (v) => v.length, target: eventTwo }); `, }, @@ -62,7 +62,7 @@ forward({ from: eventOne, to: eventTwo.prepend((v) => v.length) }); { messageId: "replaceWithSample", output: ` -import { sample } from 'effector'; +import { forward, sample } from 'effector'; sample({ clock: eventOne, fn: (v) => v.length, target: eventTwo }); `, }, @@ -84,7 +84,7 @@ forward({ from: eventOne, to: serviceOne.featureOne.eventTwo.prepend((v) => v.le { messageId: "replaceWithSample", output: ` -import { sample } from 'effector'; +import { forward, sample } from 'effector'; sample({ clock: eventOne, fn: (v) => v.length, target: serviceOne.featureOne.eventTwo }); `, }, @@ -106,7 +106,7 @@ forward({ from: serviceOne.featureOne.eventOne.map((v) => v.length), to: eventTw { messageId: "replaceWithSample", output: ` -import { sample } from 'effector'; +import { forward, sample } from 'effector'; sample({ clock: serviceOne.featureOne.eventOne, fn: (v) => v.length, target: eventTwo }); `, }, diff --git a/utils/extract-imported-from.js b/utils/extract-imported-from.js index 6a3804a..3c37a8f 100644 --- a/utils/extract-imported-from.js +++ b/utils/extract-imported-from.js @@ -1,6 +1,10 @@ function extractImportedFrom({ importMap, nodeMap, node, packageName }) { if (node.source.value === packageName) { for (const s of node.specifiers) { + if (s.type === "ImportDefaultSpecifier") { + continue; + } + importMap.set(s.imported.name, s.local.name); nodeMap?.set(s.imported.name, s); } diff --git a/utils/replace-by-sample.js b/utils/replace-by-sample.js index 77b44c6..ae88b47 100644 --- a/utils/replace-by-sample.js +++ b/utils/replace-by-sample.js @@ -88,7 +88,11 @@ function* replaceBySample( })})` ); - yield fixer.replaceText(importNodes.get(methodName), "sample"); + const importNode = importNodes.get(methodName); + + if (!importNodes.has("sample")) { + yield fixer.insertTextAfter(importNode, ", sample"); + } } module.exports = { replaceForwardBySample, replaceGuardBySample };