@@ -1015,6 +1015,11 @@ fn renderMetaModel(gpa: std.mem.Allocator, meta_model: *MetaModel) error{ OutOfM
10151015 }
10161016
10171017 {
1018+ var ordered_symbol_map : std .array_hash_map .String (void ) = .empty ;
1019+ defer ordered_symbol_map .deinit (gpa );
1020+ try ordered_symbol_map .ensureTotalCapacity (gpa , config .symbols .len );
1021+ for (config .symbols ) | symbol | ordered_symbol_map .putAssumeCapacityNoClobber (symbol [0 ], {});
1022+
10181023 var original_symbol_names : std .array_hash_map .String (void ) = .empty ;
10191024 defer original_symbol_names .deinit (gpa );
10201025 try original_symbol_names .ensureTotalCapacity (gpa , meta_model .structures .len + meta_model .enumerations .len + meta_model .typeAliases .len );
@@ -1024,12 +1029,13 @@ fn renderMetaModel(gpa: std.mem.Allocator, meta_model: *MetaModel) error{ OutOfM
10241029
10251030 original_symbol_names .sort (struct {
10261031 names : []const []const u8 ,
1032+ ordered_symbol_map : std .array_hash_map .String (void ),
10271033 pub fn lessThan (ctx : @This (), a_index : usize , b_index : usize ) bool {
10281034 const a_name = ctx .names [a_index ];
10291035 const b_name = ctx .names [b_index ];
1030- return symbol_map . getIndex (a_name ).? < symbol_map .getIndex (b_name ).? ;
1036+ return ctx . ordered_symbol_map . getIndex (a_name ).? < ctx . ordered_symbol_map .getIndex (b_name ).? ;
10311037 }
1032- }{ .names = original_symbol_names .keys () });
1038+ }{ .names = original_symbol_names .keys (), . ordered_symbol_map = ordered_symbol_map });
10331039
10341040 try renderer .w .writeAll (
10351041 \\/// A flat namespace that aliases all LSP types under their original name from the official specification.
0 commit comments