44#include " Luau/ConstraintSolver.h"
55#include " Luau/TypeInfer.h"
66
7+ LUAU_FASTFLAG (LuauCyclicRequireTypeInference)
8+
79// Parse class names from QueryDescendants CSS-like selector strings.
810// Returns the class name from the last compound selector of each comma-separated group.
911std::vector<std::string> parseClassNamesFromSelector (const std::string& selector)
@@ -136,8 +138,14 @@ bool MagicInstanceIsA::infer(const Luau::MagicFunctionCallContext& context)
136138 std::string className (str->value .data , str->value .size );
137139 std::optional<Luau::TypeFun> tfun = context.solver ->rootScope ->lookupType (className);
138140 if (!tfun)
139- context.solver ->reportError (
140- Luau::TypeError{context.callSite ->args .data [0 ]->location , Luau::UnknownSymbol{className, Luau::UnknownSymbol::Type}});
141+ {
142+ if (FFlag::LuauCyclicRequireTypeInference)
143+ context.solver ->reportError (
144+ Luau::UnknownSymbol{className, Luau::UnknownSymbol::Type}, context.callSite ->args .data [0 ]->location , *context.constraint ->moduleName );
145+ else
146+ context.solver ->DEPRECATED_reportError (
147+ Luau::TypeError{context.callSite ->args .data [0 ]->location , Luau::UnknownSymbol{className, Luau::UnknownSymbol::Type}});
148+ }
141149
142150 return false ;
143151}
@@ -280,7 +288,10 @@ bool MagicInstanceFindFirstXWhichIsA::infer(const Luau::MagicFunctionCallContext
280288 std::optional<Luau::TypeFun> tfun = context.solver ->rootScope ->lookupType (className);
281289 if (!tfun || !tfun->typeParams .empty () || !tfun->typePackParams .empty ())
282290 {
283- context.solver ->reportError (Luau::UnknownSymbol{className, Luau::UnknownSymbol::Type}, str->location );
291+ if (FFlag::LuauCyclicRequireTypeInference)
292+ context.solver ->reportError (Luau::UnknownSymbol{className, Luau::UnknownSymbol::Type}, str->location , *context.constraint ->moduleName );
293+ else
294+ context.solver ->DEPRECATED_reportError (Luau::UnknownSymbol{className, Luau::UnknownSymbol::Type}, str->location );
284295 return false ;
285296 }
286297
@@ -344,8 +355,14 @@ bool MagicEnumItemIsA::infer(const Luau::MagicFunctionCallContext& context)
344355 std::string enumItem (str->value .data , str->value .size );
345356 std::optional<Luau::TypeFun> tfun = context.constraint ->scope ->lookupImportedType (" Enum" , enumItem);
346357 if (!tfun)
347- context.solver ->reportError (
348- Luau::TypeError{context.callSite ->args .data [0 ]->location , Luau::UnknownSymbol{enumItem, Luau::UnknownSymbol::Type}});
358+ {
359+ if (FFlag::LuauCyclicRequireTypeInference)
360+ context.solver ->reportError (
361+ Luau::UnknownSymbol{enumItem, Luau::UnknownSymbol::Type}, context.callSite ->args .data [0 ]->location , *context.constraint ->moduleName );
362+ else
363+ context.solver ->DEPRECATED_reportError (
364+ Luau::TypeError{context.callSite ->args .data [0 ]->location , Luau::UnknownSymbol{enumItem, Luau::UnknownSymbol::Type}});
365+ }
349366
350367 return false ;
351368}
@@ -433,7 +450,11 @@ bool MagicInstancePropertyCheck::infer(const Luau::MagicFunctionCallContext& con
433450 std::string property (str->value .data , str->value .size );
434451 if (!Luau::lookupExternTypeProp (ctv, property))
435452 {
436- context.solver ->reportError (Luau::TypeError{context.callSite ->args .data [0 ]->location , Luau::UnknownProperty{*selfTy, property}});
453+ if (FFlag::LuauCyclicRequireTypeInference)
454+ context.solver ->reportError (
455+ Luau::UnknownProperty{*selfTy, property}, context.callSite ->args .data [0 ]->location , *context.constraint ->moduleName );
456+ else
457+ context.solver ->DEPRECATED_reportError (Luau::TypeError{context.callSite ->args .data [0 ]->location , Luau::UnknownProperty{*selfTy, property}});
437458 }
438459
439460 return false ;
@@ -513,7 +534,10 @@ bool MagicQueryDescendants::infer(const Luau::MagicFunctionCallContext& context)
513534 std::optional<Luau::TypeFun> tfun = context.solver ->rootScope ->lookupType (className);
514535 if (!tfun || !tfun->typeParams .empty () || !tfun->typePackParams .empty ())
515536 {
516- context.solver ->reportError (Luau::UnknownSymbol{className, Luau::UnknownSymbol::Type}, str->location );
537+ if (FFlag::LuauCyclicRequireTypeInference)
538+ context.solver ->reportError (Luau::UnknownSymbol{className, Luau::UnknownSymbol::Type}, str->location , *context.constraint ->moduleName );
539+ else
540+ context.solver ->DEPRECATED_reportError (Luau::UnknownSymbol{className, Luau::UnknownSymbol::Type}, str->location );
517541 return false ;
518542 }
519543 classTypes.push_back (Luau::follow (tfun->type ));
@@ -619,8 +643,12 @@ bool MagicTypeLookup::infer(const Luau::MagicFunctionCallContext& context)
619643 std::optional<Luau::TypeFun> tfun = context.solver ->rootScope ->lookupType (className);
620644 if (!tfun || !tfun->typeParams .empty () || !tfun->typePackParams .empty ())
621645 {
622- context.solver ->reportError (
623- Luau::TypeError{context.callSite ->args .data [0 ]->location , Luau::UnknownSymbol{className, Luau::UnknownSymbol::Type}});
646+ if (FFlag::LuauCyclicRequireTypeInference)
647+ context.solver ->reportError (Luau::UnknownSymbol{className, Luau::UnknownSymbol::Type}, context.callSite ->args .data [0 ]->location ,
648+ *context.constraint ->moduleName );
649+ else
650+ context.solver ->DEPRECATED_reportError (
651+ Luau::TypeError{context.callSite ->args .data [0 ]->location , Luau::UnknownSymbol{className, Luau::UnknownSymbol::Type}});
624652 return false ;
625653 }
626654
@@ -631,8 +659,12 @@ bool MagicTypeLookup::infer(const Luau::MagicFunctionCallContext& context)
631659 }
632660 else
633661 {
634- context.solver ->reportError (
635- Luau::TypeError{context.callSite ->args .data [0 ]->location , Luau::GenericError{errorMessagePrefix + " '" + className + " '" }});
662+ if (FFlag::LuauCyclicRequireTypeInference)
663+ context.solver ->reportError (Luau::GenericError{errorMessagePrefix + " '" + className + " '" },
664+ context.callSite ->args .data [0 ]->location , *context.constraint ->moduleName );
665+ else
666+ context.solver ->DEPRECATED_reportError (
667+ Luau::TypeError{context.callSite ->args .data [0 ]->location , Luau::GenericError{errorMessagePrefix + " '" + className + " '" }});
636668 }
637669 }
638670
0 commit comments