2222@register ("slua_lsp_defs" )
2323def gen_luau_lsp_defs (definitions : LSLDefinitions , slua_definitions : SLuaDefinitions ) -> str :
2424 """Generate SLua definitions for Luau Language Server"""
25- ll_module = [ m for m in slua_definitions .modules if m . name == "ll" ][ 0 ]
26- llcompat_module = [ m for m in slua_definitions .modules if m . name == "llcompat" ][ 0 ]
25+ ll_module = slua_definitions .modules [ "ll" ]
26+ llcompat_module = slua_definitions .modules [ "llcompat" ]
2727
2828 defs = io .StringIO ()
2929 defs .write ("""-- Second Life SLua (Server Lua) definitions file for luau-lsp.
@@ -37,12 +37,12 @@ def gen_luau_lsp_defs(definitions: LSLDefinitions, slua_definitions: SLuaDefinit
3737
3838 # 1. Luau builtins unneeded. Luau-lsp already know about these
3939 # 2. SLua base classes. These only depend on Luau builtins
40- classes = slua_definitions .base_classes + slua_definitions .classes
40+ classes = list ( slua_definitions .base_classes . values ()) + list ( slua_definitions .classes . values ())
4141 classes .sort (key = lambda x : x .name )
4242 for class_ in (class_ for class_ in classes if class_ .name [0 ].islower ()):
4343 class_ .write_luau_def (defs )
4444 defs .write ("\n " )
45- for alias in slua_definitions .type_aliases :
45+ for alias in slua_definitions .type_aliases . values () :
4646 defs .write (alias .to_luau_def ())
4747 defs .write ("\n " )
4848 defs .write ("\n " )
@@ -51,14 +51,14 @@ def gen_luau_lsp_defs(definitions: LSLDefinitions, slua_definitions: SLuaDefinit
5151 for class_ in (class_ for class_ in classes if class_ .name [0 ].isupper ()):
5252 class_ .write_luau_def (defs )
5353 defs .write ("\n " )
54- for func in slua_definitions .functions :
54+ for func in slua_definitions .functions . values () :
5555 if func .private or func .local_only :
5656 continue
5757 if not func .typechecker_flags .fully_defined :
5858 defs .write ("-- " )
5959 defs .write ("declare " )
6060 func .write_luau_global_def (defs )
61- for module in sorted (slua_definitions .modules , key = lambda x : x .name ):
61+ for module in sorted (slua_definitions .modules . values () , key = lambda x : x .name ):
6262 if module .name in {"ll" , "llcompat" }:
6363 continue
6464 if module .name == "string" :
@@ -68,13 +68,13 @@ def gen_luau_lsp_defs(definitions: LSLDefinitions, slua_definitions: SLuaDefinit
6868 module .write_luau_def (defs )
6969 if module .name == "string" :
7070 defs .write ("--]]\n " )
71- for var in slua_definitions .global_variables :
71+ for var in slua_definitions .global_variables . values () :
7272 defs .write ("declare " )
7373 defs .write (var .to_luau_def ())
7474 defs .write ("\n " )
7575 ll_module .write_luau_def (defs )
7676 llcompat_module .write_luau_def (defs )
77- for const in sorted (slua_definitions .global_constants , key = lambda x : x .name ):
77+ for const in sorted (slua_definitions .global_constants . values () , key = lambda x : x .name ):
7878 if const .private :
7979 continue
8080 defs .write ("declare " )
@@ -89,8 +89,7 @@ def gen_selene_yml(definitions: LSLDefinitions, slua_definitions: SLuaDefinition
8989 """Generate SLua standard library for Selene linter
9090 https://kampfkarren.github.io/selene/usage/std.html
9191 """
92- classes = {c .name : c for c in slua_definitions .base_classes + slua_definitions .classes }
93- type_aliases = {a .name : a for a in slua_definitions .type_aliases }
92+ classes = {** slua_definitions .base_classes , ** slua_definitions .classes }
9493
9594 file = io .StringIO ()
9695 file .write ("""# Second Life SLua (Server Lua) standard library definition file for selene.
@@ -131,8 +130,8 @@ def selene_type(type_str: str, default="any") -> str | dict | None:
131130 }
132131 if type_str in type_map :
133132 return type_map [type_str ]
134- if type_str in type_aliases :
135- return type_aliases [type_str ].selene_type
133+ if type_str in slua_definitions . type_aliases :
134+ return slua_definitions . type_aliases [type_str ].selene_type
136135 if type_str .startswith ("{" ) and type_str .endswith ("}" ):
137136 return "table"
138137 if "|" in type_str :
@@ -187,11 +186,11 @@ def selene_function(func: SLuaFunction, method=False) -> dict:
187186
188187 def selene_class (class_ : SLuaClassDeclaration ) -> dict :
189188 fields = {}
190- for method in class_ .methods :
189+ for method in class_ .methods . values () :
191190 fields [method .name ] = selene_function (method , method = True )
192- for func in class_ .functions :
191+ for func in class_ .functions . values () :
193192 fields [func .name ] = selene_function (func , method = False )
194- for prop in class_ .properties :
193+ for prop in class_ .properties . values () :
195194 fields [prop .name ] = selene_property (prop )
196195 return fields
197196
@@ -203,50 +202,49 @@ def selene_module(module: SLuaModule) -> dict:
203202 {
204203 f"{ module .name } .{ const .name } " : selene_property (const )
205204 # for func in sorted(self.functions, key=lambda x: x.name)
206- for const in module .constants
205+ for const in module .constants . values ()
207206 if not const .private
208207 }
209208 )
210209 globals .update (
211210 {
212211 f"{ module .name } .{ func .name } " : selene_function (func )
213212 # for func in sorted(self.functions, key=lambda x: x.name)
214- for func in module .functions
213+ for func in module .functions . values ()
215214 if not func .private and not func .local_only
216215 }
217216 )
218217 return globals
219218
220219 # Duplicate quaternion module as rotation. The callable aspect of quaternion
221220 # prevents us from being able to de-duplicate this with structs.
222- modules = {m .name : m for m in slua_definitions .modules }
223- modules ["rotation" ] = SLuaModule (
221+ slua_definitions .modules ["rotation" ] = SLuaModule (
224222 name = "rotation" ,
225- comment = modules ["quaternion" ].comment ,
226- callable = modules ["quaternion" ].callable ,
227- constants = modules ["quaternion" ].constants ,
228- functions = modules ["quaternion" ].functions ,
223+ comment = slua_definitions . modules ["quaternion" ].comment ,
224+ callable = slua_definitions . modules ["quaternion" ].callable ,
225+ constants = slua_definitions . modules ["quaternion" ].constants ,
226+ functions = slua_definitions . modules ["quaternion" ].functions ,
229227 )
230228
231- for const in slua_definitions .global_variables :
229+ for const in slua_definitions .global_variables . values () :
232230 if not const .private and const .name != "rotation" :
233231 selene ["globals" ][const .name ] = selene_property (const )
234- for const in sorted (slua_definitions .global_constants , key = lambda x : x .name ):
232+ for const in sorted (slua_definitions .global_constants . values () , key = lambda x : x .name ):
235233 if not const .private :
236234 selene ["globals" ][const .name ] = selene_property (const )
237- for func in sorted (slua_definitions .functions , key = lambda x : x .name ):
235+ for func in sorted (slua_definitions .functions . values () , key = lambda x : x .name ):
238236 if not func .private and not func .local_only :
239237 selene ["globals" ][func .name ] = selene_function (func )
240- for module in sorted (modules .values (), key = lambda x : x .name ):
238+ for module in sorted (slua_definitions . modules .values (), key = lambda x : x .name ):
241239 if module .name not in {"ll" , "llcompat" }:
242240 selene ["globals" ].update (selene_module (module ))
243- selene ["globals" ].update (selene_module (modules ["ll" ]))
244- selene ["globals" ].update (selene_module (modules ["llcompat" ]))
241+ selene ["globals" ].update (selene_module (slua_definitions . modules ["ll" ]))
242+ selene ["globals" ].update (selene_module (slua_definitions . modules ["llcompat" ]))
245243 for class_ in classes .values ():
246244 selene ["structs" ][class_ .name ] = selene_class (class_ )
247245
248246 # Fix up LLEvents argument types
249- event_names = [m for m in slua_definitions .type_aliases if m .name == "LLEventName" ][
247+ event_names = [m for m in slua_definitions .type_aliases . values () if m .name == "LLEventName" ][
250248 0
251249 ].selene_type
252250 for method_name in ["on" , "once" , "off" , "handlers" ]:
0 commit comments