So now that we have PluginGuis I finally took the time to make something I’ve always wanted, a script finder. The explorer filter was an amazing addition but it wasn’t ideal to filter out only scripts. So I made my own.
I present to you, the script explorer. Pretty much a “go to file / script” from other IDEs. It’s bare bones and to the point, and does exactly what it says. it finds scripts.
Features:
Predictive search box. It’ll also match casing as you type to the “best guess” for the script you’re trying to find
Script type filtering so you can only look for modules, local scripts, scripts, or all of them.
Selection mirroring with the normal explorer
Single click to select, double click to open the script
My best recreation of the default studio UI so the plugin feels at home
To Come:
Multi selection from the plugin (when I can reliably get keyboard input)
Hotkey for focusing the textbox (when I can reliably get keyboard input)
Send me feedback, send me bugs, send me feature ideas. I’d love to hear it all.
This is pretty sweet! I have plenty of nested scripts, and often I know the one I want, it’s just hard to find where it is.
One suggestion: when you click on the script, you should open the script in addition to locating it in the explorer window. EDIT: just realized it already does this. I was struggling to get it to work earlier, but I just tried it now, and it works? Anyway, gg.
Now it makes me long for custom studio shortcuts, because this is something that would be nice to pull up with a shortcut while I’m already in a script.
This plugin is causing problems when parenting an object to the game. Normally, parenting a model takes something like 0.008 seconds. When I enable the Script Explorer, parenting takes around 0.4 seconds. This is, obviously, really bad. The whole window freezes while the object gets parented to the game.
Here’s the code I used to test this. You can clone anything, but the more objects it has the longer it will take:
local base = workspace.Ladder:Clone() local t = tick() base.Parent = game.ServerStorage print(tick() - t)
I’m guessing that you’re doing some heavy work on game.DescendantAdded. I’ve had to disable this plugin for now.
It would be awesome if you could find a way to do this that doesn’t require doing work any time a descendant is added. Doing work on descendant added can affect the performance of the whole game which can make detecting and debugging performance issues more difficult. It would be perfect if this only did anything while the user interacted with it.
I understand that searching through the whole game tree takes time, and that it’s not feasible to do that every time the user enters text.
Perhaps instead the module could keep a saved lookup, then does a slow update of the lookup by searching the game tree when the user enters text. This means that a result might show up a second late while the plugin searches the game tree, but that is a ton better than affecting the game’s performance when I’m not using it. The plugin can listen for game tree updates while search text is entered for live updates, then stop listening for changes when the search text is cleared.
For some context, I was working on a plugin to show local studio previews of objects that only appear in running games. Copying all of the preview objects into the game took over 80 seconds – and froze the window for 80 seconds – while Script Explorer was active. After disabling Script Explorer, it takes only 0.1 seconds.
I’ve been having scaling issues with my larger projects too. I’ve got a few ideas to fix the load on the DescendantAdded load that I’ll be working on soon.
I’ll post here again when I get it updated and more stable.
Sweet! Though it doesn’t appear to work if your current focus is on a script window (I just continue typing in the script). Is that just a deficiency in roblox?
Will this plugin have dark theme support anytime soon, implementing the new API that lets you detect which theme studio is under? Or will I have to manually edit the UI myself?