[PLUGIN] SimpleComplete | Feature-rich, bloatless and updated autocomplete plugin

SimpleComplete is a relatively simple plugin which allows you to add docstrings to variables, table members and functions, add tags/attributes for your docstrings, as well as have shorthands for importing any of Roblox’s services.

How To Enable

The SimpleComplete plugin has 2 buttons which can be used to toggle on/off its features:

image

For example, if you wish to enable just the docstrings, simply click it until it is dark.
To disable it, just click it again until it is bright

Docstring Declaration Syntax

To declare a docstring for functions, it is as simple as putting a comment ontop of it, like this:
image

This functionality already exists in vanilla Studio, however SimpleComplete does allow you to use all the tags and attributes within function docstrings.

However, for variables and table members, you must declare docstrings like this, with the <docstring> tag:
image
image
Just putting a comment ontop won’t work.

Docstring Tags

Docstring tags add certain functionality to docstrings without needing any other value.

  1. @deprecated

    • This tag simply crosses out the name for the item and hides it unless specifically searched for.
      image

  2. @client_only

    • This tag makes it so that if the item is being accessed from somewhere other than a LocalScript or a Client RunContext script, it will not register as an autocomplete choice.

  3. @server_only

    • This tag makes it so that if the item is being accessed from somewhere other than a non-Client RunContext Script, it will not register as an autocomplete choice.

  4. @plugin_only

    • This tag makes it so that if the item is being accessed from somewhere other than a script with Plugin permissions, it will not register as an autocomplete choice.

  5. @cmd_line_only

    • This tag makes it so that if the item is being accessed from somewhere other than the command line, it will not register as an autocomplete choice.

  6. @corescript_only

    • This tag makes it so that if the item is being accessed from somewhere other than a CoreScript, it will not register as an autocomplete choice.

  7. @cursor_after_parens

    • This tag will add () after the autocompleted variable, and put the cursor after the ).

  8. @cursor_in_parens

    • This tag will add () after the autocompleted variable, and put the cursor after the (.

Docstring Attributes & Syntax

There is a special syntax for docstring values.

  1. Strings

    • Attribute strings are declared via $…$ for single line, and $$…$$ for multiline.
      Example:


  2. Booleans

    • Attribute booleans are declared the same way as strings, but with $true$ or $false$ as the value.

  3. Numbers

    • Attribute numbers are declared the same way as strings, but with $n$ as the value.
      Example:

Docstring attributes add certain functionality to docstrings using a provided value.

  1. @override_docstring #string

    • This attribute sets the docstring to the string.

  2. @code_sample #string

    • This attribute sets the code sample part of the docstring to the string.

  3. @learn_more #string

    • This attribute sets the “Open Documentation” link of the docstring to the specified url string.
      Note that if the url is not Roblox’s own documentation website, it will not display.

  4. @preselect #bool

    • I have no idea what this does, but I added it anyway :V

  5. @detail #string

  6. @num_overloads #number

    • Sets the #overloads part of the docstring to the number.

  7. @kind #string

    • Sets the Enum.CompletionItemKind of the item to the string.
      Example:
      image

Service Shorthands

Service shorthands can be used to quickly import Roblox services:

image

To change the “shorthand symbol”, simply type --?service-shorthand and then the symbol you wish to use, like so:

image

Note that the symbol currently cannot be multicharacter

Module & Service Auto Imports

SimpleComplete offers a convenient system of auto-importing services and modules from tagged ancestors/ancestors list

If you select an autocomplete suggestion for an auto-import (these typically have a snippet/enum icons), the name will be filled out on your current line, and the variable will be defined somewhere on the top.

Commands

The command line can be used to set/get certain settings of SimpleComplete
Syntax:
--sc #COMMAND_NAME: #SETTING_NAME; #SETTING_VALUE?

Table of setting names, default values and possible values:

-ModuleAncestors = "" : any-string
-ServiceShorthand = "!" : any-string
-ModuleAncestorTag = "SC_Ancestor" : any-string
-FindShortestPath = "true" : "true" | "false"
-ImportSort = "off" : "off" | "descending" | "ascending"
-ModuleSearchMode = "descendants" : "descendants" | "children"

Example:

Get SimpleComplete here! →

If you wanna donate to me for my work, feel free to do so here! →

Any donations mean alot to me and means I can make more stuff :slight_smile:

22 Likes

Oops forgot to public it, it’s public now

2 Likes

Update 1:

2 Likes

I need a better tutorial. The currwnt tutorial flies off my head

1 Like

Essentially, there are 2 main things inside the docstrings: Tags and Attributes

These work similarly to Instance tags and attributes, tags are simply names and attributes have both a name and a value.

For example, <deprecated> is a tag, while <kind>: $Function$ is an attribute ($…$ is used to define strings)
These can be in any order inside the docstring, for example:

image

But for defining variable/table member docstrings, you need a special <docstring> tag at the start of the comment, like this:

--[[<docstring>

]]

on the top of it. This is as to not conflict with any existing comments

1 Like

This makes alot more sense! Thx ill use it now

2 Likes

Update 2:

  • Added service auto-imports

    Screenshot 2025-03-24 113040
    It does not work when writing inside strings/comments (multiline and single line) and also does not work when you have already defined the service names as their own variables
2 Likes

Update 3:

  • Service auto imports no longer show up when defining a local variable and when doing a table member access via . or :
  • Docstrings & import utilities are now enabled by default
2 Likes

Update 4:

  • Docstrings now are completely reliable, same for service auto imports and shorthands:

    The next update will be module autoimports!
1 Like

Update 5:

  • Added module auto imports, with the syntax for determining what ancestors to check being the --?module-ancestors {..paths...} directive, like so:

Note that all descendants of the ancestor which are modulescripts will be considered.

1 Like

Patch 5.1:

  • Fixed module imports showing up after a service shorthand
2 Likes

Update 6:

  • Fixed module and service imports going in random order, now it goes directives → services → modules
  • Fixed service suggestions popping up in unwanted places such as string patterns or directives
  • Fixed a very big performance issue with auto imports, now it runs very smoothly even for relatively big scripts
2 Likes

Patch 6.1:

1 Like

Patch 6.2:

  • Made it so that module path refreshes are done incrementally instead of clearing the whole table and rebuilding it, this considerably improved performance for module auto imports

  • Improved the new isInNonImportContext function to return true when inside multiline comments/strings (Also works for scoped multiline comments)

1 Like

Update 7:

  • Added “script” and “.Parent” as usable within the --?module-ancestors {} directive (for example, you can now do --?module-ancestors {script.Parent})

  • Service imports no longer appear in function parameter lists

  • --? directives are now autocompleted:

  • Directives no longer apply when used within strings

Known issues:

  • Service imports show up when defining tuple variables, e.g local a, b, c
2 Likes

Patch 7.1:

  • Service imports no longer appear in tuple variable declarations
1 Like

Patch 7.2:

  • Module results from different ancestors now combine with eachother
  • Module paths are resolved as the shortest

4 Likes

Patch 7.3:

  • Module and service imports now no longer consider statements within strings
  • Fixed relative path issue (e.g require(script.ServerScriptService.MyScript.MyModule when it should just be Script.MyModule)
  • Fixed a whole bunch of minor string pattern inconveniences
1 Like

Update 8:

  • Made it so that module auto imports now use game:GetService(name) instead of game.name when using services (if a variable has not been declared as it), but if a variable HAS been declared as the service (doesn’t matter the name, just need to be declared with game:GetService()), it’ll use that instead. (This doesn’t affect script relative paths)

  • Name sorting coming soon!

2 Likes

Patch 8.1:

  • Modules are now properly cleaned up if the module-ancestors directive has been changed/removed
1 Like