@effect/language-service 0.19.0 → 0.20.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/index.js +304 -64
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/transform.js +125 -42
- package/transform.js.map +1 -1
package/package.json
CHANGED
package/transform.js
CHANGED
|
@@ -24,7 +24,7 @@ __export(transform_exports, {
|
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(transform_exports);
|
|
26
26
|
|
|
27
|
-
// node_modules/.pnpm/effect@3.16.
|
|
27
|
+
// node_modules/.pnpm/effect@3.16.5/node_modules/effect/dist/esm/Function.js
|
|
28
28
|
var isFunction = (input) => typeof input === "function";
|
|
29
29
|
var dual = function(arity, body) {
|
|
30
30
|
if (typeof arity === "function") {
|
|
@@ -118,11 +118,11 @@ function pipe(a, ab, bc, cd, de, ef, fg, gh, hi) {
|
|
|
118
118
|
}
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
-
// node_modules/.pnpm/effect@3.16.
|
|
122
|
-
var moduleVersion = "3.16.
|
|
121
|
+
// node_modules/.pnpm/effect@3.16.5/node_modules/effect/dist/esm/internal/version.js
|
|
122
|
+
var moduleVersion = "3.16.5";
|
|
123
123
|
var getCurrentVersion = () => moduleVersion;
|
|
124
124
|
|
|
125
|
-
// node_modules/.pnpm/effect@3.16.
|
|
125
|
+
// node_modules/.pnpm/effect@3.16.5/node_modules/effect/dist/esm/GlobalValue.js
|
|
126
126
|
var globalStoreId = `effect/GlobalValue/globalStoreId/${/* @__PURE__ */ getCurrentVersion()}`;
|
|
127
127
|
var globalStore;
|
|
128
128
|
var globalValue = (id, compute) => {
|
|
@@ -136,7 +136,7 @@ var globalValue = (id, compute) => {
|
|
|
136
136
|
return globalStore.get(id);
|
|
137
137
|
};
|
|
138
138
|
|
|
139
|
-
// node_modules/.pnpm/effect@3.16.
|
|
139
|
+
// node_modules/.pnpm/effect@3.16.5/node_modules/effect/dist/esm/Predicate.js
|
|
140
140
|
var isString = (input) => typeof input === "string";
|
|
141
141
|
var isNumber = (input) => typeof input === "number";
|
|
142
142
|
var isBoolean = (input) => typeof input === "boolean";
|
|
@@ -145,10 +145,10 @@ var isRecordOrArray = (input) => typeof input === "object" && input !== null;
|
|
|
145
145
|
var isObject = (input) => isRecordOrArray(input) || isFunction2(input);
|
|
146
146
|
var hasProperty = /* @__PURE__ */ dual(2, (self, property) => isObject(self) && property in self);
|
|
147
147
|
|
|
148
|
-
// node_modules/.pnpm/effect@3.16.
|
|
148
|
+
// node_modules/.pnpm/effect@3.16.5/node_modules/effect/dist/esm/internal/errors.js
|
|
149
149
|
var getBugErrorMessage = (message) => `BUG: ${message} - please report an issue at https://github.com/Effect-TS/effect/issues`;
|
|
150
150
|
|
|
151
|
-
// node_modules/.pnpm/effect@3.16.
|
|
151
|
+
// node_modules/.pnpm/effect@3.16.5/node_modules/effect/dist/esm/Utils.js
|
|
152
152
|
var GenKindTypeId = /* @__PURE__ */ Symbol.for("effect/Gen/GenKind");
|
|
153
153
|
var isGenKind = (u) => isObject(u) && GenKindTypeId in u;
|
|
154
154
|
var GenKindImpl = class {
|
|
@@ -277,7 +277,7 @@ var internalCall = isNotOptimizedAway ? standard.effect_internal_function : forc
|
|
|
277
277
|
var genConstructor = function* () {
|
|
278
278
|
}.constructor;
|
|
279
279
|
|
|
280
|
-
// node_modules/.pnpm/effect@3.16.
|
|
280
|
+
// node_modules/.pnpm/effect@3.16.5/node_modules/effect/dist/esm/Hash.js
|
|
281
281
|
var randomHashCache = /* @__PURE__ */ globalValue(/* @__PURE__ */ Symbol.for("effect/Hash/randomHashCache"), () => /* @__PURE__ */ new WeakMap());
|
|
282
282
|
var symbol = /* @__PURE__ */ Symbol.for("effect/Hash");
|
|
283
283
|
var hash = (self) => {
|
|
@@ -376,7 +376,7 @@ var cached = function() {
|
|
|
376
376
|
return hash2;
|
|
377
377
|
};
|
|
378
378
|
|
|
379
|
-
// node_modules/.pnpm/effect@3.16.
|
|
379
|
+
// node_modules/.pnpm/effect@3.16.5/node_modules/effect/dist/esm/Equal.js
|
|
380
380
|
var symbol2 = /* @__PURE__ */ Symbol.for("effect/Equal");
|
|
381
381
|
function equals() {
|
|
382
382
|
if (arguments.length === 1) {
|
|
@@ -429,7 +429,7 @@ function compareBoth(self, that) {
|
|
|
429
429
|
}
|
|
430
430
|
var isEqual = (u) => hasProperty(u, symbol2);
|
|
431
431
|
|
|
432
|
-
// node_modules/.pnpm/effect@3.16.
|
|
432
|
+
// node_modules/.pnpm/effect@3.16.5/node_modules/effect/dist/esm/Inspectable.js
|
|
433
433
|
var NodeInspectSymbol = /* @__PURE__ */ Symbol.for("nodejs.util.inspect.custom");
|
|
434
434
|
var toJSON = (x) => {
|
|
435
435
|
try {
|
|
@@ -481,7 +481,7 @@ var redact = (u) => {
|
|
|
481
481
|
return u;
|
|
482
482
|
};
|
|
483
483
|
|
|
484
|
-
// node_modules/.pnpm/effect@3.16.
|
|
484
|
+
// node_modules/.pnpm/effect@3.16.5/node_modules/effect/dist/esm/Pipeable.js
|
|
485
485
|
var pipeArguments = (self, args) => {
|
|
486
486
|
switch (args.length) {
|
|
487
487
|
case 0:
|
|
@@ -514,10 +514,10 @@ var pipeArguments = (self, args) => {
|
|
|
514
514
|
}
|
|
515
515
|
};
|
|
516
516
|
|
|
517
|
-
// node_modules/.pnpm/effect@3.16.
|
|
517
|
+
// node_modules/.pnpm/effect@3.16.5/node_modules/effect/dist/esm/internal/opCodes/effect.js
|
|
518
518
|
var OP_COMMIT = "Commit";
|
|
519
519
|
|
|
520
|
-
// node_modules/.pnpm/effect@3.16.
|
|
520
|
+
// node_modules/.pnpm/effect@3.16.5/node_modules/effect/dist/esm/internal/effectable.js
|
|
521
521
|
var EffectTypeId = /* @__PURE__ */ Symbol.for("effect/Effect");
|
|
522
522
|
var StreamTypeId = /* @__PURE__ */ Symbol.for("effect/Stream");
|
|
523
523
|
var SinkTypeId = /* @__PURE__ */ Symbol.for("effect/Sink");
|
|
@@ -604,7 +604,7 @@ var StructuralCommitPrototype = {
|
|
|
604
604
|
...StructuralPrototype
|
|
605
605
|
};
|
|
606
606
|
|
|
607
|
-
// node_modules/.pnpm/effect@3.16.
|
|
607
|
+
// node_modules/.pnpm/effect@3.16.5/node_modules/effect/dist/esm/internal/option.js
|
|
608
608
|
var TypeId = /* @__PURE__ */ Symbol.for("effect/Option");
|
|
609
609
|
var CommonProto = {
|
|
610
610
|
...EffectPrototype,
|
|
@@ -662,7 +662,7 @@ var some = (value) => {
|
|
|
662
662
|
return a;
|
|
663
663
|
};
|
|
664
664
|
|
|
665
|
-
// node_modules/.pnpm/effect@3.16.
|
|
665
|
+
// node_modules/.pnpm/effect@3.16.5/node_modules/effect/dist/esm/internal/either.js
|
|
666
666
|
var TypeId2 = /* @__PURE__ */ Symbol.for("effect/Either");
|
|
667
667
|
var CommonProto2 = {
|
|
668
668
|
...EffectPrototype,
|
|
@@ -724,7 +724,7 @@ var right = (right3) => {
|
|
|
724
724
|
return a;
|
|
725
725
|
};
|
|
726
726
|
|
|
727
|
-
// node_modules/.pnpm/effect@3.16.
|
|
727
|
+
// node_modules/.pnpm/effect@3.16.5/node_modules/effect/dist/esm/Either.js
|
|
728
728
|
var right2 = right;
|
|
729
729
|
var left2 = left;
|
|
730
730
|
var isLeft2 = isLeft;
|
|
@@ -732,10 +732,10 @@ var isRight2 = isRight;
|
|
|
732
732
|
var map = /* @__PURE__ */ dual(2, (self, f) => isRight2(self) ? right2(f(self.right)) : left2(self.left));
|
|
733
733
|
var getOrElse = /* @__PURE__ */ dual(2, (self, onLeft) => isLeft2(self) ? onLeft(self.left) : self.right);
|
|
734
734
|
|
|
735
|
-
// node_modules/.pnpm/effect@3.16.
|
|
735
|
+
// node_modules/.pnpm/effect@3.16.5/node_modules/effect/dist/esm/Order.js
|
|
736
736
|
var make = (compare) => (self, that) => self === that ? 0 : compare(self, that);
|
|
737
737
|
|
|
738
|
-
// node_modules/.pnpm/effect@3.16.
|
|
738
|
+
// node_modules/.pnpm/effect@3.16.5/node_modules/effect/dist/esm/Option.js
|
|
739
739
|
var none2 = () => none;
|
|
740
740
|
var some2 = some;
|
|
741
741
|
var isNone2 = isNone;
|
|
@@ -747,7 +747,7 @@ var match = /* @__PURE__ */ dual(2, (self, {
|
|
|
747
747
|
var orElse = /* @__PURE__ */ dual(2, (self, that) => isNone2(self) ? that() : self);
|
|
748
748
|
var fromNullable = (nullableValue) => nullableValue == null ? none2() : some2(nullableValue);
|
|
749
749
|
|
|
750
|
-
// node_modules/.pnpm/effect@3.16.
|
|
750
|
+
// node_modules/.pnpm/effect@3.16.5/node_modules/effect/dist/esm/Array.js
|
|
751
751
|
var fromIterable = (collection) => Array.isArray(collection) ? collection : Array.from(collection);
|
|
752
752
|
var append = /* @__PURE__ */ dual(2, (self, last) => [...self, last]);
|
|
753
753
|
var appendAll = /* @__PURE__ */ dual(2, (self, that) => fromIterable(self).concat(fromIterable(that)));
|
|
@@ -937,6 +937,27 @@ function parse(config) {
|
|
|
937
937
|
var TypeScriptApi = Tag("TypeScriptApi");
|
|
938
938
|
var TypeScriptProgram = Tag("TypeScriptProgram");
|
|
939
939
|
var ChangeTracker = Tag("ChangeTracker");
|
|
940
|
+
function parsePackageContentNameAndVersionFromScope(v) {
|
|
941
|
+
if (!isObject(v)) return;
|
|
942
|
+
if (!hasProperty(v, "packageJsonScope")) return;
|
|
943
|
+
if (!v.packageJsonScope) return;
|
|
944
|
+
const packageJsonScope = v.packageJsonScope;
|
|
945
|
+
if (!hasProperty(packageJsonScope, "contents")) return;
|
|
946
|
+
if (!hasProperty(packageJsonScope.contents, "packageJsonContent")) return;
|
|
947
|
+
const packageJsonContent = packageJsonScope.contents.packageJsonContent;
|
|
948
|
+
if (!hasProperty(packageJsonContent, "name")) return;
|
|
949
|
+
if (!hasProperty(packageJsonContent, "version")) return;
|
|
950
|
+
const { name, version } = packageJsonContent;
|
|
951
|
+
if (!isString(name)) return;
|
|
952
|
+
if (!isString(version)) return;
|
|
953
|
+
const hasEffectInPeerDependencies = hasProperty(packageJsonContent, "peerDependencies") && isObject(packageJsonContent.peerDependencies) && hasProperty(packageJsonContent.peerDependencies, "effect");
|
|
954
|
+
return {
|
|
955
|
+
name: name.toLowerCase(),
|
|
956
|
+
version: version.toLowerCase(),
|
|
957
|
+
hasEffectInPeerDependencies,
|
|
958
|
+
contents: packageJsonContent
|
|
959
|
+
};
|
|
960
|
+
}
|
|
940
961
|
|
|
941
962
|
// src/core/LSP.ts
|
|
942
963
|
var RefactorNotApplicableError = class {
|
|
@@ -1434,27 +1455,6 @@ var appendToUniqueTypesMap = fn(
|
|
|
1434
1455
|
// src/diagnostics/duplicatePackage.ts
|
|
1435
1456
|
var checkedPackagesCache = /* @__PURE__ */ new Map();
|
|
1436
1457
|
var programResolvedCacheSize = /* @__PURE__ */ new Map();
|
|
1437
|
-
function parsePackageContentNameAndVersion(v) {
|
|
1438
|
-
if (!isObject(v)) return;
|
|
1439
|
-
if (!hasProperty(v, "packageJsonScope")) return;
|
|
1440
|
-
if (!v.packageJsonScope) return;
|
|
1441
|
-
const packageJsonScope = v.packageJsonScope;
|
|
1442
|
-
if (!hasProperty(packageJsonScope, "contents")) return;
|
|
1443
|
-
if (!hasProperty(packageJsonScope.contents, "packageJsonContent")) return;
|
|
1444
|
-
const packageJsonContent = packageJsonScope.contents.packageJsonContent;
|
|
1445
|
-
if (!hasProperty(packageJsonContent, "name")) return;
|
|
1446
|
-
if (!hasProperty(packageJsonContent, "version")) return;
|
|
1447
|
-
const { name, version } = packageJsonContent;
|
|
1448
|
-
if (!isString(name)) return;
|
|
1449
|
-
if (!isString(version)) return;
|
|
1450
|
-
const hasEffectInPeerDependencies = hasProperty(packageJsonContent, "peerDependencies") && isObject(packageJsonContent.peerDependencies) && hasProperty(packageJsonContent.peerDependencies, "effect");
|
|
1451
|
-
return {
|
|
1452
|
-
name: name.toLowerCase(),
|
|
1453
|
-
version: version.toLowerCase(),
|
|
1454
|
-
hasEffectInPeerDependencies,
|
|
1455
|
-
contents: packageJsonContent
|
|
1456
|
-
};
|
|
1457
|
-
}
|
|
1458
1458
|
var duplicatePackage = createDiagnostic({
|
|
1459
1459
|
name: "duplicatePackage",
|
|
1460
1460
|
code: 6,
|
|
@@ -1471,7 +1471,7 @@ var duplicatePackage = createDiagnostic({
|
|
|
1471
1471
|
const seenPackages = /* @__PURE__ */ new Set();
|
|
1472
1472
|
resolvedPackages = {};
|
|
1473
1473
|
program.getSourceFiles().map((_) => {
|
|
1474
|
-
const packageInfo =
|
|
1474
|
+
const packageInfo = parsePackageContentNameAndVersionFromScope(_);
|
|
1475
1475
|
if (!packageInfo) return;
|
|
1476
1476
|
const packageNameAndVersion = packageInfo.name + "@" + packageInfo.version;
|
|
1477
1477
|
if (seenPackages.has(packageNameAndVersion)) return;
|
|
@@ -1842,6 +1842,19 @@ var createReturnYieldStarStatement = fn("AST.createReturnYieldStarStatement")(
|
|
|
1842
1842
|
);
|
|
1843
1843
|
}
|
|
1844
1844
|
);
|
|
1845
|
+
var parsePipeCall = fn("AST.parsePipeCall")(
|
|
1846
|
+
function* (node) {
|
|
1847
|
+
const ts = yield* service(TypeScriptApi);
|
|
1848
|
+
if (ts.isCallExpression(node) && ts.isPropertyAccessExpression(node.expression) && ts.isIdentifier(node.expression.name) && node.expression.name.text === "pipe") {
|
|
1849
|
+
return { node, subject: node.expression.expression, args: node.arguments };
|
|
1850
|
+
}
|
|
1851
|
+
if (ts.isCallExpression(node) && ts.isIdentifier(node.expression) && node.expression.text === "pipe" && node.arguments.length > 0) {
|
|
1852
|
+
const [subject, ...args] = node.arguments;
|
|
1853
|
+
return { node, subject, args };
|
|
1854
|
+
}
|
|
1855
|
+
return yield* fail(new NodeNotFoundError());
|
|
1856
|
+
}
|
|
1857
|
+
);
|
|
1845
1858
|
|
|
1846
1859
|
// src/utils/TypeParser.ts
|
|
1847
1860
|
var TypeParserIssue = class {
|
|
@@ -2390,6 +2403,75 @@ var missingEffectError = createDiagnostic({
|
|
|
2390
2403
|
})
|
|
2391
2404
|
});
|
|
2392
2405
|
|
|
2406
|
+
// src/diagnostics/missingReturnYieldStar.ts
|
|
2407
|
+
var missingReturnYieldStar = createDiagnostic({
|
|
2408
|
+
name: "missingReturnYieldStar",
|
|
2409
|
+
code: 7,
|
|
2410
|
+
apply: fn("missingReturnYieldStar.apply")(function* (sourceFile) {
|
|
2411
|
+
const ts = yield* service(TypeScriptApi);
|
|
2412
|
+
const typeChecker = yield* service(TypeCheckerApi);
|
|
2413
|
+
const effectDiagnostics = [];
|
|
2414
|
+
const brokenYields = /* @__PURE__ */ new Set();
|
|
2415
|
+
const nodeToVisit = [];
|
|
2416
|
+
const appendNodeToVisit = (node) => {
|
|
2417
|
+
nodeToVisit.push(node);
|
|
2418
|
+
return void 0;
|
|
2419
|
+
};
|
|
2420
|
+
ts.forEachChild(sourceFile, appendNodeToVisit);
|
|
2421
|
+
while (nodeToVisit.length > 0) {
|
|
2422
|
+
const node = nodeToVisit.shift();
|
|
2423
|
+
ts.forEachChild(node, appendNodeToVisit);
|
|
2424
|
+
if (ts.isYieldExpression(node) && node.expression && node.asteriskToken) {
|
|
2425
|
+
const type = typeChecker.getTypeAtLocation(node.expression);
|
|
2426
|
+
const maybeEffect = yield* option(effectType(type, node.expression));
|
|
2427
|
+
if (isSome2(maybeEffect) && maybeEffect.value.A.flags & ts.TypeFlags.Never) {
|
|
2428
|
+
const generatorFunctionOrReturnStatement = ts.findAncestor(
|
|
2429
|
+
node,
|
|
2430
|
+
(_) => ts.isFunctionExpression(_) || ts.isFunctionDeclaration(_) || ts.isMethodDeclaration(_) || ts.isReturnStatement(_)
|
|
2431
|
+
);
|
|
2432
|
+
if (generatorFunctionOrReturnStatement && !ts.isReturnStatement(generatorFunctionOrReturnStatement)) {
|
|
2433
|
+
if (generatorFunctionOrReturnStatement && generatorFunctionOrReturnStatement.parent) {
|
|
2434
|
+
const effectGenNode = generatorFunctionOrReturnStatement.parent;
|
|
2435
|
+
const effectGenLike = yield* pipe(
|
|
2436
|
+
effectGen(effectGenNode),
|
|
2437
|
+
orElse2(() => effectFnUntracedGen(effectGenNode)),
|
|
2438
|
+
orElse2(() => effectFnGen(effectGenNode)),
|
|
2439
|
+
option
|
|
2440
|
+
);
|
|
2441
|
+
if (isSome2(effectGenLike)) {
|
|
2442
|
+
brokenYields.add(node);
|
|
2443
|
+
}
|
|
2444
|
+
}
|
|
2445
|
+
}
|
|
2446
|
+
}
|
|
2447
|
+
}
|
|
2448
|
+
}
|
|
2449
|
+
brokenYields.forEach((node) => {
|
|
2450
|
+
const fix = node.expression ? [{
|
|
2451
|
+
fixName: "missingReturnYieldStar_fix",
|
|
2452
|
+
description: "Add return statement",
|
|
2453
|
+
apply: gen(function* () {
|
|
2454
|
+
const changeTracker = yield* service(ChangeTracker);
|
|
2455
|
+
changeTracker.replaceNode(
|
|
2456
|
+
sourceFile,
|
|
2457
|
+
node,
|
|
2458
|
+
ts.factory.createReturnStatement(
|
|
2459
|
+
node
|
|
2460
|
+
)
|
|
2461
|
+
);
|
|
2462
|
+
})
|
|
2463
|
+
}] : [];
|
|
2464
|
+
effectDiagnostics.push({
|
|
2465
|
+
node,
|
|
2466
|
+
category: ts.DiagnosticCategory.Error,
|
|
2467
|
+
messageText: `Yielded Effect never completes, so it is best to use a 'return yield*' instead.`,
|
|
2468
|
+
fixes: fix
|
|
2469
|
+
});
|
|
2470
|
+
});
|
|
2471
|
+
return effectDiagnostics;
|
|
2472
|
+
})
|
|
2473
|
+
});
|
|
2474
|
+
|
|
2393
2475
|
// src/diagnostics/missingStarInYieldEffectGen.ts
|
|
2394
2476
|
var missingStarInYieldEffectGen = createDiagnostic({
|
|
2395
2477
|
name: "missingStarInYieldEffectGen",
|
|
@@ -2515,7 +2597,8 @@ var diagnostics = [
|
|
|
2515
2597
|
missingEffectError,
|
|
2516
2598
|
floatingEffect,
|
|
2517
2599
|
missingStarInYieldEffectGen,
|
|
2518
|
-
unnecessaryEffectGen2
|
|
2600
|
+
unnecessaryEffectGen2,
|
|
2601
|
+
missingReturnYieldStar
|
|
2519
2602
|
];
|
|
2520
2603
|
|
|
2521
2604
|
// src/transform.ts
|