@@ -209,6 +209,26 @@ export default defineConfig(
209209 message :
210210 "Запрещены Promise.* — используй комбинаторы Effect (all, forEach, etc.)." ,
211211 } ,
212+ {
213+ selector : "CallExpression[callee.object.object.name='globalThis'][callee.object.property.name='Promise']" ,
214+ message :
215+ "Запрещены globalThis.Promise.* — используй комбинаторы Effect." ,
216+ } ,
217+ {
218+ selector : "NewExpression[callee.object.name='globalThis'][callee.property.name='Promise']" ,
219+ message :
220+ "Запрещён globalThis.Promise — используй Effect.async / Effect.tryPromise." ,
221+ } ,
222+ {
223+ selector : "TSTypeReference[typeName.name='Promise'], TSTypeReference[typeName.name='PromiseLike']" ,
224+ message :
225+ "Запрещены Promise/PromiseLike в типах — используй Effect.Effect<A, E, R>." ,
226+ } ,
227+ {
228+ selector : "TSTypeReference[typeName.type='TSQualifiedName'][typeName.left.name='globalThis'][typeName.right.name='Promise']" ,
229+ message :
230+ "Запрещён globalThis.Promise в типах — используй Effect.Effect<A, E, R>." ,
231+ } ,
212232 {
213233 selector : "CallExpression[callee.property.name='push'] > SpreadElement.arguments" ,
214234 message : "Do not use spread arguments in Array.push" ,
@@ -232,6 +252,18 @@ export default defineConfig(
232252 "Запрещён Promise<T> — используй Effect.Effect<T, E, R>." ,
233253 suggest : [ "Effect.Effect<T, E, R>" ] ,
234254 } ,
255+ PromiseLike : {
256+ message :
257+ "Запрещён PromiseLike<T> — используй Effect.Effect<T, E, R>." ,
258+ } ,
259+ "PromiseLike<*>" : {
260+ message :
261+ "Запрещён PromiseLike<T> — используй Effect.Effect<T, E, R>." ,
262+ } ,
263+ "globalThis.Promise" : {
264+ message :
265+ "Запрещён globalThis.Promise<T> — используй Effect.Effect<T, E, R>." ,
266+ } ,
235267 } ,
236268 } ,
237269 ] ,
@@ -312,6 +344,30 @@ export default defineConfig(
312344 selector : 'CallExpression[callee.name="require"]' ,
313345 message : "Avoid using require(). Use ES6 imports instead." ,
314346 } ,
347+ {
348+ selector : "NewExpression[callee.name='Promise']" ,
349+ message : "Запрещён new Promise — используй Effect.async / Effect.tryPromise." ,
350+ } ,
351+ {
352+ selector : "CallExpression[callee.object.name='Promise']" ,
353+ message : "Запрещены Promise.* — используй комбинаторы Effect." ,
354+ } ,
355+ {
356+ selector : "CallExpression[callee.object.object.name='globalThis'][callee.object.property.name='Promise']" ,
357+ message : "Запрещены globalThis.Promise.* — используй комбинаторы Effect." ,
358+ } ,
359+ {
360+ selector : "NewExpression[callee.object.name='globalThis'][callee.property.name='Promise']" ,
361+ message : "Запрещён globalThis.Promise — используй Effect.async / Effect.tryPromise." ,
362+ } ,
363+ {
364+ selector : "TSTypeReference[typeName.name='Promise'], TSTypeReference[typeName.name='PromiseLike']" ,
365+ message : "Запрещены Promise/PromiseLike в типах — используй Effect.Effect<A, E, R>." ,
366+ } ,
367+ {
368+ selector : "TSTypeReference[typeName.type='TSQualifiedName'][typeName.left.name='globalThis'][typeName.right.name='Promise']" ,
369+ message : "Запрещён globalThis.Promise в типах — используй Effect.Effect<A, E, R>." ,
370+ } ,
315371 ] ,
316372 '@typescript-eslint/no-restricted-types' : 'off' ,
317373 // Axiom type casting functions intentionally use single-use type parameters
@@ -336,6 +392,30 @@ export default defineConfig(
336392 selector : 'CallExpression[callee.name="require"]' ,
337393 message : "Avoid using require(). Use ES6 imports instead." ,
338394 } ,
395+ {
396+ selector : "NewExpression[callee.name='Promise']" ,
397+ message : "Запрещён new Promise — используй Effect.async / Effect.tryPromise." ,
398+ } ,
399+ {
400+ selector : "CallExpression[callee.object.name='Promise']" ,
401+ message : "Запрещены Promise.* — используй комбинаторы Effect." ,
402+ } ,
403+ {
404+ selector : "CallExpression[callee.object.object.name='globalThis'][callee.object.property.name='Promise']" ,
405+ message : "Запрещены globalThis.Promise.* — используй комбинаторы Effect." ,
406+ } ,
407+ {
408+ selector : "NewExpression[callee.object.name='globalThis'][callee.property.name='Promise']" ,
409+ message : "Запрещён globalThis.Promise — используй Effect.async / Effect.tryPromise." ,
410+ } ,
411+ {
412+ selector : "TSTypeReference[typeName.name='Promise'], TSTypeReference[typeName.name='PromiseLike']" ,
413+ message : "Запрещены Promise/PromiseLike в типах — используй Effect.Effect<A, E, R>." ,
414+ } ,
415+ {
416+ selector : "TSTypeReference[typeName.type='TSQualifiedName'][typeName.left.name='globalThis'][typeName.right.name='Promise']" ,
417+ message : "Запрещён globalThis.Promise в типах — используй Effect.Effect<A, E, R>." ,
418+ } ,
339419 ] ,
340420 '@typescript-eslint/no-restricted-types' : 'off' ,
341421 } ,
@@ -358,6 +438,6 @@ export default defineConfig(
358438 extends : [ tseslint . configs . disableTypeChecked ] ,
359439 } ,
360440
361- // 6 ) Глобальные игноры
441+ // 7 ) Глобальные игноры
362442 { ignores : [ 'dist/**' , 'build/**' , 'coverage/**' , '**/dist/**' ] } ,
363443) ;
0 commit comments