@effect/tsgo 0.44.0 → 0.46.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 CHANGED
@@ -38,13 +38,13 @@ When running in dedicated diagnostics mode, the Effect diagnostics can be emitte
38
38
  <!-- supported-components:start -->
39
39
  ## Supported Package Versions
40
40
 
41
- The following target package versions are supported by `@effect/tsgo@0.44.0`:
41
+ The following target package versions are supported by `@effect/tsgo@0.46.0`:
42
42
 
43
43
  | Component | Supported versions |
44
44
  |---|---|
45
- | TypeScript | `7.0.2`, `7.1.0-dev.20260908.1` |
46
- | Oxlint | `1.81.0`, `1.82.0` |
47
- | oxlint-tsgolint | `7.0.2001` |
45
+ | TypeScript | `7.0.2`, `7.1.0-dev.20260924.1` |
46
+ | Oxlint | `1.82.0`, `1.83.0`, `1.84.0`, `1.85.0` |
47
+ | oxlint-tsgolint | `7.0.2001`, `7.0.2002`, `7.0.2003` |
48
48
  <!-- supported-components:end -->
49
49
 
50
50
  ## Diagnostic Status
@@ -122,6 +122,7 @@ Some diagnostics are off by default or have a default severity of suggestion, bu
122
122
  <tr><td><a href="https://github.com/Effect-TS/tsgo/blob/main/docs/rules/prefer-schema-over-json.md"><code>preferSchemaOverJson</code></a></td><td>Suggests using Effect Schema for JSON operations instead of JSON.parse/JSON.stringify</td></tr>
123
123
  <tr><td><a href="https://github.com/Effect-TS/tsgo/blob/main/docs/rules/process-env.md"><code>processEnv</code></a></td><td>Warns when reading process.env outside Effect generators instead of using Effect Config</td></tr>
124
124
  <tr><td><a href="https://github.com/Effect-TS/tsgo/blob/main/docs/rules/process-env-in-effect.md"><code>processEnvInEffect</code></a></td><td>Warns when reading process.env inside Effect generators instead of using Effect Config</td></tr>
125
+ <tr><td><a href="https://github.com/Effect-TS/tsgo/blob/main/docs/rules/schema-sync.md"><code>schemaSync</code></a></td><td>Suggests Effect-based Schema decoding and encoding instead of synchronous methods</td></tr>
125
126
  <tr><td colspan="2"><strong>Style</strong> <em>Cleanup, consistency, and idiomatic Effect code.</em></td></tr>
126
127
  <tr><td><a href="https://github.com/Effect-TS/tsgo/blob/main/docs/rules/acquire-release-disposable.md"><code>acquireReleaseDisposable</code></a></td><td>Suggests Effect.acquireDisposable when Effect.acquireRelease only invokes the acquired resource&#39;s disposal protocol</td></tr>
127
128
  <tr><td><a href="https://github.com/Effect-TS/tsgo/blob/main/docs/rules/all-of-map-to-for-each.md"><code>allOfMapToForEach</code></a></td><td>Suggests using Effect.forEach instead of Effect.all over an effectful Array#map</td></tr>
@@ -130,6 +131,8 @@ Some diagnostics are off by default or have a default severity of suggestion, bu
130
131
  <tr><td><a href="https://github.com/Effect-TS/tsgo/blob/main/docs/rules/catch-chain-to-first-success-of.md"><code>catchChainToFirstSuccessOf</code></a></td><td>Suggests Effect.firstSuccessOf for consecutive error-independent Effect.catch fallbacks when the error type is preserved</td></tr>
131
132
  <tr><td><a href="https://github.com/Effect-TS/tsgo/blob/main/docs/rules/catch-conditional-refail-to-catch-if.md"><code>catchConditionalRefailToCatchIf</code></a></td><td>Suggests Effect.catchIf, Effect.catchCauseIf, or Effect.catchTag for conditional catch handlers that re-fail their untouched input</td></tr>
132
133
  <tr><td><a href="https://github.com/Effect-TS/tsgo/blob/main/docs/rules/catch-die-to-or-die.md"><code>catchDieToOrDie</code></a></td><td>Suggests using Effect.orDie instead of Effect.catch or Effect.catchAll with an identity-forwarding Effect.die handler</td></tr>
134
+ <tr><td><a href="https://github.com/Effect-TS/tsgo/blob/main/docs/rules/catch-if-tag-to-catch-tag.md"><code>catchIfTagToCatchTag</code></a></td><td>Suggests Effect.catchTag instead of Effect.catchIf with a direct _tag equality predicate</td></tr>
135
+ <tr><td><a href="https://github.com/Effect-TS/tsgo/blob/main/docs/rules/catch-refail-to-tap-error.md"><code>catchRefailToTapError</code></a></td><td>Suggests Effect.tapError for catch handlers that sequence an effect and then re-fail the original error</td></tr>
133
136
  <tr><td><a href="https://github.com/Effect-TS/tsgo/blob/main/docs/rules/catch-tag-to-catch-reason.md"><code>catchTagToCatchReason</code></a></td><td>Suggests Effect.catchReason or Effect.catchReasons for handlers that re-fail unmatched reason._tag branches</td></tr>
134
137
  <tr><td><a href="https://github.com/Effect-TS/tsgo/blob/main/docs/rules/catch-to-ignore.md"><code>catchToIgnore</code></a></td><td>Suggests using Effect.ignore or Effect.ignoreCause instead of Effect.catch/catchCause returning Effect.void</td></tr>
135
138
  <tr><td><a href="https://github.com/Effect-TS/tsgo/blob/main/docs/rules/catch-to-or-else-succeed.md"><code>catchToOrElseSucceed</code></a></td><td>Suggests using Effect.orElseSucceed instead of Effect.catch + Effect.succeed</td></tr>
@@ -140,6 +143,7 @@ Some diagnostics are off by default or have a default severity of suggestion, bu
140
143
  <tr><td><a href="https://github.com/Effect-TS/tsgo/blob/main/docs/rules/effect-map-void.md"><code>effectMapVoid</code></a></td><td>Suggests using Effect.asVoid instead of Effect.map(() =&gt; void 0), Effect.map(() =&gt; undefined), or Effect.map(() =&gt; {})</td></tr>
141
144
  <tr><td><a href="https://github.com/Effect-TS/tsgo/blob/main/docs/rules/effect-succeed-with-void.md"><code>effectSucceedWithVoid</code></a></td><td>Suggests using Effect.void instead of Effect.succeed(undefined) or Effect.succeed(void 0)</td></tr>
142
145
  <tr><td><a href="https://github.com/Effect-TS/tsgo/blob/main/docs/rules/flat-map-conditional-to-filter-or-fail.md"><code>flatMapConditionalToFilterOrFail</code></a></td><td>Suggests Effect.filterOrFail or Effect.filterOrElse when Effect.flatMap conditionally passes its input through with Effect.succeed</td></tr>
146
+ <tr><td><a href="https://github.com/Effect-TS/tsgo/blob/main/docs/rules/flat-map-ignored-param-to-and-then.md"><code>flatMapIgnoredParamToAndThen</code></a></td><td>Suggests using Effect.andThen instead of Effect.flatMap when a zero-parameter callback returns an existing Effect value</td></tr>
143
147
  <tr><td><a href="https://github.com/Effect-TS/tsgo/blob/main/docs/rules/flat-map-to-map.md"><code>flatMapToMap</code></a></td><td>Suggests using Effect.map instead of Effect.flatMap when the callback only wraps its result with Effect.succeed</td></tr>
144
148
  <tr><td><a href="https://github.com/Effect-TS/tsgo/blob/main/docs/rules/map-some-to-as-some.md"><code>mapSomeToAsSome</code></a></td><td>Suggests using Effect.asSome instead of Effect.map when the mapper only wraps the success value with Option.some</td></tr>
145
149
  <tr><td><a href="https://github.com/Effect-TS/tsgo/blob/main/docs/rules/match-effect-to-map-both.md"><code>matchEffectToMapBoth</code></a></td><td>Suggests Effect.mapBoth when Effect.matchEffect only transforms the failure and success channels</td></tr>
@@ -48900,7 +48900,7 @@ const runWith = (command, config) => {
48900
48900
  //#endregion
48901
48901
  //#region package.json
48902
48902
  var name = "@effect/tsgo";
48903
- var version = "0.44.0";
48903
+ var version = "0.46.0";
48904
48904
 
48905
48905
  //#endregion
48906
48906
  //#region src/metadata.json
@@ -48926,33 +48926,320 @@ var groups = [
48926
48926
  "description": "Cleanup, consistency, and idiomatic Effect code."
48927
48927
  }
48928
48928
  ];
48929
- var presets$1 = [{
48930
- "name": "effect-native",
48931
- "description": "Enable all Effect-native diagnostics at warning level.",
48932
- "diagnosticSeverity": {
48933
- "abortControllerInEffect": "warning",
48934
- "asyncFunction": "warning",
48935
- "cryptoRandomUUID": "warning",
48936
- "cryptoRandomUUIDInEffect": "warning",
48937
- "extendsNativeError": "warning",
48938
- "globalConsole": "warning",
48939
- "globalConsoleInEffect": "warning",
48940
- "globalDate": "warning",
48941
- "globalDateInEffect": "warning",
48942
- "globalFetch": "warning",
48943
- "globalFetchInEffect": "warning",
48944
- "globalRandom": "warning",
48945
- "globalRandomInEffect": "warning",
48946
- "globalTimers": "warning",
48947
- "globalTimersInEffect": "warning",
48948
- "instanceOfSchema": "warning",
48949
- "newPromise": "warning",
48950
- "nodeBuiltinImport": "warning",
48951
- "preferSchemaOverJson": "warning",
48952
- "processEnv": "warning",
48953
- "processEnvInEffect": "warning"
48954
- }
48955
- }];
48929
+ var presets$1 = [
48930
+ {
48931
+ "name": "recommended",
48932
+ "description": "Enable diagnostics at their default severities.",
48933
+ "diagnosticSeverity": {
48934
+ "abortControllerInEffect": "suggestion",
48935
+ "acquireReleaseDisposable": "suggestion",
48936
+ "allOfMapToForEach": "suggestion",
48937
+ "catchAllTagDispatchToCatchTag": "suggestion",
48938
+ "catchAllToMapError": "suggestion",
48939
+ "catchChainToFirstSuccessOf": "suggestion",
48940
+ "catchConditionalRefailToCatchIf": "suggestion",
48941
+ "catchDieToOrDie": "suggestion",
48942
+ "catchIfTagToCatchTag": "suggestion",
48943
+ "catchRefailToTapError": "suggestion",
48944
+ "catchTagToCatchReason": "suggestion",
48945
+ "catchToIgnore": "suggestion",
48946
+ "catchToOrElseSucceed": "suggestion",
48947
+ "catchUnfailableEffect": "suggestion",
48948
+ "classSelfMismatch": "error",
48949
+ "duplicatePackage": "warning",
48950
+ "effectFnIife": "warning",
48951
+ "effectFnImplicitAny": "error",
48952
+ "effectFnOpportunity": "suggestion",
48953
+ "effectGenUsesAdapter": "warning",
48954
+ "effectInFailure": "warning",
48955
+ "effectInVoidSuccess": "warning",
48956
+ "effectMapFlatten": "suggestion",
48957
+ "effectMapVoid": "suggestion",
48958
+ "effectSucceedWithVoid": "suggestion",
48959
+ "flatMapConditionalToFilterOrFail": "suggestion",
48960
+ "flatMapIgnoredParamToAndThen": "suggestion",
48961
+ "flatMapToMap": "suggestion",
48962
+ "floatingEffect": "error",
48963
+ "floatingEffectInVitest": "error",
48964
+ "genericEffectServices": "warning",
48965
+ "globalErrorInEffectCatch": "warning",
48966
+ "globalErrorInEffectFailure": "warning",
48967
+ "layerMergeAllWithDependencies": "warning",
48968
+ "lazyEffect": "suggestion",
48969
+ "lazyPromiseInEffectSync": "warning",
48970
+ "leakingRequirements": "suggestion",
48971
+ "mapSomeToAsSome": "suggestion",
48972
+ "matchEffectToMapBoth": "suggestion",
48973
+ "matchEffectToMatch": "suggestion",
48974
+ "missingEffectContext": "error",
48975
+ "missingEffectError": "error",
48976
+ "missingLayerContext": "error",
48977
+ "missingReturnYieldStar": "error",
48978
+ "missingStarInYieldEffectGen": "error",
48979
+ "multipleCatchTag": "suggestion",
48980
+ "multipleEffectProvide": "warning",
48981
+ "nonObjectEffectServiceType": "error",
48982
+ "obsoleteMatchImport": "warning",
48983
+ "obsoleteSchemaImport": "warning",
48984
+ "optionMatchToFromOption": "suggestion",
48985
+ "outdatedApi": "warning",
48986
+ "overriddenSchemaConstructor": "error",
48987
+ "preferSucceedSomeOrNone": "suggestion",
48988
+ "preferTypedSchemaDecoder": "suggestion",
48989
+ "preferUnsafeConstructor": "suggestion",
48990
+ "promiseInEffectSuccess": "warning",
48991
+ "provideLayerSucceedToProvideService": "suggestion",
48992
+ "raceFirstWithSleepToTimeout": "suggestion",
48993
+ "redundantMapError": "suggestion",
48994
+ "redundantOrDie": "suggestion",
48995
+ "redundantSchemaTagIdentifier": "suggestion",
48996
+ "returnEffectInGen": "suggestion",
48997
+ "runEffectInsideEffect": "suggestion",
48998
+ "runOfExitToRunExit": "suggestion",
48999
+ "schemaLiteralNonFinite": "error",
49000
+ "schemaNumber": "suggestion",
49001
+ "schemaOpaqueInstanceMember": "error",
49002
+ "schemaStructWithTag": "suggestion",
49003
+ "schemaSyncInEffect": "suggestion",
49004
+ "scopeInLayerEffect": "warning",
49005
+ "syncToSucceed": "suggestion",
49006
+ "timeoutCatchTagToTimeoutOrElse": "suggestion",
49007
+ "tryCatchInEffectGen": "suggestion",
49008
+ "unknownInEffectCatch": "warning",
49009
+ "unnecessaryEffectGen": "suggestion",
49010
+ "unnecessaryFailYieldableError": "suggestion",
49011
+ "unnecessaryPipe": "suggestion",
49012
+ "unnecessaryPipeChain": "suggestion",
49013
+ "unnecessaryTypeofType": "suggestion"
49014
+ }
49015
+ },
49016
+ {
49017
+ "name": "strict",
49018
+ "description": "Treat every diagnostic enabled by default as an error.",
49019
+ "diagnosticSeverity": {
49020
+ "abortControllerInEffect": "error",
49021
+ "acquireReleaseDisposable": "error",
49022
+ "allOfMapToForEach": "error",
49023
+ "catchAllTagDispatchToCatchTag": "error",
49024
+ "catchAllToMapError": "error",
49025
+ "catchChainToFirstSuccessOf": "error",
49026
+ "catchConditionalRefailToCatchIf": "error",
49027
+ "catchDieToOrDie": "error",
49028
+ "catchIfTagToCatchTag": "error",
49029
+ "catchRefailToTapError": "error",
49030
+ "catchTagToCatchReason": "error",
49031
+ "catchToIgnore": "error",
49032
+ "catchToOrElseSucceed": "error",
49033
+ "catchUnfailableEffect": "error",
49034
+ "classSelfMismatch": "error",
49035
+ "duplicatePackage": "error",
49036
+ "effectFnIife": "error",
49037
+ "effectFnImplicitAny": "error",
49038
+ "effectFnOpportunity": "error",
49039
+ "effectGenUsesAdapter": "error",
49040
+ "effectInFailure": "error",
49041
+ "effectInVoidSuccess": "error",
49042
+ "effectMapFlatten": "error",
49043
+ "effectMapVoid": "error",
49044
+ "effectSucceedWithVoid": "error",
49045
+ "flatMapConditionalToFilterOrFail": "error",
49046
+ "flatMapIgnoredParamToAndThen": "error",
49047
+ "flatMapToMap": "error",
49048
+ "floatingEffect": "error",
49049
+ "floatingEffectInVitest": "error",
49050
+ "genericEffectServices": "error",
49051
+ "globalErrorInEffectCatch": "error",
49052
+ "globalErrorInEffectFailure": "error",
49053
+ "layerMergeAllWithDependencies": "error",
49054
+ "lazyEffect": "error",
49055
+ "lazyPromiseInEffectSync": "error",
49056
+ "leakingRequirements": "error",
49057
+ "mapSomeToAsSome": "error",
49058
+ "matchEffectToMapBoth": "error",
49059
+ "matchEffectToMatch": "error",
49060
+ "missingEffectContext": "error",
49061
+ "missingEffectError": "error",
49062
+ "missingLayerContext": "error",
49063
+ "missingReturnYieldStar": "error",
49064
+ "missingStarInYieldEffectGen": "error",
49065
+ "multipleCatchTag": "error",
49066
+ "multipleEffectProvide": "error",
49067
+ "nonObjectEffectServiceType": "error",
49068
+ "obsoleteMatchImport": "error",
49069
+ "obsoleteSchemaImport": "error",
49070
+ "optionMatchToFromOption": "error",
49071
+ "outdatedApi": "error",
49072
+ "overriddenSchemaConstructor": "error",
49073
+ "preferSucceedSomeOrNone": "error",
49074
+ "preferTypedSchemaDecoder": "error",
49075
+ "preferUnsafeConstructor": "error",
49076
+ "promiseInEffectSuccess": "error",
49077
+ "provideLayerSucceedToProvideService": "error",
49078
+ "raceFirstWithSleepToTimeout": "error",
49079
+ "redundantMapError": "error",
49080
+ "redundantOrDie": "error",
49081
+ "redundantSchemaTagIdentifier": "error",
49082
+ "returnEffectInGen": "error",
49083
+ "runEffectInsideEffect": "error",
49084
+ "runOfExitToRunExit": "error",
49085
+ "schemaLiteralNonFinite": "error",
49086
+ "schemaNumber": "error",
49087
+ "schemaOpaqueInstanceMember": "error",
49088
+ "schemaStructWithTag": "error",
49089
+ "schemaSyncInEffect": "error",
49090
+ "scopeInLayerEffect": "error",
49091
+ "syncToSucceed": "error",
49092
+ "timeoutCatchTagToTimeoutOrElse": "error",
49093
+ "tryCatchInEffectGen": "error",
49094
+ "unknownInEffectCatch": "error",
49095
+ "unnecessaryEffectGen": "error",
49096
+ "unnecessaryFailYieldableError": "error",
49097
+ "unnecessaryPipe": "error",
49098
+ "unnecessaryPipeChain": "error",
49099
+ "unnecessaryTypeofType": "error"
49100
+ }
49101
+ },
49102
+ {
49103
+ "name": "correctness",
49104
+ "description": "Enable all correctness diagnostics at warning level.",
49105
+ "diagnosticSeverity": {
49106
+ "anyUnknownInErrorContext": "warning",
49107
+ "classSelfMismatch": "warning",
49108
+ "duplicatePackage": "warning",
49109
+ "effectFnImplicitAny": "warning",
49110
+ "floatingEffect": "warning",
49111
+ "floatingEffectInVitest": "warning",
49112
+ "genericEffectServices": "warning",
49113
+ "missingEffectContext": "warning",
49114
+ "missingEffectError": "warning",
49115
+ "missingLayerContext": "warning",
49116
+ "missingReturnYieldStar": "warning",
49117
+ "missingStarInYieldEffectGen": "warning",
49118
+ "nonObjectEffectServiceType": "warning",
49119
+ "obsoleteMatchImport": "warning",
49120
+ "obsoleteSchemaImport": "warning",
49121
+ "outdatedApi": "warning",
49122
+ "overriddenSchemaConstructor": "warning",
49123
+ "promiseInEffectSuccess": "warning",
49124
+ "schemaLiteralNonFinite": "warning",
49125
+ "schemaOpaqueInstanceMember": "warning",
49126
+ "unsafeEffectTypeAssertion": "warning"
49127
+ }
49128
+ },
49129
+ {
49130
+ "name": "antipattern",
49131
+ "description": "Enable all anti-pattern diagnostics at warning level.",
49132
+ "diagnosticSeverity": {
49133
+ "catchUnfailableEffect": "warning",
49134
+ "effectFnIife": "warning",
49135
+ "effectGenUsesAdapter": "warning",
49136
+ "effectInFailure": "warning",
49137
+ "effectInVoidSuccess": "warning",
49138
+ "globalErrorInEffectCatch": "warning",
49139
+ "globalErrorInEffectFailure": "warning",
49140
+ "layerMergeAllWithDependencies": "warning",
49141
+ "lazyEffect": "warning",
49142
+ "lazyPromiseInEffectSync": "warning",
49143
+ "leakingRequirements": "warning",
49144
+ "multipleEffectProvide": "warning",
49145
+ "preferUnsafeConstructor": "warning",
49146
+ "returnEffectInGen": "warning",
49147
+ "runEffectInsideEffect": "warning",
49148
+ "schemaSyncInEffect": "warning",
49149
+ "scopeInLayerEffect": "warning",
49150
+ "strictEffectProvide": "warning",
49151
+ "tryCatchInEffectGen": "warning",
49152
+ "unknownInEffectCatch": "warning"
49153
+ }
49154
+ },
49155
+ {
49156
+ "name": "effect-native",
49157
+ "description": "Enable all Effect-native diagnostics at warning level.",
49158
+ "diagnosticSeverity": {
49159
+ "abortControllerInEffect": "warning",
49160
+ "asyncFunction": "warning",
49161
+ "cryptoRandomUUID": "warning",
49162
+ "cryptoRandomUUIDInEffect": "warning",
49163
+ "extendsNativeError": "warning",
49164
+ "globalConsole": "warning",
49165
+ "globalConsoleInEffect": "warning",
49166
+ "globalDate": "warning",
49167
+ "globalDateInEffect": "warning",
49168
+ "globalFetch": "warning",
49169
+ "globalFetchInEffect": "warning",
49170
+ "globalRandom": "warning",
49171
+ "globalRandomInEffect": "warning",
49172
+ "globalTimers": "warning",
49173
+ "globalTimersInEffect": "warning",
49174
+ "instanceOfSchema": "warning",
49175
+ "newPromise": "warning",
49176
+ "nodeBuiltinImport": "warning",
49177
+ "preferSchemaOverJson": "warning",
49178
+ "processEnv": "warning",
49179
+ "processEnvInEffect": "warning",
49180
+ "schemaSync": "warning"
49181
+ }
49182
+ },
49183
+ {
49184
+ "name": "style",
49185
+ "description": "Enable all style diagnostics at warning level.",
49186
+ "diagnosticSeverity": {
49187
+ "acquireReleaseDisposable": "warning",
49188
+ "allOfMapToForEach": "warning",
49189
+ "catchAllTagDispatchToCatchTag": "warning",
49190
+ "catchAllToMapError": "warning",
49191
+ "catchChainToFirstSuccessOf": "warning",
49192
+ "catchConditionalRefailToCatchIf": "warning",
49193
+ "catchDieToOrDie": "warning",
49194
+ "catchIfTagToCatchTag": "warning",
49195
+ "catchRefailToTapError": "warning",
49196
+ "catchTagToCatchReason": "warning",
49197
+ "catchToIgnore": "warning",
49198
+ "catchToOrElseSucceed": "warning",
49199
+ "deterministicKeys": "warning",
49200
+ "effectDoNotation": "warning",
49201
+ "effectFnOpportunity": "warning",
49202
+ "effectMapFlatten": "warning",
49203
+ "effectMapVoid": "warning",
49204
+ "effectSucceedWithVoid": "warning",
49205
+ "flatMapConditionalToFilterOrFail": "warning",
49206
+ "flatMapIgnoredParamToAndThen": "warning",
49207
+ "flatMapToMap": "warning",
49208
+ "mapSomeToAsSome": "warning",
49209
+ "matchEffectToMapBoth": "warning",
49210
+ "matchEffectToMatch": "warning",
49211
+ "missedPipeableOpportunity": "warning",
49212
+ "missingEffectServiceDependency": "warning",
49213
+ "missingPipeableSignature": "warning",
49214
+ "multipleCatchTag": "warning",
49215
+ "nestedEffectGenYield": "warning",
49216
+ "newSchemaClass": "warning",
49217
+ "optionMatchToFromOption": "warning",
49218
+ "preferSchemaTypeProperty": "warning",
49219
+ "preferSucceedSomeOrNone": "warning",
49220
+ "preferTypedSchemaDecoder": "warning",
49221
+ "provideLayerSucceedToProvideService": "warning",
49222
+ "raceFirstWithSleepToTimeout": "warning",
49223
+ "redundantMapError": "warning",
49224
+ "redundantOrDie": "warning",
49225
+ "redundantSchemaTagIdentifier": "warning",
49226
+ "runOfExitToRunExit": "warning",
49227
+ "schemaNumber": "warning",
49228
+ "schemaStructWithTag": "warning",
49229
+ "schemaUnionOfLiterals": "warning",
49230
+ "serviceNotAsClass": "warning",
49231
+ "strictBooleanExpressions": "warning",
49232
+ "syncToSucceed": "warning",
49233
+ "timeoutCatchTagToTimeoutOrElse": "warning",
49234
+ "unnecessaryArrowBlock": "warning",
49235
+ "unnecessaryEffectGen": "warning",
49236
+ "unnecessaryFailYieldableError": "warning",
49237
+ "unnecessaryPipe": "warning",
49238
+ "unnecessaryPipeChain": "warning",
49239
+ "unnecessaryTypeofType": "warning"
49240
+ }
49241
+ }
49242
+ ];
48956
49243
  var rules = [
48957
49244
  {
48958
49245
  "name": "anyUnknownInErrorContext",
@@ -49939,10 +50226,10 @@ var rules = [
49939
50226
  "supportedEffect": ["v3", "v4"],
49940
50227
  "codes": [377042],
49941
50228
  "preview": {
49942
- "sourceText": "import { Schema } from \"effect\"\n\nclass User extends Schema.Class<User>(\"User\")({ name: Schema.String }) {}\ndeclare const value: unknown\nexport const preview = value instanceof User\n",
50229
+ "sourceText": "import { Schema as S } from \"effect\"\n\nclass User extends S.Class<User>(\"User\")({ name: S.String }) {}\ndeclare const value: unknown\nexport const preview = value instanceof User\n",
49943
50230
  "diagnostics": [{
49944
- "start": 159,
49945
- "end": 180,
50231
+ "start": 154,
50232
+ "end": 175,
49946
50233
  "text": "This code uses `instanceof` with an Effect Schema type. `Schema.is` is the schema-aware runtime check for this case. effect(instanceOfSchema)"
49947
50234
  }]
49948
50235
  }
@@ -50036,6 +50323,23 @@ var rules = [
50036
50323
  }]
50037
50324
  }
50038
50325
  },
50326
+ {
50327
+ "name": "schemaSync",
50328
+ "group": "effectNative",
50329
+ "description": "Suggests Effect-based Schema decoding and encoding instead of synchronous methods",
50330
+ "defaultSeverity": "off",
50331
+ "fixable": false,
50332
+ "supportedEffect": ["v3", "v4"],
50333
+ "codes": [377130],
50334
+ "preview": {
50335
+ "sourceText": "import * as Schema from \"effect/Schema\"\n\nconst Person = Schema.Struct({ name: Schema.String })\n\nexport const person = Schema.decodeUnknownSync(Person)({ name: \"Ada\" })\n",
50336
+ "diagnostics": [{
50337
+ "start": 118,
50338
+ "end": 142,
50339
+ "text": "`Schema.decodeUnknownSync` executes synchronously. Use `Schema.decodeUnknownEffect` to compose this operation through Effect without throwing. effect(schemaSync)"
50340
+ }]
50341
+ }
50342
+ },
50039
50343
  {
50040
50344
  "name": "acquireReleaseDisposable",
50041
50345
  "group": "style",
@@ -50155,6 +50459,40 @@ var rules = [
50155
50459
  }]
50156
50460
  }
50157
50461
  },
50462
+ {
50463
+ "name": "catchIfTagToCatchTag",
50464
+ "group": "style",
50465
+ "description": "Suggests Effect.catchTag instead of Effect.catchIf with a direct _tag equality predicate",
50466
+ "defaultSeverity": "suggestion",
50467
+ "fixable": true,
50468
+ "supportedEffect": ["v3", "v4"],
50469
+ "codes": [377131],
50470
+ "preview": {
50471
+ "sourceText": "import { Data, Effect } from \"effect\"\n\nclass NotFound extends Data.TaggedError(\"NotFound\")<{}> {}\nclass Timeout extends Data.TaggedError(\"Timeout\")<{}> {}\n\ndeclare const program: Effect.Effect<string, NotFound | Timeout>\n\nexport const recovered = program.pipe(\n Effect.catchIf(\n (error) => error._tag === \"NotFound\",\n () => Effect.succeed(\"guest\")\n )\n)\n",
50472
+ "diagnostics": [{
50473
+ "start": 263,
50474
+ "end": 277,
50475
+ "text": "Effect.catchTag expresses tagged error recovery more directly than Effect.catchIf with a `_tag` equality predicate. effect(catchIfTagToCatchTag)"
50476
+ }]
50477
+ }
50478
+ },
50479
+ {
50480
+ "name": "catchRefailToTapError",
50481
+ "group": "style",
50482
+ "description": "Suggests Effect.tapError for catch handlers that sequence an effect and then re-fail the original error",
50483
+ "defaultSeverity": "suggestion",
50484
+ "fixable": false,
50485
+ "supportedEffect": ["v4"],
50486
+ "codes": [377133],
50487
+ "preview": {
50488
+ "sourceText": "import { Effect } from \"effect\"\n\ndeclare const save: Effect.Effect<void, Error>\ndeclare const rollback: Effect.Effect<void>\n\nexport const program = save.pipe(\n Effect.catch(error => rollback.pipe(Effect.andThen(Effect.fail(error))))\n)\n",
50489
+ "diagnostics": [{
50490
+ "start": 161,
50491
+ "end": 173,
50492
+ "text": "Use Effect.tapError to observe the error and preserve the original failure without having to re-fail it. effect(catchRefailToTapError)"
50493
+ }]
50494
+ }
50495
+ },
50158
50496
  {
50159
50497
  "name": "catchTagToCatchReason",
50160
50498
  "group": "style",
@@ -50325,6 +50663,23 @@ var rules = [
50325
50663
  }]
50326
50664
  }
50327
50665
  },
50666
+ {
50667
+ "name": "flatMapIgnoredParamToAndThen",
50668
+ "group": "style",
50669
+ "description": "Suggests using Effect.andThen instead of Effect.flatMap when a zero-parameter callback returns an existing Effect value",
50670
+ "defaultSeverity": "suggestion",
50671
+ "fixable": true,
50672
+ "supportedEffect": ["v3", "v4"],
50673
+ "codes": [377132],
50674
+ "preview": {
50675
+ "sourceText": "import { Effect } from \"effect\"\n\nconst first = Effect.succeed(1)\nconst second = Effect.succeed(\"second\")\n\nexport const program = first.pipe(Effect.flatMap(() => second))\n",
50676
+ "diagnostics": [{
50677
+ "start": 140,
50678
+ "end": 154,
50679
+ "text": "`Effect.andThen` expresses this sequencing more directly than `Effect.flatMap` with a zero-parameter callback. effect(flatMapIgnoredParamToAndThen)"
50680
+ }]
50681
+ }
50682
+ },
50328
50683
  {
50329
50684
  "name": "flatMapToMap",
50330
50685
  "group": "style",
@@ -50926,10 +51281,10 @@ var metadata_default = {
50926
51281
  var tags = {
50927
51282
  "typescript": {
50928
51283
  "latest": "7.0.2",
50929
- "next": "7.1.0-dev.20260908.1"
51284
+ "next": "7.1.0-dev.20260924.1"
50930
51285
  },
50931
- "oxlint": { "latest": "1.82.0" },
50932
- "oxlint-tsgolint": { "latest": "7.0.2001" }
51286
+ "oxlint": { "latest": "1.85.0" },
51287
+ "oxlint-tsgolint": { "latest": "7.0.2003" }
50933
51288
  };
50934
51289
  var components = {
50935
51290
  "typescript": {
@@ -50937,18 +51292,30 @@ var components = {
50937
51292
  "gitHead": "2bd066d87f5bafd315be9f40889d0a60b9e58e0b",
50938
51293
  "provider": "typescript-go"
50939
51294
  },
50940
- "7.1.0-dev.20260908.1": {
50941
- "gitHead": "1f70213d4922b434345f639b441681e470c7cfc1",
51295
+ "7.1.0-dev.20260924.1": {
51296
+ "gitHead": "df1a31e6d5c4aa4485f276fdfb4218a7bfcdf348",
50942
51297
  "provider": "typescript"
50943
51298
  }
50944
51299
  },
50945
- "oxlint-tsgolint": { "7.0.2001": {
50946
- "gitHead": "482dcf70bffce7ea56f63128c74beb67dec658a2",
50947
- "dependencies": { "typescript": "7.0.2" }
50948
- } },
51300
+ "oxlint-tsgolint": {
51301
+ "7.0.2001": {
51302
+ "gitHead": "482dcf70bffce7ea56f63128c74beb67dec658a2",
51303
+ "dependencies": { "typescript": "7.0.2" }
51304
+ },
51305
+ "7.0.2002": {
51306
+ "gitHead": "acd88e1b1ef8f219e8956f804f2548dafd949705",
51307
+ "dependencies": { "typescript": "7.0.2" }
51308
+ },
51309
+ "7.0.2003": {
51310
+ "gitHead": "eb9339115edde6811ca94c3433adf69ea9852880",
51311
+ "dependencies": { "typescript": "7.0.2" }
51312
+ }
51313
+ },
50949
51314
  "oxlint": {
50950
- "1.81.0": { "gitHead": "0b4e2e67f4193e7ebfcc64982275eb583ae82c83" },
50951
- "1.82.0": { "gitHead": "b4da00b621ec2f6f67ed218f5366c45ed325331b" }
51315
+ "1.82.0": { "gitHead": "b4da00b621ec2f6f67ed218f5366c45ed325331b" },
51316
+ "1.83.0": { "gitHead": "7bf68f70c20f5329251f19be95076f6eab4fe396" },
51317
+ "1.84.0": { "gitHead": "f02a64a517a69a4eaa4ef83b722a3f10cf633f10" },
51318
+ "1.85.0": { "gitHead": "288d8cc77984b0a3851c58c423ffe9e6edc79f2e" }
50952
51319
  }
50953
51320
  };
50954
51321
 
@@ -19,6 +19,8 @@
19
19
  "effecttsgo/missing-return-yield-star": "warn",
20
20
  "effecttsgo/missing-star-in-yield-effect-gen": "warn",
21
21
  "effecttsgo/non-object-effect-service-type": "warn",
22
+ "effecttsgo/obsolete-match-import": "warn",
23
+ "effecttsgo/obsolete-schema-import": "warn",
22
24
  "effecttsgo/outdated-api": "warn",
23
25
  "effecttsgo/overridden-schema-constructor": "warn",
24
26
  "effecttsgo/promise-in-effect-success": "warn",
@@ -26,6 +26,7 @@
26
26
  "effecttsgo/node-builtin-import": "warn",
27
27
  "effecttsgo/prefer-schema-over-json": "warn",
28
28
  "effecttsgo/process-env": "warn",
29
- "effecttsgo/process-env-in-effect": "warn"
29
+ "effecttsgo/process-env-in-effect": "warn",
30
+ "effecttsgo/schema-sync": "warn"
30
31
  }
31
32
  }
@@ -6,6 +6,7 @@ export declare const antipattern: OxlintConfig
6
6
  export declare const correctness: OxlintConfig
7
7
  export declare const effectNative: OxlintConfig
8
8
  export declare const recommended: OxlintConfig
9
+ export declare const strict: OxlintConfig
9
10
  export declare const style: OxlintConfig
10
11
 
11
12
  export declare const presets: Readonly<{
@@ -13,5 +14,6 @@ export declare const presets: Readonly<{
13
14
  correctness: OxlintConfig
14
15
  effectNative: OxlintConfig
15
16
  recommended: OxlintConfig
17
+ strict: OxlintConfig
16
18
  style: OxlintConfig
17
19
  }>
@@ -52,6 +52,8 @@ export const correctness = {
52
52
  "effecttsgo/missing-return-yield-star": "warn",
53
53
  "effecttsgo/missing-star-in-yield-effect-gen": "warn",
54
54
  "effecttsgo/non-object-effect-service-type": "warn",
55
+ "effecttsgo/obsolete-match-import": "warn",
56
+ "effecttsgo/obsolete-schema-import": "warn",
55
57
  "effecttsgo/outdated-api": "warn",
56
58
  "effecttsgo/overridden-schema-constructor": "warn",
57
59
  "effecttsgo/promise-in-effect-success": "warn",
@@ -89,7 +91,8 @@ export const effectNative = {
89
91
  "effecttsgo/node-builtin-import": "warn",
90
92
  "effecttsgo/prefer-schema-over-json": "warn",
91
93
  "effecttsgo/process-env": "warn",
92
- "effecttsgo/process-env-in-effect": "warn"
94
+ "effecttsgo/process-env-in-effect": "warn",
95
+ "effecttsgo/schema-sync": "warn"
93
96
  }
94
97
  }
95
98
 
@@ -104,19 +107,18 @@ export const recommended = {
104
107
  "effecttsgo/abort-controller-in-effect": "warn",
105
108
  "effecttsgo/acquire-release-disposable": "warn",
106
109
  "effecttsgo/all-of-map-to-for-each": "warn",
107
- "effecttsgo/async-function": "warn",
108
110
  "effecttsgo/catch-all-tag-dispatch-to-catch-tag": "warn",
109
111
  "effecttsgo/catch-all-to-map-error": "warn",
110
112
  "effecttsgo/catch-chain-to-first-success-of": "warn",
111
113
  "effecttsgo/catch-conditional-refail-to-catch-if": "warn",
112
114
  "effecttsgo/catch-die-to-or-die": "warn",
115
+ "effecttsgo/catch-if-tag-to-catch-tag": "warn",
116
+ "effecttsgo/catch-refail-to-tap-error": "warn",
113
117
  "effecttsgo/catch-tag-to-catch-reason": "warn",
114
118
  "effecttsgo/catch-to-ignore": "warn",
115
119
  "effecttsgo/catch-to-or-else-succeed": "warn",
116
120
  "effecttsgo/catch-unfailable-effect": "warn",
117
121
  "effecttsgo/class-self-mismatch": "error",
118
- "effecttsgo/crypto-random-uuid": "warn",
119
- "effecttsgo/crypto-random-uuid-in-effect": "warn",
120
122
  "effecttsgo/duplicate-package": "warn",
121
123
  "effecttsgo/effect-fn-iife": "warn",
122
124
  "effecttsgo/effect-fn-implicit-any": "error",
@@ -127,25 +129,14 @@ export const recommended = {
127
129
  "effecttsgo/effect-map-flatten": "warn",
128
130
  "effecttsgo/effect-map-void": "warn",
129
131
  "effecttsgo/effect-succeed-with-void": "warn",
130
- "effecttsgo/extends-native-error": "warn",
131
132
  "effecttsgo/flat-map-conditional-to-filter-or-fail": "warn",
133
+ "effecttsgo/flat-map-ignored-param-to-and-then": "warn",
132
134
  "effecttsgo/flat-map-to-map": "warn",
133
135
  "effecttsgo/floating-effect": "error",
134
136
  "effecttsgo/floating-effect-in-vitest": "error",
135
137
  "effecttsgo/generic-effect-services": "warn",
136
- "effecttsgo/global-console": "warn",
137
- "effecttsgo/global-console-in-effect": "warn",
138
- "effecttsgo/global-date": "warn",
139
- "effecttsgo/global-date-in-effect": "warn",
140
138
  "effecttsgo/global-error-in-effect-catch": "warn",
141
139
  "effecttsgo/global-error-in-effect-failure": "warn",
142
- "effecttsgo/global-fetch": "warn",
143
- "effecttsgo/global-fetch-in-effect": "warn",
144
- "effecttsgo/global-random": "warn",
145
- "effecttsgo/global-random-in-effect": "warn",
146
- "effecttsgo/global-timers": "warn",
147
- "effecttsgo/global-timers-in-effect": "warn",
148
- "effecttsgo/instance-of-schema": "warn",
149
140
  "effecttsgo/layer-merge-all-with-dependencies": "warn",
150
141
  "effecttsgo/lazy-effect": "warn",
151
142
  "effecttsgo/lazy-promise-in-effect-sync": "warn",
@@ -160,18 +151,15 @@ export const recommended = {
160
151
  "effecttsgo/missing-star-in-yield-effect-gen": "error",
161
152
  "effecttsgo/multiple-catch-tag": "warn",
162
153
  "effecttsgo/multiple-effect-provide": "warn",
163
- "effecttsgo/new-promise": "warn",
164
- "effecttsgo/node-builtin-import": "warn",
165
154
  "effecttsgo/non-object-effect-service-type": "error",
155
+ "effecttsgo/obsolete-match-import": "warn",
156
+ "effecttsgo/obsolete-schema-import": "warn",
166
157
  "effecttsgo/option-match-to-from-option": "warn",
167
158
  "effecttsgo/outdated-api": "warn",
168
159
  "effecttsgo/overridden-schema-constructor": "error",
169
- "effecttsgo/prefer-schema-over-json": "warn",
170
160
  "effecttsgo/prefer-succeed-some-or-none": "warn",
171
161
  "effecttsgo/prefer-typed-schema-decoder": "warn",
172
162
  "effecttsgo/prefer-unsafe-constructor": "warn",
173
- "effecttsgo/process-env": "warn",
174
- "effecttsgo/process-env-in-effect": "warn",
175
163
  "effecttsgo/promise-in-effect-success": "warn",
176
164
  "effecttsgo/provide-layer-succeed-to-provide-service": "warn",
177
165
  "effecttsgo/race-first-with-sleep-to-timeout": "warn",
@@ -199,6 +187,97 @@ export const recommended = {
199
187
  }
200
188
  }
201
189
 
190
+ export const strict = {
191
+ "options": {
192
+ "typeAware": true
193
+ },
194
+ "plugins": [
195
+ "effecttsgo"
196
+ ],
197
+ "rules": {
198
+ "effecttsgo/abort-controller-in-effect": "error",
199
+ "effecttsgo/acquire-release-disposable": "error",
200
+ "effecttsgo/all-of-map-to-for-each": "error",
201
+ "effecttsgo/catch-all-tag-dispatch-to-catch-tag": "error",
202
+ "effecttsgo/catch-all-to-map-error": "error",
203
+ "effecttsgo/catch-chain-to-first-success-of": "error",
204
+ "effecttsgo/catch-conditional-refail-to-catch-if": "error",
205
+ "effecttsgo/catch-die-to-or-die": "error",
206
+ "effecttsgo/catch-if-tag-to-catch-tag": "error",
207
+ "effecttsgo/catch-refail-to-tap-error": "error",
208
+ "effecttsgo/catch-tag-to-catch-reason": "error",
209
+ "effecttsgo/catch-to-ignore": "error",
210
+ "effecttsgo/catch-to-or-else-succeed": "error",
211
+ "effecttsgo/catch-unfailable-effect": "error",
212
+ "effecttsgo/class-self-mismatch": "error",
213
+ "effecttsgo/duplicate-package": "error",
214
+ "effecttsgo/effect-fn-iife": "error",
215
+ "effecttsgo/effect-fn-implicit-any": "error",
216
+ "effecttsgo/effect-fn-opportunity": "error",
217
+ "effecttsgo/effect-gen-uses-adapter": "error",
218
+ "effecttsgo/effect-in-failure": "error",
219
+ "effecttsgo/effect-in-void-success": "error",
220
+ "effecttsgo/effect-map-flatten": "error",
221
+ "effecttsgo/effect-map-void": "error",
222
+ "effecttsgo/effect-succeed-with-void": "error",
223
+ "effecttsgo/flat-map-conditional-to-filter-or-fail": "error",
224
+ "effecttsgo/flat-map-ignored-param-to-and-then": "error",
225
+ "effecttsgo/flat-map-to-map": "error",
226
+ "effecttsgo/floating-effect": "error",
227
+ "effecttsgo/floating-effect-in-vitest": "error",
228
+ "effecttsgo/generic-effect-services": "error",
229
+ "effecttsgo/global-error-in-effect-catch": "error",
230
+ "effecttsgo/global-error-in-effect-failure": "error",
231
+ "effecttsgo/layer-merge-all-with-dependencies": "error",
232
+ "effecttsgo/lazy-effect": "error",
233
+ "effecttsgo/lazy-promise-in-effect-sync": "error",
234
+ "effecttsgo/leaking-requirements": "error",
235
+ "effecttsgo/map-some-to-as-some": "error",
236
+ "effecttsgo/match-effect-to-map-both": "error",
237
+ "effecttsgo/match-effect-to-match": "error",
238
+ "effecttsgo/missing-effect-context": "error",
239
+ "effecttsgo/missing-effect-error": "error",
240
+ "effecttsgo/missing-layer-context": "error",
241
+ "effecttsgo/missing-return-yield-star": "error",
242
+ "effecttsgo/missing-star-in-yield-effect-gen": "error",
243
+ "effecttsgo/multiple-catch-tag": "error",
244
+ "effecttsgo/multiple-effect-provide": "error",
245
+ "effecttsgo/non-object-effect-service-type": "error",
246
+ "effecttsgo/obsolete-match-import": "error",
247
+ "effecttsgo/obsolete-schema-import": "error",
248
+ "effecttsgo/option-match-to-from-option": "error",
249
+ "effecttsgo/outdated-api": "error",
250
+ "effecttsgo/overridden-schema-constructor": "error",
251
+ "effecttsgo/prefer-succeed-some-or-none": "error",
252
+ "effecttsgo/prefer-typed-schema-decoder": "error",
253
+ "effecttsgo/prefer-unsafe-constructor": "error",
254
+ "effecttsgo/promise-in-effect-success": "error",
255
+ "effecttsgo/provide-layer-succeed-to-provide-service": "error",
256
+ "effecttsgo/race-first-with-sleep-to-timeout": "error",
257
+ "effecttsgo/redundant-map-error": "error",
258
+ "effecttsgo/redundant-or-die": "error",
259
+ "effecttsgo/redundant-schema-tag-identifier": "error",
260
+ "effecttsgo/return-effect-in-gen": "error",
261
+ "effecttsgo/run-effect-inside-effect": "error",
262
+ "effecttsgo/run-of-exit-to-run-exit": "error",
263
+ "effecttsgo/schema-literal-non-finite": "error",
264
+ "effecttsgo/schema-number": "error",
265
+ "effecttsgo/schema-opaque-instance-member": "error",
266
+ "effecttsgo/schema-struct-with-tag": "error",
267
+ "effecttsgo/schema-sync-in-effect": "error",
268
+ "effecttsgo/scope-in-layer-effect": "error",
269
+ "effecttsgo/sync-to-succeed": "error",
270
+ "effecttsgo/timeout-catch-tag-to-timeout-or-else": "error",
271
+ "effecttsgo/try-catch-in-effect-gen": "error",
272
+ "effecttsgo/unknown-in-effect-catch": "error",
273
+ "effecttsgo/unnecessary-effect-gen": "error",
274
+ "effecttsgo/unnecessary-fail-yieldable-error": "error",
275
+ "effecttsgo/unnecessary-pipe": "error",
276
+ "effecttsgo/unnecessary-pipe-chain": "error",
277
+ "effecttsgo/unnecessary-typeof-type": "error"
278
+ }
279
+ }
280
+
202
281
  export const style = {
203
282
  "options": {
204
283
  "typeAware": true
@@ -214,6 +293,8 @@ export const style = {
214
293
  "effecttsgo/catch-chain-to-first-success-of": "warn",
215
294
  "effecttsgo/catch-conditional-refail-to-catch-if": "warn",
216
295
  "effecttsgo/catch-die-to-or-die": "warn",
296
+ "effecttsgo/catch-if-tag-to-catch-tag": "warn",
297
+ "effecttsgo/catch-refail-to-tap-error": "warn",
217
298
  "effecttsgo/catch-tag-to-catch-reason": "warn",
218
299
  "effecttsgo/catch-to-ignore": "warn",
219
300
  "effecttsgo/catch-to-or-else-succeed": "warn",
@@ -224,6 +305,7 @@ export const style = {
224
305
  "effecttsgo/effect-map-void": "warn",
225
306
  "effecttsgo/effect-succeed-with-void": "warn",
226
307
  "effecttsgo/flat-map-conditional-to-filter-or-fail": "warn",
308
+ "effecttsgo/flat-map-ignored-param-to-and-then": "warn",
227
309
  "effecttsgo/flat-map-to-map": "warn",
228
310
  "effecttsgo/map-some-to-as-some": "warn",
229
311
  "effecttsgo/match-effect-to-map-both": "warn",
@@ -265,5 +347,6 @@ export const presets = {
265
347
  correctness,
266
348
  effectNative,
267
349
  recommended,
350
+ strict,
268
351
  style,
269
352
  }
@@ -9,19 +9,18 @@
9
9
  "effecttsgo/abort-controller-in-effect": "warn",
10
10
  "effecttsgo/acquire-release-disposable": "warn",
11
11
  "effecttsgo/all-of-map-to-for-each": "warn",
12
- "effecttsgo/async-function": "warn",
13
12
  "effecttsgo/catch-all-tag-dispatch-to-catch-tag": "warn",
14
13
  "effecttsgo/catch-all-to-map-error": "warn",
15
14
  "effecttsgo/catch-chain-to-first-success-of": "warn",
16
15
  "effecttsgo/catch-conditional-refail-to-catch-if": "warn",
17
16
  "effecttsgo/catch-die-to-or-die": "warn",
17
+ "effecttsgo/catch-if-tag-to-catch-tag": "warn",
18
+ "effecttsgo/catch-refail-to-tap-error": "warn",
18
19
  "effecttsgo/catch-tag-to-catch-reason": "warn",
19
20
  "effecttsgo/catch-to-ignore": "warn",
20
21
  "effecttsgo/catch-to-or-else-succeed": "warn",
21
22
  "effecttsgo/catch-unfailable-effect": "warn",
22
23
  "effecttsgo/class-self-mismatch": "error",
23
- "effecttsgo/crypto-random-uuid": "warn",
24
- "effecttsgo/crypto-random-uuid-in-effect": "warn",
25
24
  "effecttsgo/duplicate-package": "warn",
26
25
  "effecttsgo/effect-fn-iife": "warn",
27
26
  "effecttsgo/effect-fn-implicit-any": "error",
@@ -32,25 +31,14 @@
32
31
  "effecttsgo/effect-map-flatten": "warn",
33
32
  "effecttsgo/effect-map-void": "warn",
34
33
  "effecttsgo/effect-succeed-with-void": "warn",
35
- "effecttsgo/extends-native-error": "warn",
36
34
  "effecttsgo/flat-map-conditional-to-filter-or-fail": "warn",
35
+ "effecttsgo/flat-map-ignored-param-to-and-then": "warn",
37
36
  "effecttsgo/flat-map-to-map": "warn",
38
37
  "effecttsgo/floating-effect": "error",
39
38
  "effecttsgo/floating-effect-in-vitest": "error",
40
39
  "effecttsgo/generic-effect-services": "warn",
41
- "effecttsgo/global-console": "warn",
42
- "effecttsgo/global-console-in-effect": "warn",
43
- "effecttsgo/global-date": "warn",
44
- "effecttsgo/global-date-in-effect": "warn",
45
40
  "effecttsgo/global-error-in-effect-catch": "warn",
46
41
  "effecttsgo/global-error-in-effect-failure": "warn",
47
- "effecttsgo/global-fetch": "warn",
48
- "effecttsgo/global-fetch-in-effect": "warn",
49
- "effecttsgo/global-random": "warn",
50
- "effecttsgo/global-random-in-effect": "warn",
51
- "effecttsgo/global-timers": "warn",
52
- "effecttsgo/global-timers-in-effect": "warn",
53
- "effecttsgo/instance-of-schema": "warn",
54
42
  "effecttsgo/layer-merge-all-with-dependencies": "warn",
55
43
  "effecttsgo/lazy-effect": "warn",
56
44
  "effecttsgo/lazy-promise-in-effect-sync": "warn",
@@ -65,18 +53,15 @@
65
53
  "effecttsgo/missing-star-in-yield-effect-gen": "error",
66
54
  "effecttsgo/multiple-catch-tag": "warn",
67
55
  "effecttsgo/multiple-effect-provide": "warn",
68
- "effecttsgo/new-promise": "warn",
69
- "effecttsgo/node-builtin-import": "warn",
70
56
  "effecttsgo/non-object-effect-service-type": "error",
57
+ "effecttsgo/obsolete-match-import": "warn",
58
+ "effecttsgo/obsolete-schema-import": "warn",
71
59
  "effecttsgo/option-match-to-from-option": "warn",
72
60
  "effecttsgo/outdated-api": "warn",
73
61
  "effecttsgo/overridden-schema-constructor": "error",
74
- "effecttsgo/prefer-schema-over-json": "warn",
75
62
  "effecttsgo/prefer-succeed-some-or-none": "warn",
76
63
  "effecttsgo/prefer-typed-schema-decoder": "warn",
77
64
  "effecttsgo/prefer-unsafe-constructor": "warn",
78
- "effecttsgo/process-env": "warn",
79
- "effecttsgo/process-env-in-effect": "warn",
80
65
  "effecttsgo/promise-in-effect-success": "warn",
81
66
  "effecttsgo/provide-layer-succeed-to-provide-service": "warn",
82
67
  "effecttsgo/race-first-with-sleep-to-timeout": "warn",
@@ -0,0 +1,90 @@
1
+ {
2
+ "options": {
3
+ "typeAware": true
4
+ },
5
+ "plugins": [
6
+ "effecttsgo"
7
+ ],
8
+ "rules": {
9
+ "effecttsgo/abort-controller-in-effect": "error",
10
+ "effecttsgo/acquire-release-disposable": "error",
11
+ "effecttsgo/all-of-map-to-for-each": "error",
12
+ "effecttsgo/catch-all-tag-dispatch-to-catch-tag": "error",
13
+ "effecttsgo/catch-all-to-map-error": "error",
14
+ "effecttsgo/catch-chain-to-first-success-of": "error",
15
+ "effecttsgo/catch-conditional-refail-to-catch-if": "error",
16
+ "effecttsgo/catch-die-to-or-die": "error",
17
+ "effecttsgo/catch-if-tag-to-catch-tag": "error",
18
+ "effecttsgo/catch-refail-to-tap-error": "error",
19
+ "effecttsgo/catch-tag-to-catch-reason": "error",
20
+ "effecttsgo/catch-to-ignore": "error",
21
+ "effecttsgo/catch-to-or-else-succeed": "error",
22
+ "effecttsgo/catch-unfailable-effect": "error",
23
+ "effecttsgo/class-self-mismatch": "error",
24
+ "effecttsgo/duplicate-package": "error",
25
+ "effecttsgo/effect-fn-iife": "error",
26
+ "effecttsgo/effect-fn-implicit-any": "error",
27
+ "effecttsgo/effect-fn-opportunity": "error",
28
+ "effecttsgo/effect-gen-uses-adapter": "error",
29
+ "effecttsgo/effect-in-failure": "error",
30
+ "effecttsgo/effect-in-void-success": "error",
31
+ "effecttsgo/effect-map-flatten": "error",
32
+ "effecttsgo/effect-map-void": "error",
33
+ "effecttsgo/effect-succeed-with-void": "error",
34
+ "effecttsgo/flat-map-conditional-to-filter-or-fail": "error",
35
+ "effecttsgo/flat-map-ignored-param-to-and-then": "error",
36
+ "effecttsgo/flat-map-to-map": "error",
37
+ "effecttsgo/floating-effect": "error",
38
+ "effecttsgo/floating-effect-in-vitest": "error",
39
+ "effecttsgo/generic-effect-services": "error",
40
+ "effecttsgo/global-error-in-effect-catch": "error",
41
+ "effecttsgo/global-error-in-effect-failure": "error",
42
+ "effecttsgo/layer-merge-all-with-dependencies": "error",
43
+ "effecttsgo/lazy-effect": "error",
44
+ "effecttsgo/lazy-promise-in-effect-sync": "error",
45
+ "effecttsgo/leaking-requirements": "error",
46
+ "effecttsgo/map-some-to-as-some": "error",
47
+ "effecttsgo/match-effect-to-map-both": "error",
48
+ "effecttsgo/match-effect-to-match": "error",
49
+ "effecttsgo/missing-effect-context": "error",
50
+ "effecttsgo/missing-effect-error": "error",
51
+ "effecttsgo/missing-layer-context": "error",
52
+ "effecttsgo/missing-return-yield-star": "error",
53
+ "effecttsgo/missing-star-in-yield-effect-gen": "error",
54
+ "effecttsgo/multiple-catch-tag": "error",
55
+ "effecttsgo/multiple-effect-provide": "error",
56
+ "effecttsgo/non-object-effect-service-type": "error",
57
+ "effecttsgo/obsolete-match-import": "error",
58
+ "effecttsgo/obsolete-schema-import": "error",
59
+ "effecttsgo/option-match-to-from-option": "error",
60
+ "effecttsgo/outdated-api": "error",
61
+ "effecttsgo/overridden-schema-constructor": "error",
62
+ "effecttsgo/prefer-succeed-some-or-none": "error",
63
+ "effecttsgo/prefer-typed-schema-decoder": "error",
64
+ "effecttsgo/prefer-unsafe-constructor": "error",
65
+ "effecttsgo/promise-in-effect-success": "error",
66
+ "effecttsgo/provide-layer-succeed-to-provide-service": "error",
67
+ "effecttsgo/race-first-with-sleep-to-timeout": "error",
68
+ "effecttsgo/redundant-map-error": "error",
69
+ "effecttsgo/redundant-or-die": "error",
70
+ "effecttsgo/redundant-schema-tag-identifier": "error",
71
+ "effecttsgo/return-effect-in-gen": "error",
72
+ "effecttsgo/run-effect-inside-effect": "error",
73
+ "effecttsgo/run-of-exit-to-run-exit": "error",
74
+ "effecttsgo/schema-literal-non-finite": "error",
75
+ "effecttsgo/schema-number": "error",
76
+ "effecttsgo/schema-opaque-instance-member": "error",
77
+ "effecttsgo/schema-struct-with-tag": "error",
78
+ "effecttsgo/schema-sync-in-effect": "error",
79
+ "effecttsgo/scope-in-layer-effect": "error",
80
+ "effecttsgo/sync-to-succeed": "error",
81
+ "effecttsgo/timeout-catch-tag-to-timeout-or-else": "error",
82
+ "effecttsgo/try-catch-in-effect-gen": "error",
83
+ "effecttsgo/unknown-in-effect-catch": "error",
84
+ "effecttsgo/unnecessary-effect-gen": "error",
85
+ "effecttsgo/unnecessary-fail-yieldable-error": "error",
86
+ "effecttsgo/unnecessary-pipe": "error",
87
+ "effecttsgo/unnecessary-pipe-chain": "error",
88
+ "effecttsgo/unnecessary-typeof-type": "error"
89
+ }
90
+ }
@@ -13,6 +13,8 @@
13
13
  "effecttsgo/catch-chain-to-first-success-of": "warn",
14
14
  "effecttsgo/catch-conditional-refail-to-catch-if": "warn",
15
15
  "effecttsgo/catch-die-to-or-die": "warn",
16
+ "effecttsgo/catch-if-tag-to-catch-tag": "warn",
17
+ "effecttsgo/catch-refail-to-tap-error": "warn",
16
18
  "effecttsgo/catch-tag-to-catch-reason": "warn",
17
19
  "effecttsgo/catch-to-ignore": "warn",
18
20
  "effecttsgo/catch-to-or-else-succeed": "warn",
@@ -23,6 +25,7 @@
23
25
  "effecttsgo/effect-map-void": "warn",
24
26
  "effecttsgo/effect-succeed-with-void": "warn",
25
27
  "effecttsgo/flat-map-conditional-to-filter-or-fail": "warn",
28
+ "effecttsgo/flat-map-ignored-param-to-and-then": "warn",
26
29
  "effecttsgo/flat-map-to-map": "warn",
27
30
  "effecttsgo/map-some-to-as-some": "warn",
28
31
  "effecttsgo/match-effect-to-map-both": "warn",
@@ -2263,6 +2263,12 @@
2263
2263
  "effecttsgo/catch-die-to-or-die": {
2264
2264
  "$ref": "#/definitions/RuleNoConfig"
2265
2265
  },
2266
+ "effecttsgo/catch-if-tag-to-catch-tag": {
2267
+ "$ref": "#/definitions/RuleNoConfig"
2268
+ },
2269
+ "effecttsgo/catch-refail-to-tap-error": {
2270
+ "$ref": "#/definitions/RuleNoConfig"
2271
+ },
2266
2272
  "effecttsgo/catch-tag-to-catch-reason": {
2267
2273
  "$ref": "#/definitions/RuleNoConfig"
2268
2274
  },
@@ -2326,6 +2332,9 @@
2326
2332
  "effecttsgo/flat-map-conditional-to-filter-or-fail": {
2327
2333
  "$ref": "#/definitions/RuleNoConfig"
2328
2334
  },
2335
+ "effecttsgo/flat-map-ignored-param-to-and-then": {
2336
+ "$ref": "#/definitions/RuleNoConfig"
2337
+ },
2329
2338
  "effecttsgo/flat-map-to-map": {
2330
2339
  "$ref": "#/definitions/RuleNoConfig"
2331
2340
  },
@@ -2443,6 +2452,12 @@
2443
2452
  "effecttsgo/non-object-effect-service-type": {
2444
2453
  "$ref": "#/definitions/RuleNoConfig"
2445
2454
  },
2455
+ "effecttsgo/obsolete-match-import": {
2456
+ "$ref": "#/definitions/RuleNoConfig"
2457
+ },
2458
+ "effecttsgo/obsolete-schema-import": {
2459
+ "$ref": "#/definitions/RuleNoConfig"
2460
+ },
2446
2461
  "effecttsgo/option-match-to-from-option": {
2447
2462
  "$ref": "#/definitions/RuleNoConfig"
2448
2463
  },
@@ -2512,6 +2527,9 @@
2512
2527
  "effecttsgo/schema-struct-with-tag": {
2513
2528
  "$ref": "#/definitions/RuleNoConfig"
2514
2529
  },
2530
+ "effecttsgo/schema-sync": {
2531
+ "$ref": "#/definitions/RuleNoConfig"
2532
+ },
2515
2533
  "effecttsgo/schema-sync-in-effect": {
2516
2534
  "$ref": "#/definitions/RuleNoConfig"
2517
2535
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect/tsgo",
3
- "version": "0.44.0",
3
+ "version": "0.46.0",
4
4
  "type": "module",
5
5
  "description": "Effect Language Service for TypeScript-Go — Effect-specific diagnostics and hover features.",
6
6
  "license": "MIT",
@@ -41,13 +41,13 @@
41
41
  "schema.json"
42
42
  ],
43
43
  "optionalDependencies": {
44
- "@effect/tsgo-win32-x64": "0.44.0",
45
- "@effect/tsgo-win32-arm64": "0.44.0",
46
- "@effect/tsgo-linux-x64": "0.44.0",
47
- "@effect/tsgo-linux-arm64": "0.44.0",
48
- "@effect/tsgo-linux-arm": "0.44.0",
49
- "@effect/tsgo-darwin-x64": "0.44.0",
50
- "@effect/tsgo-darwin-arm64": "0.44.0"
44
+ "@effect/tsgo-win32-x64": "0.46.0",
45
+ "@effect/tsgo-win32-arm64": "0.46.0",
46
+ "@effect/tsgo-linux-x64": "0.46.0",
47
+ "@effect/tsgo-linux-arm64": "0.46.0",
48
+ "@effect/tsgo-linux-arm": "0.46.0",
49
+ "@effect/tsgo-darwin-x64": "0.46.0",
50
+ "@effect/tsgo-darwin-arm64": "0.46.0"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@effect/platform-node": "^4.0.0-beta.107",
package/schema.json CHANGED
@@ -2337,6 +2337,16 @@
2337
2337
  "default": "suggestion",
2338
2338
  "description": "Suggests using Effect.orDie instead of Effect.catch or Effect.catchAll with an identity-forwarding Effect.die handler"
2339
2339
  },
2340
+ "catchIfTagToCatchTag": {
2341
+ "$ref": "#/definitions/effectLanguageServicePluginSeverityDefinition",
2342
+ "default": "suggestion",
2343
+ "description": "Suggests Effect.catchTag instead of Effect.catchIf with a direct _tag equality predicate"
2344
+ },
2345
+ "catchRefailToTapError": {
2346
+ "$ref": "#/definitions/effectLanguageServicePluginSeverityDefinition",
2347
+ "default": "suggestion",
2348
+ "description": "Suggests Effect.tapError for catch handlers that sequence an effect and then re-fail the original error"
2349
+ },
2340
2350
  "catchTagToCatchReason": {
2341
2351
  "$ref": "#/definitions/effectLanguageServicePluginSeverityDefinition",
2342
2352
  "default": "suggestion",
@@ -2365,12 +2375,12 @@
2365
2375
  "cryptoRandomUUID": {
2366
2376
  "$ref": "#/definitions/effectLanguageServicePluginSeverityDefinition",
2367
2377
  "default": "off",
2368
- "description": "Warns when using crypto.randomUUID() outside Effect generators instead of the Effect Random module, which uses Effect-injected randomness rather than the crypto module behind the scenes"
2378
+ "description": "Warns when using crypto.randomUUID() outside Effect generators instead of the Effect Crypto module"
2369
2379
  },
2370
2380
  "cryptoRandomUUIDInEffect": {
2371
2381
  "$ref": "#/definitions/effectLanguageServicePluginSeverityDefinition",
2372
2382
  "default": "off",
2373
- "description": "Warns when using crypto.randomUUID() inside Effect generators instead of the Effect Random module, which uses Effect-injected randomness rather than the crypto module behind the scenes"
2383
+ "description": "Warns when using crypto.randomUUID() inside Effect generators instead of the Effect Crypto module"
2374
2384
  },
2375
2385
  "deterministicKeys": {
2376
2386
  "$ref": "#/definitions/effectLanguageServicePluginSeverityDefinition",
@@ -2442,6 +2452,11 @@
2442
2452
  "default": "suggestion",
2443
2453
  "description": "Suggests Effect.filterOrFail or Effect.filterOrElse when Effect.flatMap conditionally passes its input through with Effect.succeed"
2444
2454
  },
2455
+ "flatMapIgnoredParamToAndThen": {
2456
+ "$ref": "#/definitions/effectLanguageServicePluginSeverityDefinition",
2457
+ "default": "suggestion",
2458
+ "description": "Suggests using Effect.andThen instead of Effect.flatMap when a zero-parameter callback returns an existing Effect value"
2459
+ },
2445
2460
  "flatMapToMap": {
2446
2461
  "$ref": "#/definitions/effectLanguageServicePluginSeverityDefinition",
2447
2462
  "default": "suggestion",
@@ -2637,6 +2652,16 @@
2637
2652
  "default": "error",
2638
2653
  "description": "Ensures Effect.Service types are objects, not primitives"
2639
2654
  },
2655
+ "obsoleteMatchImport": {
2656
+ "$ref": "#/definitions/effectLanguageServicePluginSeverityDefinition",
2657
+ "default": "warning",
2658
+ "description": "Warns when importing @effect/match in projects targeting Effect v4, where Match is included directly in the effect package"
2659
+ },
2660
+ "obsoleteSchemaImport": {
2661
+ "$ref": "#/definitions/effectLanguageServicePluginSeverityDefinition",
2662
+ "default": "warning",
2663
+ "description": "Warns when importing @effect/schema in projects targeting Effect v4, where Schema is included directly in the effect package"
2664
+ },
2640
2665
  "optionMatchToFromOption": {
2641
2666
  "$ref": "#/definitions/effectLanguageServicePluginSeverityDefinition",
2642
2667
  "default": "suggestion",
@@ -2752,6 +2777,11 @@
2752
2777
  "default": "suggestion",
2753
2778
  "description": "Suggests using Schema.TaggedStruct instead of Schema.Struct with _tag field"
2754
2779
  },
2780
+ "schemaSync": {
2781
+ "$ref": "#/definitions/effectLanguageServicePluginSeverityDefinition",
2782
+ "default": "off",
2783
+ "description": "Suggests Effect-based Schema decoding and encoding instead of synchronous methods"
2784
+ },
2755
2785
  "schemaSyncInEffect": {
2756
2786
  "$ref": "#/definitions/effectLanguageServicePluginSeverityDefinition",
2757
2787
  "default": "suggestion",
@@ -3158,8 +3188,8 @@
3158
3188
  "extendsDefinition": {
3159
3189
  "properties": {
3160
3190
  "extends": {
3161
- "description": "Path to base configuration file to inherit from. Requires TypeScript version 2.1 or later.\n\n---\n\nThe value of `extends` is a string which contains a path to another configuration file to inherit from.\nThe path may use Node.js style resolution.\n\nThe configuration from the base file are loaded first, then overridden by those in the inheriting config file. All relative paths found in the configuration file will be resolved relative to the configuration file they originated in.\n\nIt's worth noting that [`files`](https://typescriptlang.org/tsconfig/#files), [`include`](https://typescriptlang.org/tsconfig/#include), and [`exclude`](https://typescriptlang.org/tsconfig/#exclude) from the inheriting config file _overwrite_ those from the\nbase config file, and that circularity between configuration files is not allowed.\n\nCurrently, the only top-level property that is excluded from inheritance is [`references`](https://typescriptlang.org/tsconfig/#references).\n\n##### Example\n\n`configs/base.json`:\n\n```json tsconfig\n{\n \"compilerOptions\": {\n \"noImplicitAny\": true,\n \"strictNullChecks\": true\n }\n}\n```\n\n`tsconfig.json`:\n\n```json tsconfig\n{\n \"extends\": \"./configs/base\",\n \"files\": [\"main.ts\", \"supplemental.ts\"]\n}\n```\n\n`tsconfig.nostrictnull.json`:\n\n```json tsconfig\n{\n \"extends\": \"./tsconfig\",\n \"compilerOptions\": {\n \"strictNullChecks\": false\n }\n}\n```\n\nProperties with relative paths found in the configuration file, which aren't excluded from inheritance, will be resolved relative to the configuration file they originated in.",
3162
- "markdownDescription": "Path to base configuration file to inherit from. Requires TypeScript version 2.1 or later.\n\n---\n\nThe value of `extends` is a string which contains a path to another configuration file to inherit from.\nThe path may use Node.js style resolution.\n\nThe configuration from the base file are loaded first, then overridden by those in the inheriting config file. All relative paths found in the configuration file will be resolved relative to the configuration file they originated in.\n\nIt's worth noting that [`files`](https://typescriptlang.org/tsconfig/#files), [`include`](https://typescriptlang.org/tsconfig/#include), and [`exclude`](https://typescriptlang.org/tsconfig/#exclude) from the inheriting config file _overwrite_ those from the\nbase config file, and that circularity between configuration files is not allowed.\n\nCurrently, the only top-level property that is excluded from inheritance is [`references`](https://typescriptlang.org/tsconfig/#references).\n\n##### Example\n\n`configs/base.json`:\n\n```json tsconfig\n{\n \"compilerOptions\": {\n \"noImplicitAny\": true,\n \"strictNullChecks\": true\n }\n}\n```\n\n`tsconfig.json`:\n\n```json tsconfig\n{\n \"extends\": \"./configs/base\",\n \"files\": [\"main.ts\", \"supplemental.ts\"]\n}\n```\n\n`tsconfig.nostrictnull.json`:\n\n```json tsconfig\n{\n \"extends\": \"./tsconfig\",\n \"compilerOptions\": {\n \"strictNullChecks\": false\n }\n}\n```\n\nProperties with relative paths found in the configuration file, which aren't excluded from inheritance, will be resolved relative to the configuration file they originated in.",
3191
+ "description": "Path to base configuration file to inherit from. Requires TypeScript version 2.1 or later.\n\n---\n\nThe value of `extends` is a string which contains a path to another configuration file to inherit from.\nThe path may use Node.js style resolution.\n\nThe configuration from the base file are loaded first, then overridden by those in the inheriting config file. All relative paths found in the configuration file will be resolved relative to the configuration file they originated in.\n\nIt's worth noting that [`files`](https://typescriptlang.org/tsconfig/#files), [`include`](https://typescriptlang.org/tsconfig/#include), and [`exclude`](https://typescriptlang.org/tsconfig/#exclude) from the inheriting config file _overwrite_ those from the\nbase config file, and that circularity between configuration files is not allowed.\n\nCurrently, the only top-level property that is excluded from inheritance is [`references`](https://typescriptlang.org/tsconfig/#references).\n\n#### Example\n\n`configs/base.json`:\n\n```json tsconfig\n{\n \"compilerOptions\": {\n \"noImplicitAny\": true,\n \"strictNullChecks\": true\n }\n}\n```\n\n`tsconfig.json`:\n\n```json tsconfig\n{\n \"extends\": \"./configs/base\",\n \"files\": [\"main.ts\", \"supplemental.ts\"]\n}\n```\n\n`tsconfig.nostrictnull.json`:\n\n```json tsconfig\n{\n \"extends\": \"./tsconfig\",\n \"compilerOptions\": {\n \"strictNullChecks\": false\n }\n}\n```\n\nProperties with relative paths found in the configuration file, which aren't excluded from inheritance, will be resolved relative to the configuration file they originated in.",
3192
+ "markdownDescription": "Path to base configuration file to inherit from. Requires TypeScript version 2.1 or later.\n\n---\n\nThe value of `extends` is a string which contains a path to another configuration file to inherit from.\nThe path may use Node.js style resolution.\n\nThe configuration from the base file are loaded first, then overridden by those in the inheriting config file. All relative paths found in the configuration file will be resolved relative to the configuration file they originated in.\n\nIt's worth noting that [`files`](https://typescriptlang.org/tsconfig/#files), [`include`](https://typescriptlang.org/tsconfig/#include), and [`exclude`](https://typescriptlang.org/tsconfig/#exclude) from the inheriting config file _overwrite_ those from the\nbase config file, and that circularity between configuration files is not allowed.\n\nCurrently, the only top-level property that is excluded from inheritance is [`references`](https://typescriptlang.org/tsconfig/#references).\n\n#### Example\n\n`configs/base.json`:\n\n```json tsconfig\n{\n \"compilerOptions\": {\n \"noImplicitAny\": true,\n \"strictNullChecks\": true\n }\n}\n```\n\n`tsconfig.json`:\n\n```json tsconfig\n{\n \"extends\": \"./configs/base\",\n \"files\": [\"main.ts\", \"supplemental.ts\"]\n}\n```\n\n`tsconfig.nostrictnull.json`:\n\n```json tsconfig\n{\n \"extends\": \"./tsconfig\",\n \"compilerOptions\": {\n \"strictNullChecks\": false\n }\n}\n```\n\nProperties with relative paths found in the configuration file, which aren't excluded from inheritance, will be resolved relative to the configuration file they originated in.",
3163
3193
  "oneOf": [
3164
3194
  {
3165
3195
  "default": "",
@@ -3173,7 +3203,7 @@
3173
3203
  "type": "array"
3174
3204
  }
3175
3205
  ],
3176
- "x-intellij-html-description": "\u003cp\u003ePath to base configuration file to inherit from. Requires TypeScript version 2.1 or later.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eThe value of \u003ccode\u003eextends\u003c/code\u003e is a string which contains a path to another configuration file to inherit from.\nThe path may use Node.js style resolution.\u003c/p\u003e\n\u003cp\u003eThe configuration from the base file are loaded first, then overridden by those in the inheriting config file. All relative paths found in the configuration file will be resolved relative to the configuration file they originated in.\u003c/p\u003e\n\u003cp\u003eIt\u0026#39;s worth noting that \u003ca href=\"https://typescriptlang.org/tsconfig/#files\"\u003e\u003ccode\u003efiles\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://typescriptlang.org/tsconfig/#include\"\u003e\u003ccode\u003einclude\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://typescriptlang.org/tsconfig/#exclude\"\u003e\u003ccode\u003eexclude\u003c/code\u003e\u003c/a\u003e from the inheriting config file \u003cem\u003eoverwrite\u003c/em\u003e those from the\nbase config file, and that circularity between configuration files is not allowed.\u003c/p\u003e\n\u003cp\u003eCurrently, the only top-level property that is excluded from inheritance is \u003ca href=\"https://typescriptlang.org/tsconfig/#references\"\u003e\u003ccode\u003ereferences\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003ch5\u003eExample\u003c/h5\u003e\n\u003cp\u003e\u003ccode\u003econfigs/base.json\u003c/code\u003e:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-json\"\u003e{\n \u0026quot;compilerOptions\u0026quot;: {\n \u0026quot;noImplicitAny\u0026quot;: true,\n \u0026quot;strictNullChecks\u0026quot;: true\n }\n}\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003ccode\u003etsconfig.json\u003c/code\u003e:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-json\"\u003e{\n \u0026quot;extends\u0026quot;: \u0026quot;./configs/base\u0026quot;,\n \u0026quot;files\u0026quot;: [\u0026quot;main.ts\u0026quot;, \u0026quot;supplemental.ts\u0026quot;]\n}\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003ccode\u003etsconfig.nostrictnull.json\u003c/code\u003e:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-json\"\u003e{\n \u0026quot;extends\u0026quot;: \u0026quot;./tsconfig\u0026quot;,\n \u0026quot;compilerOptions\u0026quot;: {\n \u0026quot;strictNullChecks\u0026quot;: false\n }\n}\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eProperties with relative paths found in the configuration file, which aren\u0026#39;t excluded from inheritance, will be resolved relative to the configuration file they originated in.\u003c/p\u003e\n"
3206
+ "x-intellij-html-description": "\u003cp\u003ePath to base configuration file to inherit from. Requires TypeScript version 2.1 or later.\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eThe value of \u003ccode\u003eextends\u003c/code\u003e is a string which contains a path to another configuration file to inherit from.\nThe path may use Node.js style resolution.\u003c/p\u003e\n\u003cp\u003eThe configuration from the base file are loaded first, then overridden by those in the inheriting config file. All relative paths found in the configuration file will be resolved relative to the configuration file they originated in.\u003c/p\u003e\n\u003cp\u003eIt\u0026#39;s worth noting that \u003ca href=\"https://typescriptlang.org/tsconfig/#files\"\u003e\u003ccode\u003efiles\u003c/code\u003e\u003c/a\u003e, \u003ca href=\"https://typescriptlang.org/tsconfig/#include\"\u003e\u003ccode\u003einclude\u003c/code\u003e\u003c/a\u003e, and \u003ca href=\"https://typescriptlang.org/tsconfig/#exclude\"\u003e\u003ccode\u003eexclude\u003c/code\u003e\u003c/a\u003e from the inheriting config file \u003cem\u003eoverwrite\u003c/em\u003e those from the\nbase config file, and that circularity between configuration files is not allowed.\u003c/p\u003e\n\u003cp\u003eCurrently, the only top-level property that is excluded from inheritance is \u003ca href=\"https://typescriptlang.org/tsconfig/#references\"\u003e\u003ccode\u003ereferences\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\n\u003ch4\u003eExample\u003c/h4\u003e\n\u003cp\u003e\u003ccode\u003econfigs/base.json\u003c/code\u003e:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-json\"\u003e{\n \u0026quot;compilerOptions\u0026quot;: {\n \u0026quot;noImplicitAny\u0026quot;: true,\n \u0026quot;strictNullChecks\u0026quot;: true\n }\n}\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003ccode\u003etsconfig.json\u003c/code\u003e:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-json\"\u003e{\n \u0026quot;extends\u0026quot;: \u0026quot;./configs/base\u0026quot;,\n \u0026quot;files\u0026quot;: [\u0026quot;main.ts\u0026quot;, \u0026quot;supplemental.ts\u0026quot;]\n}\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003ccode\u003etsconfig.nostrictnull.json\u003c/code\u003e:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-json\"\u003e{\n \u0026quot;extends\u0026quot;: \u0026quot;./tsconfig\u0026quot;,\n \u0026quot;compilerOptions\u0026quot;: {\n \u0026quot;strictNullChecks\u0026quot;: false\n }\n}\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eProperties with relative paths found in the configuration file, which aren\u0026#39;t excluded from inheritance, will be resolved relative to the configuration file they originated in.\u003c/p\u003e\n"
3177
3207
  }
3178
3208
  },
3179
3209
  "type": "object"