Script Editor: Luau-Powered Autocomplete & Language Features Beta

When commenting out a line of code that indents the next line, indentation after that will be wrong

Arrow functions in the future ?

I’ve discovered something rather tedious, when typing the word else in, ElapsedTime pops up, and when return is pressed, it replaces else.

Also, ElapsedTime doesn’t include “else” other than removing “ap”(ElsedTime), is that normal?

4 Likes

I’ve came across another really annoying “bug”. It always suggest me repeat on first place rather than return and it is slowing my workflow a lot.

5 Likes

Yes, if the cast doesn’t have a type error. For example, if ‘a’ is an Instance, ‘(a :: Script).’ will show Script properties.

No, but our team is working on methods to resolve that. Simple cases are simple, but we need to cover some tricky ones with user defined functions if they happen to have overloads or are generic.

Yes, we do have long term plans for that, but it won’t come immediately.

Yes, they even behave like generic functions in some contexts right now (calling them for example).

We might add generics where appropriate, like for RBXScriptSignal and Instance:Clone.

That function signature should be better now (without magic numbers like 360).

childAdded should display as deprecated already.
getChildren and remove aren’t right now, thank you for letting us know, we’ll add this as a bug.

Can you provide a small standalone example?

No.
I can see what the problem is, we are going to address that.

No.

This is a known issue, no ETA on the fix, but we have people working to resolve this.

Should be possible, we’ll look into it.

9 Likes

We do not plan to add arrow functions.
Previous discussion on this topic: [Luau] Add arrow/lambda functions - #18 by WheretIB

2 Likes

So far I’ve been testing out this feature and I like it a lot but I have suggestion, when writing a global like game it will also show it’s deprecated equivalent
image
It would be better in my opinion to make it show only when you try to write the deprecated equivalent
image
And autocomplete with the correct one.

2 Likes

This is awesome!

I’ve been reading the Luau wiki, but can’t find a way to have one type inherit stuff from another type. I know pre-baked Roblox types seem to already have this (ex: Part extends BasePart, extends Instance). Is this already a thing? If not, is it planned?

EDIT: Looks like you can use the “&” operator to do this! (see linked post if ur curious)

4 Likes

The script editor has always felt lacking so this is a pretty sweet update!

1 Like

My goodness yesss, it’s beginning to be more like visual studio or other code editors that have this smart auto-complete, makes things so much easier.

1 Like

Love it, it’s perfe… Expect for one main issue.
Take a look at the video below, I’m so used by memory just typing out “else” and typing enter, now with this autocomplete else turns to ElapsedTime() if I don’t press space! I don’t see how, as else isn’t in Elapsed other than the first 2 letters. If you could fix this, it would be great!

15 Likes

Was just going to make a post about this on here. Having the same issue.

1 Like

Because you are using Absolute indentation rule, ScriptEditor will suggest indentation respects to whole code structure.
You can do document formatting to make it clear.

1 Like

Not only do I think the giant fonts is a downgrade, but it also seems like the auto-complete is super inaccurate.

image
I rarely reference ReplicatedFirst… ever.


This is ridiculous… You can’t connect to anything other than a function. Why isn’t it the first result?

Yet another example, here:

image
Here, I have to press the return key twice because auto complete is still active, despite there only being 1 result and I’ve already typed it…?

It also feels like some recent updates have made my script editor much slower. My main client script is 4,000+ lines long. It’s clean, it’s organised and I was able to write to it efficiently. Now, every keystroke feels much more delayed than it ever has been!

10 Likes

Ok. Ok. Ok.

I just tried out the new thing by enrolling into the beta.
The text size is honestly… Looks rubbish because its too big.
And some other bugs that salcret told in the reply above me.

Otherwise ok. Please reduce the text size of the auto-complete as it looks disgustingly big and bad.

1 Like

This is instantly a win for me just because I no longer have to type :WaitForChild() everytime now. THANK YOU DEVS!!!

Although, it does seem buggy still. For instance, it was able to autocomplete almost everything on my UT variable, but it stopped working once I got passed “ClayLibNMS”:

Also, here’s a picture of me trying to find the Enums/Properties for my utility script:

3 Likes

You most defiently don’t need that many waitforchild no matter what

3 Likes

Any chance you can make this UI wrap or take up less space? Right now the autocomplete fills my whole 2K monitor (with 125% scaling) farily quickly:

Sidenote… I’m glad this takes in information on untyped (i.e. --!nocheck) modules, as I’ve been relying a lot on binding information with the old system. I got surprisingly further with the luau autocomplete on my no-check testez alternative than the older binding-based autocomplete!

I’ve been skeptical about enabling these luau-powered features (specifically the Alt+F find replacement) because it actually tends to provide less suggestions with typed information than with binding-based information. It looks like this is not the case for autocomplete?

1 Like

Do you have examples of Luau powered features returning fewer (or otherwise inferior) results compared to their legacy versions?

The Script Function Filter (Alt+F) was subject to a few deliberate behavior changes. Most notably, it was changed to not suggest functions which are not accessible from the current script. Previously, it iterated through every script in the place to populate the list.

Generally speaking we expect Luau Autocomplete (and the other Luau powered features) to provide strictly more suggestions, in more contexts (except perhaps where old suggestions were incorrect).

Try replacing each %s in the format string with %d.

%s is for strings and %d is for integers. It works at runtime because string.format automatically casts numbers to strings.

Speaking of, I also found a bug when you made that snippet: ("string"):format's type checker skips the first argument:

W000: (2,47) Type 'number' could not be converted into 'string'

Notice how 1 doesn’t have the red underline, but 2 does! This doesn’t happen with a normal string.format call.