11using EmmyLua . CodeAnalysis . Compilation . Symbol ;
2+ using EmmyLua . CodeAnalysis . Document ;
3+ using EmmyLua . CodeAnalysis . Syntax . Node ;
4+ using EmmyLua . CodeAnalysis . Syntax . Node . SyntaxNodes ;
25using EmmyLua . CodeAnalysis . Type ;
36using EmmyLua . CodeAnalysis . Type . Manager . TypeInfo ;
47
@@ -25,6 +28,20 @@ public List<LuaSymbol> GetTypeMembers(LuaType luaType)
2528
2629 private List < LuaSymbol > GetNamedTypeMembers ( LuaNamedType namedType )
2730 {
31+ if ( namedType . IsSameType ( Builtin . Global , context ) )
32+ {
33+ var list = new List < LuaSymbol > ( ) ;
34+ foreach ( var globalInfo in context . Compilation . TypeManager . GetAllGlobalInfos ( ) )
35+ {
36+ if ( globalInfo . MainLuaSymbol is { } mainLuaSymbol )
37+ {
38+ list . Add ( mainLuaSymbol ) ;
39+ }
40+ }
41+
42+ return list ;
43+ }
44+
2845 var typeInfo = context . Compilation . TypeManager . FindTypeInfo ( namedType ) ;
2946 if ( typeInfo is null )
3047 {
@@ -224,6 +241,37 @@ private List<LuaSymbol> GetGenericTypeMembers(LuaGenericType genericType)
224241 {
225242 return [ ] ;
226243 }
244+ else if ( genericType . Name == "namespace" &&
245+ genericType . GenericArgs . FirstOrDefault ( ) is LuaStringLiteralType namespaceString )
246+ {
247+ var namespaces = new List < LuaSymbol > ( ) ;
248+ var namespaceOrTypeIndexs = context . Compilation . TypeManager . GetNamespaceOrTypeInfos (
249+ namespaceString . Content , LuaDocumentId . VirtualDocumentId ) ;
250+ foreach ( var namespaceOrTypeInfo in namespaceOrTypeIndexs )
251+ {
252+ if ( namespaceOrTypeInfo . IsNamespace )
253+ {
254+ var namespaceType = new LuaGenericType ( LuaDocumentId . VirtualDocumentId , "namespace" , [
255+ new LuaStringLiteralType ( $ "{ namespaceString . Content } .{ namespaceOrTypeInfo . Name } ")
256+ ] ) ;
257+ namespaces . Add ( new LuaSymbol ( namespaceOrTypeInfo . Name ,
258+ namespaceType ,
259+ new NamespaceInfo ( )
260+ ) ) ;
261+ }
262+ else
263+ {
264+ var namedType = new LuaNamedType ( LuaDocumentId . VirtualDocumentId ,
265+ $ "{ namespaceString . Content } .{ namespaceOrTypeInfo . Name } ") ;
266+ namespaces . Add ( new LuaSymbol ( namespaceOrTypeInfo . Name , namedType , new NamedTypeInfo (
267+ new LuaElementPtr < LuaDocTagNamedTypeSyntax > ( namespaceOrTypeInfo . Id ) ,
268+ namespaceOrTypeInfo . Kind
269+ ) ) ) ;
270+ }
271+ }
272+
273+ return namespaces ;
274+ }
227275
228276 var typeInfo = context . Compilation . TypeManager . FindTypeInfo ( genericType ) ;
229277 if ( typeInfo is null )
@@ -247,7 +295,7 @@ private List<LuaSymbol> GetGenericTypeMembers(LuaGenericType genericType)
247295 {
248296 for ( var i = 0 ; i < typeInfo . GenericParams . Count && i < genericArgs . Count ; i ++ )
249297 {
250- substitute . Add ( typeInfo . GenericParams [ i ] . Name , genericArgs [ i ] , true ) ;
298+ substitute . Add ( typeInfo . GenericParams [ i ] . Name , genericArgs [ i ] , true ) ;
251299 }
252300 }
253301
@@ -327,6 +375,4 @@ public List<LuaSymbol> GetSuperMembers(LuaNamedType namedType)
327375
328376 return members . Values . ToList ( ) ;
329377 }
330-
331-
332378}
0 commit comments