@janitor
@janitor is not a second language. It is the field janitor on the receiver: @janitor → self.janitor. You still declare Sweep sweep; (or Janitor janitor;) on the struct and assign it in init.
Header:
#pragma once#include <clpp/libs/sweep.clh>
struct LeaderstatsServer { Janitor janitor; void PlayerEntered(Player player);};void LeaderstatsServer::PlayerEntered(Player player) { guard (player != null) else { warn("Invalid player"); return; } Folder folder = new Folder(player); folder.Name = "leaderstats"; @janitor.Add(folder, "Destroy", player.Name);}function LeaderstatsServer:PlayerEntered(player: Player) if not player then warn("Invalid player") return end local folder = Instance.new("Folder") folder.Parent = player folder.Name = "leaderstats" self.janitor:Add(folder, "Destroy", player.Name)endLibrary calls use . (instance method), same as Roblox: sweep.Add, sweep.Cleanup, sweep.LinkToInstance. Full API: Libraries → Sweep.