[v.17.6] SimpleComplete | General scripting plugin

SimpleCompleteU15.rbxmx (131.9 KB) | Marketplace (BROKEN) | Donate 80 Robux

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.

Commands

Commands

The command bar can be used to set/get certain settings of SimpleComplete.

Syntax:
--sc #COMMAND_NAME: #SETTING_NAME; #SETTING_VALUE?

To execute a command, simply put it inside the command bar and press enter. A message should appear in output to indicate if it was successful or if it failed.

There are a variety of commands for SimpleComplete, heres a list of all of them:

Command Name Args and Format Description
setlocal: settingName; value Sets the local (current place) value for the setting.
getlocal: settingName Gets a local value for the setting.
setglobal: settingName; value Sets the global (all places/default) value for the setting.
getglobal: settingName Gets a global value for the setting.
reset: local | global Sets your local settings to nil so you are using the global settings.
exportsettings: local | global Returns a command you can call to set your settings to the current global/local settings.
getsettings: local | global Returns your global/local settings in table format for visualization.

image

You can also chain command calls by wrapping them in parentheses, like so:
image

Very effichient!!!

Table of setting names, default values and possible values:

#define Casing as "PascalCase" | "CamelCase" | "SnakeCase" | "LoudSnakeCase" | "UpperCase" | "FlatCase"

Setting Name Default Value Possible Values Description
ModuleAncestors " " string-tuple A list of instance paths (relative to game or script) which will be searched for modules for auto import.
ImportShorthand “!” string | “nil” A symbol which when typed in will give all auto import suggestions
FindShortestPath “true” “true” | “false” A boolean to indicate wether or not the plugin should find the shortest path (either game or script relative) when parsing module import paths
ImportSort “off” “off” | “descending” | “ascending” Indicates how auto import definitions should be sorted
ModuleSearchMode “descendants” “descendants” | “children” Indicates how module ancestors (defined by ModuleAncestors and AncestorIncludeTags) will be searched for modules
SnippetModulePath “” string | “nil” Determines the path for your module which contains your snippets.
SnippetShorthand “\” string | “nil” A symbol which when typed in will give all snippet suggestions
ImportTransformModule “PascalCase” Casing Determines how module auto-imports will be cased
ImportTransformService “PascalCase” Casing Determines how service auto-imports will be cased
ModuleIncludeTags “Server, Client” string-tuple A list of tags which are applied to ModuleScripts. If the currently open document has the same tag as the module, it will be auto-imported.
TagExcludeBehaviour “otherGroups” “otherGroups” | “all” | “none” WIP

Gallery:

Docstrings

Docstrings

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

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
  1. @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.
  1. @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.
  1. @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.
  1. @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.
  1. @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.
  1. @cursor_after_parens
  • This tag will add () after the autocompleted variable, and put the cursor after the ).
  1. @cursor_in_parens
  • This tag will add () after the autocompleted variable, and put the cursor after the (.
Docstring Syntax & Attributes

Docstring Syntax & Attributes

There is a special syntax for docstring values.

  1. Strings
  • Attribute strings are declared via $…$.
    Example:


2. Booleans

  • Attribute booleans are declared the same way as strings, but with $true$ or $false$ as the value.
  1. 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.
  1. @code_sample #string
  • This attribute sets the code sample part of the docstring to the string.
  1. @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.
  1. @preselect #bool
  • I have no idea what this does, but I added it anyway :V
  1. @detail #string
  • Sets the detail part of the docstring to the string.
    Example:


6. @num_overloads #number

  • Sets the #overloads part of the docstring to the number.
  1. @kind #string
  • Sets the Enum.CompletionItemKind of the item to the string.
    Example:
    image
Auto-Imports

Auto-Imports

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

To get access to auto imports, you must first set a shorthand for it. It is ! by default, however can be configured via the --?import-shorthand (symbol_here) directive or the plugin setting ImportShorthand. Its value can be set to nil if you want it to appear with no prefix symbol

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.
image

Docstrings

There are also module auto imports, which are defined by several settings.

The first are ModuleAncestors and ModuleAncestorTag, both determine what ancestors to search thru for modules.

ModuleAncestors has a directive form, --?module-ancestors {...paths}, and a plugin setting, ModuleAncestors

ModuleAncestorTag is a plugin setting, and determines the tag for items which will be searched for modules.

The last setting is ModuleSearchMode which determines if searching will be done recursively (descendants) or shallowly (children)

Snippets

Snippets

Snippets are one of the cooler features of SimpleComplete, which allow you to define custom blocks of text which you can fill out in just 1 click.

Screenshot 2025-04-08 212321

In order to define your snippets, you must first create a ModuleScript to store them (as seen above), then set your SnippetsModulePath setting to its path, like so:
image

And then the snippets can be accessed via a shorthand symbol, which you can configure via the --?snippet-shorthand (symbol_here) directive or via the plugin setting SnippetShorthand
Like import shorthands, this can also be set to nil.

Example:

Happy coding!

Was this resource useful for you?
  • Yes
  • I haven’t tried
  • No

0 voters

51 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

3 Likes

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
3 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