Argon - Full featured tool for Roblox development

For the past few days I was messing around with Roblox LSP’s source to integrate it with Argon. I found possible way of doing that but debugging this extension is nearly impossible because I can’ t print stuff to console.

So I decided to make some big changes to Argon itself. So first of all .argon.json will no longer be used. Instead data that has been stored in this file will now be stored in default.project.json, which is a Rojo file. So now by doing that almost every tooling that works on Rojo will work on Argon too.

Another change will be file naming. Instance names will no longer have classs inside it’s name. That’s necessary to make Roblox LSP and other tooling work with Argon. It will obviously break whole Argon project, tho to fix that you will simply have to port from Roblox again. Since Argon now supports properties, the class of an instance will be stored in the .properties.json file.

Last change will be 100% optional. It will be only required if you are interested in tooling. So the .source files will be named init and .properties files will be named meta. You will be able to change this setting inside VSC extension settings.

2 Likes

Probably the best idea (I think), because we have many-many packages which mostly follows the rojo formatting, so fixing it to work with Argon would be a pain. So, I probably like this idea of making it at least kind of similar to Rojo to make it support Roblox LSP and many other things. Good idea!

Did some testing and as of 0.5 it doesn’t seem to jump to the correct line in VS Code sadly :frowning:

Nope. At the moment, it jumps to the very first line so you would have to go to that line manually unfortunately. You can go to the line either by scrolling (I don’t think I needed to remind you of that) or by opening up the command palette and replacing the > by : and then the line number (if the script’s too big).

Forgot to mention that in the update but unfortunately it’s not possible. That’s because LogService does not provide enough data - it only provides message, message type and timestamp.

If you know walkaround for that problem let me know and I will add this to Argon!

THIS VERSION OF ARGON WILL NOT WORK WITH PROJECTS GENERATED WITH PREVIOUS VERSIONS!*

Argon 0.6.0 - important update!

Changes:

  • Added support for external tooling
  • Roblox LSP is now natively supported**
  • Clicking on output prints/errors will now get you to the right line in VSC, only when open in editor is enabled (requested by Plasmanode)
  • Added compatibility mode which replaces “.source” files with “init” and .properties files with “init.meta”
  • Instance classes are now stored in .properties.json only when property syncing option is enabled
  • Replaced .argon.json with default.project.json (required to for Roblox LSP and other tooling)
  • Removed update classes command and auto update option - no real use cases (still available in jsonGenerator.js)
  • Auto Studio launch now checks if Roblox is already running
  • Argon now utilizes new Roblox ScriptEditorService API
  • Modified existing extension options (auto setup)
  • Tons of bug fixes and code optimizations
  • Redesigned quick pick menu

Demos:

Roblox LSP support:

Opening scripts from ouput:

New class saving system:

New, simpler UI:

image

*In order to fix your project you have to delete literally everything from VSC and port from Roblox again.

**Currently .source files are not working, there is nothing I can do about it because my it requires to get my pull request merged. For now if you really need LSP support inside .source files you should enable “Compatibility Mode” inside Argon settings.

PS: @plasma_node I’ve manged to add what you wanted using ScriptDocuments. Hope you like it. :wink:

2 Likes

I think this is by far the best update for Argon, keep it up!

Bugs:

  1. It… does not.
  2. Porting folders with no children from VSC to roblox studio just keeps loading.

Edit: After some time it gave this error: Argon: HttpError: ConnectFail (ui4)
Edit2: I was connected but for some reason it disconnected, I connected again and it fixed it.
Edit3: Okay, found out that when you try to port blank folders from VSC to roblox, it will load for some time and give a warning (stated above) and there will be a message in the status bar of VSC on the left saying something like: This extension closed unexpectedly or something like that and it disconnects. Also, you cannot open the argon quick pick menu while it is porting.

1 Like

Awesome, thanks!

one thing, I notice that disabled scripts become enabled when sync from VS Code → Roblox

Haven’t read about what you are doing for properties, but is it possible there could be a separate way internally to store the state of a script being enabled or disabled?

There is —disable flag that you should put on the very begging of your script. It should be synced and ported in both sides. If it’s not working let me know and I will fix this with other bugs today!

Got it, but sometimes I use the .Enabled setting for testing purposes.

Also I suggest you make the plugin window have an overlay (that covers all screens perhaps?) which displays game.Name so we can tell what studio session we are syncing to.

It’s only really an issue if the plugin widget is detached and floating around as its own window but would be pretty useful, since if I open another session of studio it just overlays a new copy right over the old one and I have accidentially synced the wrong way before.

image

Perhaps display it up here? Ie

Argon - SomeFile.rbxl

I think that you can already achieve that:


Tell me if I’m wrong.

Great suggestion, I will add in the exact same way as you described. But for games that are uploaded to Roblox I will use MarketPlaceService to get game name because game.Name return useless names such as “Place1”.

1 Like

Argon 0.6.1

Changes:

  • Added support for instance references (property type)
  • Added dynamic plugin and extension title (displays current project), suggested by Plasmanode
  • Added new debugging menu and removed debugging mode setting
  • You can now play or run playtest with different keybinds (F5 and F8) in VSC
  • Fixed BrickColor property not porting from VSC to Studio

Dynamic titles:

New debugging menu:

Hello,

I’d like to say that I’m not a scripter myself, but I was checking out Rojo and Argon, and I seemed to think this one would be better in my opinion.

Why is that?

I see that Argon is very simple and is easier to sync code. And the systems looks a bit cleaner.

NOTE: THIS IS JUST AFTER UPDATING THE PLUGINS RECENTLY, WORKED 1-2 DAYS AGO

Either I’m having issues on my end, or the plugin has stopped adding classnames to the end of folder names in VSCode, it means that when exporting and importing it just converts things to folders…

Example:

Have RemoteEvent called “event” in replicatedStorage
Convert to VSCode

Current Output:
Folder with name “event” in replicatedStorage dir

Expected:
Folder with name “event.RemoteEvent” in replicatedStorage dir

Convert back to roblox

Current Output:
Folder with name “event” in replicatedStorage

Expected:
RemoteEvent with name “event” in replicatedStorage

This change was required to make Argon work with external tooling such as Roblox LSP

RobloxLSP was working before, it even was picking up on the types, now it’s just classing things as folders…

Folders are just default classes of objects. If you want to sync classes you have to enable property syncing. And no, Roblox LSP was not working properly e.g. if you had script inside non folder instance.

I have property syncing enabled and yet it’s still not keepin the classes

  • Did you re-generate project?
  • Did you update both Roblox plugin and VSC extension?

I think that properties are not synced in only code mode but I’m not sure. If they are not I will change that in the next update.

  • Made a new project just a few hours ago
  • Yes, both are up-to-date

It’s just a pain if you need to add a .properties.json file to everything and then it means that you don’t get lsp autocomplete for the specific class, so the update just made it a pain to do one of the things that was actually useful-

But oh well…