@effect/language-service 0.23.2 → 0.23.4
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 +1 -1
- package/index.js +133 -63
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/transform.js +91 -10
- package/transform.js.map +1 -1
package/package.json
CHANGED
package/transform.js
CHANGED
|
@@ -734,6 +734,9 @@ var isRight2 = isRight;
|
|
|
734
734
|
var map = /* @__PURE__ */ dual(2, (self, f) => isRight2(self) ? right2(f(self.right)) : left2(self.left));
|
|
735
735
|
var getOrElse = /* @__PURE__ */ dual(2, (self, onLeft) => isLeft2(self) ? onLeft(self.left) : self.right);
|
|
736
736
|
|
|
737
|
+
// node_modules/.pnpm/effect@3.16.5/node_modules/effect/dist/esm/internal/array.js
|
|
738
|
+
var isNonEmptyArray = (self) => self.length > 0;
|
|
739
|
+
|
|
737
740
|
// node_modules/.pnpm/effect@3.16.5/node_modules/effect/dist/esm/Order.js
|
|
738
741
|
var make = (compare) => (self, that) => self === that ? 0 : compare(self, that);
|
|
739
742
|
|
|
@@ -754,6 +757,19 @@ var fromIterable = (collection) => Array.isArray(collection) ? collection : Arra
|
|
|
754
757
|
var append = /* @__PURE__ */ dual(2, (self, last) => [...self, last]);
|
|
755
758
|
var appendAll = /* @__PURE__ */ dual(2, (self, that) => fromIterable(self).concat(fromIterable(that)));
|
|
756
759
|
var isArray = Array.isArray;
|
|
760
|
+
var isEmptyArray = (self) => self.length === 0;
|
|
761
|
+
var isEmptyReadonlyArray = isEmptyArray;
|
|
762
|
+
var isNonEmptyReadonlyArray = isNonEmptyArray;
|
|
763
|
+
var isOutOfBounds = (i, as) => i < 0 || i >= as.length;
|
|
764
|
+
var unsafeGet = /* @__PURE__ */ dual(2, (self, index) => {
|
|
765
|
+
const i = Math.floor(index);
|
|
766
|
+
if (isOutOfBounds(i, self)) {
|
|
767
|
+
throw new Error(`Index ${i} out of bounds`);
|
|
768
|
+
}
|
|
769
|
+
return self[i];
|
|
770
|
+
});
|
|
771
|
+
var headNonEmpty = /* @__PURE__ */ unsafeGet(0);
|
|
772
|
+
var tailNonEmpty = (self) => self.slice(1);
|
|
757
773
|
var sort = /* @__PURE__ */ dual(2, (self, O) => {
|
|
758
774
|
const out = Array.from(self);
|
|
759
775
|
out.sort(O);
|
|
@@ -775,6 +791,20 @@ var intersectionWith = (isEquivalent) => {
|
|
|
775
791
|
var intersection = /* @__PURE__ */ intersectionWith(_equivalence);
|
|
776
792
|
var empty = () => [];
|
|
777
793
|
var map2 = /* @__PURE__ */ dual(2, (self, f) => self.map(f));
|
|
794
|
+
var flatMap = /* @__PURE__ */ dual(2, (self, f) => {
|
|
795
|
+
if (isEmptyReadonlyArray(self)) {
|
|
796
|
+
return [];
|
|
797
|
+
}
|
|
798
|
+
const out = [];
|
|
799
|
+
for (let i = 0; i < self.length; i++) {
|
|
800
|
+
const inner = f(self[i], i);
|
|
801
|
+
for (let j = 0; j < inner.length; j++) {
|
|
802
|
+
out.push(inner[j]);
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
return out;
|
|
806
|
+
});
|
|
807
|
+
var flatten = /* @__PURE__ */ flatMap(identity);
|
|
778
808
|
var filter = /* @__PURE__ */ dual(2, (self, predicate) => {
|
|
779
809
|
const as = fromIterable(self);
|
|
780
810
|
const out = [];
|
|
@@ -785,6 +815,21 @@ var filter = /* @__PURE__ */ dual(2, (self, predicate) => {
|
|
|
785
815
|
}
|
|
786
816
|
return out;
|
|
787
817
|
});
|
|
818
|
+
var dedupeWith = /* @__PURE__ */ dual(2, (self, isEquivalent) => {
|
|
819
|
+
const input = fromIterable(self);
|
|
820
|
+
if (isNonEmptyReadonlyArray(input)) {
|
|
821
|
+
const out = [headNonEmpty(input)];
|
|
822
|
+
const rest = tailNonEmpty(input);
|
|
823
|
+
for (const r of rest) {
|
|
824
|
+
if (out.every((a) => !isEquivalent(r, a))) {
|
|
825
|
+
out.push(r);
|
|
826
|
+
}
|
|
827
|
+
}
|
|
828
|
+
return out;
|
|
829
|
+
}
|
|
830
|
+
return [];
|
|
831
|
+
});
|
|
832
|
+
var dedupe = (self) => dedupeWith(self, equivalence());
|
|
788
833
|
|
|
789
834
|
// src/core/Nano.ts
|
|
790
835
|
function makeInternalSuccess(value) {
|
|
@@ -861,7 +906,7 @@ var sync = (value) => {
|
|
|
861
906
|
};
|
|
862
907
|
return nano;
|
|
863
908
|
};
|
|
864
|
-
var
|
|
909
|
+
var flatMap2 = dual(2, (fa, f) => make2((ctx) => {
|
|
865
910
|
const result = fa.run(ctx);
|
|
866
911
|
if (result._tag !== "Right") return result;
|
|
867
912
|
return f(result.value).run(ctx);
|
|
@@ -1010,14 +1055,43 @@ function parsePackageContentNameAndVersionFromScope(v) {
|
|
|
1010
1055
|
if (!isString(name)) return;
|
|
1011
1056
|
if (!isString(version)) return;
|
|
1012
1057
|
const hasEffectInPeerDependencies = hasProperty(packageJsonContent, "peerDependencies") && isObject(packageJsonContent.peerDependencies) && hasProperty(packageJsonContent.peerDependencies, "effect");
|
|
1058
|
+
const referencedPackages = Object.keys({
|
|
1059
|
+
...hasProperty(packageJsonContent, "dependencies") && isObject(packageJsonContent.dependencies) ? packageJsonContent.dependencies : {},
|
|
1060
|
+
...hasProperty(packageJsonContent, "peerDependencies") && isObject(packageJsonContent.peerDependencies) ? packageJsonContent.peerDependencies : {},
|
|
1061
|
+
...hasProperty(packageJsonContent, "devDependencies") && isObject(packageJsonContent.devDependencies) ? packageJsonContent.devDependencies : {}
|
|
1062
|
+
});
|
|
1013
1063
|
return {
|
|
1014
1064
|
name: name.toLowerCase(),
|
|
1015
1065
|
version: version.toLowerCase(),
|
|
1016
1066
|
hasEffectInPeerDependencies,
|
|
1017
1067
|
contents: packageJsonContent,
|
|
1018
|
-
packageDirectory: packageJsonScope.packageDirectory
|
|
1068
|
+
packageDirectory: packageJsonScope.packageDirectory,
|
|
1069
|
+
referencedPackages
|
|
1019
1070
|
};
|
|
1020
1071
|
}
|
|
1072
|
+
var resolveModulePattern = fn("resolveModulePattern")(
|
|
1073
|
+
function* (sourceFile, pattern) {
|
|
1074
|
+
if (pattern.indexOf("*") === -1) return [pattern.toLowerCase()];
|
|
1075
|
+
const ts = yield* service(TypeScriptApi);
|
|
1076
|
+
const packageJsonScope = parsePackageContentNameAndVersionFromScope(sourceFile);
|
|
1077
|
+
const referencedPackages = [];
|
|
1078
|
+
for (const statement of sourceFile.statements) {
|
|
1079
|
+
if (ts.isImportDeclaration(statement) && ts.isStringLiteral(statement.moduleSpecifier)) {
|
|
1080
|
+
const moduleSpecifier = statement.moduleSpecifier.text.toLowerCase();
|
|
1081
|
+
const packageName = moduleSpecifier.startsWith("@") ? moduleSpecifier.split("/", 2).join("/") : moduleSpecifier.split("/", 1).join("/");
|
|
1082
|
+
referencedPackages.push(packageName);
|
|
1083
|
+
}
|
|
1084
|
+
}
|
|
1085
|
+
return pipe(
|
|
1086
|
+
referencedPackages.concat(packageJsonScope?.referencedPackages || []),
|
|
1087
|
+
dedupe,
|
|
1088
|
+
map2((packageName) => packageName.toLowerCase()),
|
|
1089
|
+
filter(
|
|
1090
|
+
(packageName) => pattern.endsWith("*") && packageName.startsWith(pattern.toLowerCase().substring(0, pattern.length - 1))
|
|
1091
|
+
)
|
|
1092
|
+
);
|
|
1093
|
+
}
|
|
1094
|
+
);
|
|
1021
1095
|
function makeGetModuleSpecifier(ts) {
|
|
1022
1096
|
if (!(hasProperty(ts, "moduleSpecifiers") && hasProperty(ts.moduleSpecifiers, "getModuleSpecifier") && isFunction2(ts.moduleSpecifiers.getModuleSpecifier))) return;
|
|
1023
1097
|
const _internal = ts.moduleSpecifiers.getModuleSpecifier;
|
|
@@ -1187,7 +1261,7 @@ var createDiagnosticExecutor = fn("LSP.createCommentDirectivesProcessor")(
|
|
|
1187
1261
|
const fixByDisableNextLine = (_) => ({
|
|
1188
1262
|
fixName: rule.name + "_skipNextLine",
|
|
1189
1263
|
description: "Disable " + rule.name + " for this line",
|
|
1190
|
-
apply:
|
|
1264
|
+
apply: flatMap2(
|
|
1191
1265
|
service(ChangeTracker),
|
|
1192
1266
|
(changeTracker) => sync(() => {
|
|
1193
1267
|
const disableAtNode = findParentStatementForDisableNextLine(_.node);
|
|
@@ -1204,7 +1278,7 @@ var createDiagnosticExecutor = fn("LSP.createCommentDirectivesProcessor")(
|
|
|
1204
1278
|
const fixByDisableEntireFile = {
|
|
1205
1279
|
fixName: rule.name + "_skipFile",
|
|
1206
1280
|
description: "Disable " + rule.name + " for this entire file",
|
|
1207
|
-
apply:
|
|
1281
|
+
apply: flatMap2(
|
|
1208
1282
|
service(ChangeTracker),
|
|
1209
1283
|
(changeTracker) => sync(
|
|
1210
1284
|
() => changeTracker.insertText(
|
|
@@ -2500,7 +2574,14 @@ var importFromBarrel = createDiagnostic({
|
|
|
2500
2574
|
const ts = yield* service(TypeScriptApi);
|
|
2501
2575
|
const typeChecker = yield* service(TypeCheckerApi);
|
|
2502
2576
|
const program = yield* service(TypeScriptProgram);
|
|
2503
|
-
const
|
|
2577
|
+
const packageNamesToCheck = flatten(
|
|
2578
|
+
yield* all(
|
|
2579
|
+
...languageServicePluginOptions.namespaceImportPackages.map(
|
|
2580
|
+
(packageName) => resolveModulePattern(sourceFile, packageName)
|
|
2581
|
+
)
|
|
2582
|
+
)
|
|
2583
|
+
);
|
|
2584
|
+
const isImportedFromBarrelExport = (element) => {
|
|
2504
2585
|
const getModuleSpecifier = makeGetModuleSpecifier(ts);
|
|
2505
2586
|
const resolveExternalModuleName = makeResolveExternalModuleName(typeChecker);
|
|
2506
2587
|
if (!(getModuleSpecifier && resolveExternalModuleName)) return;
|
|
@@ -2513,7 +2594,7 @@ var importFromBarrel = createDiagnostic({
|
|
|
2513
2594
|
if (!namedBindings) return;
|
|
2514
2595
|
if (!ts.isNamedImports(namedBindings)) return;
|
|
2515
2596
|
const barrelModuleName = importDeclaration.moduleSpecifier.text;
|
|
2516
|
-
if (
|
|
2597
|
+
if (packageNamesToCheck.indexOf(barrelModuleName.toLowerCase()) === -1) return;
|
|
2517
2598
|
const moduleSymbol = resolveExternalModuleName(importDeclaration.moduleSpecifier);
|
|
2518
2599
|
if (!moduleSymbol) return;
|
|
2519
2600
|
if (!moduleSymbol.exports) return;
|
|
@@ -2556,7 +2637,7 @@ var importFromBarrel = createDiagnostic({
|
|
|
2556
2637
|
ts.forEachChild(node, appendNodeToVisit);
|
|
2557
2638
|
continue;
|
|
2558
2639
|
}
|
|
2559
|
-
const result = isImportedFromBarrelExport(node
|
|
2640
|
+
const result = isImportedFromBarrelExport(node);
|
|
2560
2641
|
if (!result) continue;
|
|
2561
2642
|
const { barrelModuleName, importClause, importDeclaration, importedName, namedBindings, unbarrelledFileName } = result;
|
|
2562
2643
|
report({
|
|
@@ -2694,7 +2775,7 @@ More info at https://effect.website/docs/requirements-management/layers/#avoidin
|
|
|
2694
2775
|
for (const [type, reportAt] of typesToCheck) {
|
|
2695
2776
|
yield* pipe(
|
|
2696
2777
|
typeParser.contextTag(type, node),
|
|
2697
|
-
|
|
2778
|
+
flatMap2(
|
|
2698
2779
|
({ Service }) => pipe(
|
|
2699
2780
|
parseLeakedRequirements(Service, node),
|
|
2700
2781
|
map3((requirements) => reportLeakingRequirements(reportAt, sort(requirements, typeOrder)))
|
|
@@ -2722,7 +2803,7 @@ var missingEffectContext = createDiagnostic({
|
|
|
2722
2803
|
typeParser.effectType(expectedType, node),
|
|
2723
2804
|
typeParser.effectType(realType, valueNode)
|
|
2724
2805
|
),
|
|
2725
|
-
|
|
2806
|
+
flatMap2(
|
|
2726
2807
|
([expectedEffect, realEffect]) => getMissingTypeEntriesInTargetType(
|
|
2727
2808
|
realEffect.R,
|
|
2728
2809
|
expectedEffect.R
|
|
@@ -2770,7 +2851,7 @@ var missingEffectError = createDiagnostic({
|
|
|
2770
2851
|
typeParser.effectType(expectedType, node),
|
|
2771
2852
|
typeParser.effectType(realType, valueNode)
|
|
2772
2853
|
),
|
|
2773
|
-
|
|
2854
|
+
flatMap2(
|
|
2774
2855
|
([expectedEffect, realEffect]) => getMissingTypeEntriesInTargetType(
|
|
2775
2856
|
realEffect.E,
|
|
2776
2857
|
expectedEffect.E
|