@effect/language-service 0.33.1 → 0.34.0
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 +4 -2
- package/cli.js +63 -0
- package/cli.js.map +1 -1
- package/index.js +89 -36
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/transform.js +99 -25
- package/transform.js.map +1 -1
package/package.json
CHANGED
package/transform.js
CHANGED
|
@@ -4308,6 +4308,68 @@ var outdatedEffectCodegen = createDiagnostic({
|
|
|
4308
4308
|
})
|
|
4309
4309
|
});
|
|
4310
4310
|
|
|
4311
|
+
// src/diagnostics/overriddenSchemaConstructor.ts
|
|
4312
|
+
var overriddenSchemaConstructor = createDiagnostic({
|
|
4313
|
+
name: "overriddenSchemaConstructor",
|
|
4314
|
+
code: 30,
|
|
4315
|
+
severity: "error",
|
|
4316
|
+
apply: fn("overriddenSchemaConstructor.apply")(function* (sourceFile, report) {
|
|
4317
|
+
const ts = yield* service(TypeScriptApi);
|
|
4318
|
+
const typeParser = yield* service(TypeParser);
|
|
4319
|
+
const typeChecker = yield* service(TypeCheckerApi);
|
|
4320
|
+
const nodeToVisit = [];
|
|
4321
|
+
const appendNodeToVisit = (node) => {
|
|
4322
|
+
nodeToVisit.push(node);
|
|
4323
|
+
return void 0;
|
|
4324
|
+
};
|
|
4325
|
+
ts.forEachChild(sourceFile, appendNodeToVisit);
|
|
4326
|
+
while (nodeToVisit.length > 0) {
|
|
4327
|
+
const node = nodeToVisit.shift();
|
|
4328
|
+
if (ts.isClassDeclaration(node) && node.heritageClauses) {
|
|
4329
|
+
let extendsSchema = false;
|
|
4330
|
+
for (const heritageClause of node.heritageClauses) {
|
|
4331
|
+
if (heritageClause.token === ts.SyntaxKind.ExtendsKeyword) {
|
|
4332
|
+
for (const type of heritageClause.types) {
|
|
4333
|
+
const typeAtLocation = typeChecker.getTypeAtLocation(type.expression);
|
|
4334
|
+
const isSchema = yield* pipe(
|
|
4335
|
+
typeParser.effectSchemaType(typeAtLocation, type.expression),
|
|
4336
|
+
map3(() => true),
|
|
4337
|
+
orElse2(() => succeed(false))
|
|
4338
|
+
);
|
|
4339
|
+
if (isSchema) {
|
|
4340
|
+
extendsSchema = true;
|
|
4341
|
+
break;
|
|
4342
|
+
}
|
|
4343
|
+
}
|
|
4344
|
+
}
|
|
4345
|
+
if (extendsSchema) break;
|
|
4346
|
+
}
|
|
4347
|
+
if (extendsSchema) {
|
|
4348
|
+
const members = node.members;
|
|
4349
|
+
for (const member of members) {
|
|
4350
|
+
if (ts.isConstructorDeclaration(member)) {
|
|
4351
|
+
report({
|
|
4352
|
+
location: member,
|
|
4353
|
+
messageText: "Classes extending Schema must not override the constructor",
|
|
4354
|
+
fixes: [{
|
|
4355
|
+
fixName: "overriddenSchemaConstructor_fix",
|
|
4356
|
+
description: "Remove the constructor override",
|
|
4357
|
+
apply: gen(function* () {
|
|
4358
|
+
const changeTracker = yield* service(ChangeTracker);
|
|
4359
|
+
changeTracker.delete(sourceFile, member);
|
|
4360
|
+
})
|
|
4361
|
+
}]
|
|
4362
|
+
});
|
|
4363
|
+
break;
|
|
4364
|
+
}
|
|
4365
|
+
}
|
|
4366
|
+
}
|
|
4367
|
+
}
|
|
4368
|
+
ts.forEachChild(node, appendNodeToVisit);
|
|
4369
|
+
}
|
|
4370
|
+
})
|
|
4371
|
+
});
|
|
4372
|
+
|
|
4311
4373
|
// src/diagnostics/returnEffectInGen.ts
|
|
4312
4374
|
var returnEffectInGen = createDiagnostic({
|
|
4313
4375
|
name: "returnEffectInGen",
|
|
@@ -4826,36 +4888,48 @@ var diagnostics = [
|
|
|
4826
4888
|
strictBooleanExpressions,
|
|
4827
4889
|
multipleEffectProvide,
|
|
4828
4890
|
outdatedEffectCodegen,
|
|
4891
|
+
overriddenSchemaConstructor,
|
|
4829
4892
|
unsupportedServiceAccessors
|
|
4830
4893
|
];
|
|
4831
4894
|
|
|
4832
4895
|
// src/transform.ts
|
|
4896
|
+
var programsChecked = /* @__PURE__ */ new WeakMap();
|
|
4833
4897
|
function transform_default(program, pluginConfig, { addDiagnostic, ts: tsInstance }) {
|
|
4834
|
-
|
|
4835
|
-
|
|
4836
|
-
|
|
4837
|
-
|
|
4838
|
-
|
|
4839
|
-
|
|
4840
|
-
|
|
4841
|
-
|
|
4842
|
-
|
|
4843
|
-
|
|
4844
|
-
|
|
4845
|
-
|
|
4846
|
-
|
|
4847
|
-
|
|
4848
|
-
|
|
4849
|
-
|
|
4850
|
-
|
|
4851
|
-
|
|
4852
|
-
|
|
4853
|
-
|
|
4854
|
-
|
|
4855
|
-
|
|
4856
|
-
)
|
|
4857
|
-
|
|
4858
|
-
|
|
4898
|
+
function runDiagnostics(program2, sourceFile) {
|
|
4899
|
+
const checkedFiles = programsChecked.get(program2) ?? /* @__PURE__ */ new Set();
|
|
4900
|
+
programsChecked.set(program2, checkedFiles);
|
|
4901
|
+
if (checkedFiles.has(sourceFile.fileName)) return;
|
|
4902
|
+
checkedFiles.add(sourceFile.fileName);
|
|
4903
|
+
pipe(
|
|
4904
|
+
getSemanticDiagnosticsWithCodeFixes(diagnostics, sourceFile),
|
|
4905
|
+
nanoLayer2,
|
|
4906
|
+
nanoLayer,
|
|
4907
|
+
provideService(TypeCheckerApi, program2.getTypeChecker()),
|
|
4908
|
+
provideService(TypeScriptProgram, program2),
|
|
4909
|
+
provideService(TypeScriptApi, tsInstance),
|
|
4910
|
+
provideService(
|
|
4911
|
+
LanguageServicePluginOptions,
|
|
4912
|
+
parse(pluginConfig)
|
|
4913
|
+
),
|
|
4914
|
+
run,
|
|
4915
|
+
map((_) => _.diagnostics),
|
|
4916
|
+
map(
|
|
4917
|
+
filter(
|
|
4918
|
+
(_) => _.category === tsInstance.DiagnosticCategory.Error || _.category === tsInstance.DiagnosticCategory.Warning
|
|
4919
|
+
)
|
|
4920
|
+
),
|
|
4921
|
+
getOrElse(() => []),
|
|
4922
|
+
map2(addDiagnostic)
|
|
4923
|
+
);
|
|
4924
|
+
}
|
|
4925
|
+
const rootFileNames = program.getRootFileNames();
|
|
4926
|
+
const sourceFiles = program.getSourceFiles().filter((_) => rootFileNames.indexOf(_.fileName) > -1);
|
|
4927
|
+
for (const sourceFile of sourceFiles) {
|
|
4928
|
+
runDiagnostics(program, sourceFile);
|
|
4929
|
+
}
|
|
4930
|
+
return (_) => (sourceFile) => {
|
|
4931
|
+
runDiagnostics(program, sourceFile);
|
|
4932
|
+
return sourceFile;
|
|
4859
4933
|
};
|
|
4860
4934
|
}
|
|
4861
4935
|
//# sourceMappingURL=transform.js.map
|