Class
ScriptEditorService
NotCreatableServiceNotReplicated
This service is used for interacting with ScriptDocument instances.
This service is used for interacting with ScriptDocument instances. It
provides methods to open, find, and list script documents that represent
scripts currently open in the Studio
Script Editor. It also enables plugins to
register custom callbacks for autocomplete and script analysis, and fires
events when script documents are opened, closed, or changed.
This service is only available in Studio plugins and the command bar (Plugin security level).
Methods 9#
| DeregisterAutocompleteCallback | Removes a previously registered callback with the name name.PluginSecurity security |
| DeregisterScriptAnalysisCallback | Removes a previously registered callback with the name name.PluginSecurity security |
| FindScriptDocument | Returns the open ScriptDocument corresponding to the given
LuaSourceContainer, or nil if the given script is not open.PluginSecurity security |
| GetEditorSource | Returns the edit-time source for the given script.PluginSecurity security |
| GetScriptDocuments | Returns an array of the currently open script documents, including the command bar.PluginSecurity security |
| OpenScriptDocumentAsync | Requests that a Script Editor open the specified script. Returns (true, nil) if the request succeeds. Returns (false, string) if the request fails, with a string that describes the problem.PluginSecurity securityYields |
| RegisterAutocompleteCallback | Registers an autocomplete callback callbackFunction named name with
priority priority.PluginSecurity security |
| RegisterScriptAnalysisCallback | Registers a Script Analysis callback callbackFunction named name with
priority.PluginSecurity security |
| UpdateSourceAsync | Generates new content from the old script and updates the script editor if
it's open, or the Script instance if the script editor is closed.PluginSecurity securityYields |
DeregisterAutocompleteCallback(name: string): ()#
PluginSecurity security
Removes a previously registered autocomplete callback with the name
name. The callback must have been registered with
ScriptEditorService:RegisterAutocompleteCallback(). Throws an
error if no callback with the given name is currently registered.
| Name | Type | Default | Description |
|---|---|---|---|
name | string | The identifier that was used when registering the callback with
ScriptEditorService:RegisterAutocompleteCallback(). |
Returns
()
DeregisterScriptAnalysisCallback(name: string): ()#
PluginSecurity security
Removes a previously registered Script Analysis callback with the name
name. The callback must have been registered with
ScriptEditorService:RegisterScriptAnalysisCallback(). Throws an
error if no callback with the given name is currently registered.
After the callback is removed, Script Analysis automatically reruns on all open scripts to update diagnostics.
| Name | Type | Default | Description |
|---|---|---|---|
name | string | The identifier that was used when registering the callback with
ScriptEditorService:RegisterScriptAnalysisCallback(). |
Returns
()
FindScriptDocument(script: LuaSourceContainer): ScriptDocument#
PluginSecurity security
Returns the open ScriptDocument corresponding to the given
LuaSourceContainer, or nil if the given script is not open.
A ScriptDocument only exists while the script has an open tab in
the Script Editor. If the script's editor tab is closed, this method
returns nil even if the script instance still exists in the DataModel.
| Name | Type | Default | Description |
|---|---|---|---|
script | LuaSourceContainer | The LuaSourceContainer (such as a Script,
LocalScript, or ModuleScript) to find the open
document for. |
Returns
ScriptDocument— The openScriptDocumentcorresponding to the given script, or nil if the script is not currently open in the Script Editor.
GetEditorSource(script: LuaSourceContainer): string#
PluginSecurity security
Returns the edit-time source for the given script.
If the script is open in the
Script Editor, this method returns the
text currently being displayed in the editor. If the script is not open in
the editor, the method returns the text that the editor would display if
it's opened. The edit-time source is not always be consistent with the
Script.Source property.
| Name | Type | Default | Description |
|---|---|---|---|
script | LuaSourceContainer | The LuaSourceContainer to retrieve the edit-time source text
for. |
Returns
string— The edit-time source text of the script as a string.
GetScriptDocuments(): List<ScriptDocument>#
PluginSecurity security
Returns an array of the currently open script documents, including the
command bar. Each entry is a ScriptDocument representing one open
editor tab. The command bar's document can be identified with
ScriptDocument:IsCommandBar() if you need to exclude it.
Returns
List<ScriptDocument>— An array ofScriptDocumentobjects representing all currently open editor tabs, including the command bar.
OpenScriptDocumentAsync(script: LuaSourceContainer, options: Dictionary = nil): Tuple#
YieldsPluginSecurity security
Requests that a Script Editor open the specified script. Returns (true, nil) if the request succeeds. Returns (false, string) if the request fails, with a string that describes the problem.
If the script is already open, this function succeeds and switches tabs to the associated editor.
| Name | Type | Default | Description |
|---|---|---|---|
script | LuaSourceContainer | The LuaSourceContainer to open in the Script Editor. | |
options | Dictionary | nil | A dictionary that supports the following options:
|
Returns
Tuple— A tuple where the first value is a boolean indicating success and the second is nil on success or a string describing the problem on failure.
RegisterAutocompleteCallback(name: string, priority: int, callbackFunction: Function): ()#
PluginSecurity security
Registers an autocomplete callback callbackFunction named name with
priority priority.
When the Script Editor invokes autocomplete, all registered autocomplete callbacks call in order of ascending priority with the autocomplete request and response. Multiple callbacks may share a priority, but then their calling order is unpredictable. Each callback is intended to return a response table with the same format as the response input table. Callbacks shouldn't yield. The first callback invoked receives the internal autocomplete's response as its response table, and subsequent callbacks receive the previous callback's output as their response table. Callbacks may either modify the passed table or return a new table of the same format.
The callbackFunction must have the following type:
(Request: table, Response: table) -> table
The Request table has the following format:
type Request = {
position: {
line: number,
character: number
},
textDocument: {
document: ScriptDocument?,
script: LuaSourceContainer?
}
}positionis the one-indexed cursor position where you are autocompleting.textDocument.documentis the openScriptDocumentyou are completing in, if it exists.textDocument.scriptis theLuaSourceContaineryou are completing in, if it exists.
If both textDocument.document and textDocument.script are present,
then they correspond to each other:
req.textDocument.document:GetScript() == req.textDocument.script
The Response table has the following format:
type Response = {
items: {
{
label: string, -- The label
kind: Enum.CompletionItemKind?,
tags: {Enum.CompletionItemTag}?,
detail: string?,
documentation: {
value: string,
}?,
overloads: number?,
learnMoreLink: string?,
codeSample: string?,
preselect: boolean?,
textEdit: {
newText: string,
insert: { start: { line: number, character: number }, ["end"]: { line: number, character: number } },
replace: { start: { line: number, character: number }, ["end"]: { line: number, character: number } },
}?
}
}
}Response.itemsis an array of the completion items. The order of this array is insignificant, and it resorts in the editor as the user types.Response.items[n].labelis the label of the item which display in the autocomplete menu.Response.items[n].kindspecifies what type of autocomplete item this is. Primarily this controls the icon given to the item in the editor. Not all kinds have a unique icon. If not specified, the editor uses the "Text" icon. Unsupported kinds default to displaying the "Property" icon.Response.items[n].tagsspecifies an array of tags describing this completion item. See theCompletionItemTagfor details on their function.Response.items[n].detailsspecifies a string describing details about the completion item. For default items, this is a string representation of their type. Note that, in order for the documentation widget to display,documentationmust be present, butdocumentation.valuemay be empty.Response.items[n].documentationspecifies the main body of the documentation in itsvaluefield.documentationis present, even if value is empty, so the documentation window displays if either details or overloads are specified.Response.items[n].overloadsspecifies the number of overloads of a function autocompletion.Response.items[n].learnMoreLinklinks to a relevant page on the creator docs. This URL must be ahttpsrequest to create.roblox.com; no other URLs display in the editor.Response.items[n].codeSamplespecifies a sample use of the completion item.documentationmust be non-empty to display this field.Response.items[n].preselectIf true, the editor sorts this completion item ahead of all others and selects it for the user by default. No effect if false or missing.Response.items[n].textEditIf present, accepting the completion applies this text edit - inserting or replacing the span between the positions start and end with newText.
If a callback returns a malformed result or encounters an error, the editor discards the modified Response table and uses the built-in autocomplete result list.
| Name | Type | Default | Description |
|---|---|---|---|
name | string | A unique identifier for this callback, used to deregister it later
with ScriptEditorService:DeregisterAutocompleteCallback(). | |
priority | int | The invocation order among registered callbacks; lower values run first. | |
callbackFunction | Function | The function invoked during autocomplete with the signature
(Request: table, Response: table) -> table. |
Returns
()
RegisterScriptAnalysisCallback(name: string, priority: int, callbackFunction: Function): ()#
PluginSecurity security
Registers a Script Analysis callback callbackFunction named name with
priority. When Script Analysis in Studio runs, all registered callbacks
call in order of ascending priority. Each callback is intended to return a
response table matching the format specified below. Callbacks should not
yield.
The request table has the following format, where script is the
LuaSourceContainer that is going to be analyzed.
type Request = {
script: LuaSourceContainer?
}The response table has the following format, where diagnostics is an
array of diagnostic tables. Each diagnostic table has the entries listed
below.
type Response = {
diagnostics: {
{
range: {
start: {
line: number,
character: number,
},
["end"]: {
line: number,
character: number,
}
},
code: string?,
message: string,
severity: Enum.Severity?,
codeDescription: { href: string }?
}
}
}rangerepresents a text range that should be highlighted by the linter, providing what line/character to start highlighting and what line/character to stop highlighting.codeis a label for the message.messageis a warning message to be displayed for the line. This will also appear on a tooltip when the user hovers their cursor over the line in the Script Editor.severityis aSeverityvalue for the diagnostics. This determines how the diagnostic is categorized in the Script Analysis tool in Studio, as well as how text is highlighted in the Script Editor.codeDescriptionlinks to a relevant page on the creator docs. This URL must be anhttpsrequest tocreate.roblox.com; no other URLs display in the editor.
| Name | Type | Default | Description |
|---|---|---|---|
name | string | A unique identifier for this callback, used to deregister it later
with ScriptEditorService:DeregisterScriptAnalysisCallback(). | |
priority | int | The invocation order among registered callbacks; lower values run first. | |
callbackFunction | Function | The function invoked during Script Analysis with the signature
(Request: table) -> table, returning a response containing
diagnostics. |
Returns
()
UpdateSourceAsync(script: LuaSourceContainer, callback: Function): ()#
YieldsPluginSecurity security
Returns the edit-time Script.Source for the given script.
This function calls the passed callback using the old contents of the script to calculate the new contents of the script.
If the script is open in the
Script Editor, then it issues a
request to the editor to update its source. The editor may reject this
update if the Script.Source property was out of date with the
user's version of the script when this function was called, in which case
the callback will be re-invoked and the attempt will be repeated.
The callback may not yield. If the callback returns nil, the operation
is cancelled. This function yields until the operation is cancelled or
succeeds.
If the script is not open in the editor, the new content updates to the script source, which is the text the editor would display if it is opened.
| Name | Type | Default | Description |
|---|---|---|---|
script | LuaSourceContainer | Script instance to be updated. | |
callback | Function | The function to return new script content. |
Returns
()
Events 3#
| TextDocumentDidChange | Fires just after a ScriptDocument changes.PluginSecurity security |
| TextDocumentDidClose | Fires just before a ScriptDocument object is destroyed, which
happens right after the script editor closes.PluginSecurity security |
| TextDocumentDidOpen | Fires just after a ScriptDocument object is created and parented
to the service, which happens right after the script editor opens.PluginSecurity security |
TextDocumentDidChange(document: ScriptDocument, changesArray: Variant)#
PluginSecurity security
Fires just after a ScriptDocument changes. The textChanged is an
array of change structures of the format:
{ range : { start : { line : number, character : number }, end : { line : number, character : number } }, text: string }
| Name | Type | Default | Description |
|---|---|---|---|
document | ScriptDocument | The ScriptDocument that changed. | |
changesArray | Variant | An array of change structures, each describing a range that was replaced and the new text. |
TextDocumentDidClose(oldDocument: ScriptDocument)#
PluginSecurity security
Fires just before a ScriptDocument object is destroyed, which
happens right after the script editor closes. After this event fires, the
ScriptDocument enters a "Closed" state, and trying to call its
methods throws an error. ScriptDocument objects aren't reusable,
even if the script editor reopens the same script.
| Name | Type | Default | Description |
|---|---|---|---|
oldDocument | ScriptDocument | The ScriptDocument that is about to be destroyed. |
TextDocumentDidOpen(newDocument: ScriptDocument)#
PluginSecurity security
Fires just after a ScriptDocument object is created and parented
to the service, which happens right after the script editor opens. The
ScriptDocument passed to the handler is fully initialized and
ready to read or modify. This event also fires for the command bar
document.
| Name | Type | Default | Description |
|---|---|---|---|
newDocument | ScriptDocument | The newly created ScriptDocument representing the opened
editor tab. |
Inherited members#
Inherited from Instance 58
Properties (10)
Archivable, archivable, Capabilities, IsInSandbox, Name, Parent, PredictionMode, RobloxLocked, Sandboxed, UniqueId
Methods (39)
AddTag, children, ClearAllChildren, Clone, clone, Destroy, destroy, FindFirstAncestor, FindFirstAncestorOfClass, FindFirstAncestorWhichIsA, FindFirstChild, findFirstChild, FindFirstChildOfClass, FindFirstChildWhichIsA, FindFirstDescendant, GetActor, GetAttribute, GetAttributeChangedSignal, GetAttributes, GetChildren, getChildren, GetDebugId, GetDescendants, GetFullName, GetStyled, GetStyledPropertyChangedSignal, GetTags, HasTag, IsAncestorOf, IsDescendantOf, isDescendantOf, IsPropertyModified, QueryDescendants, Remove, remove, RemoveTag, ResetPropertyToDefault, SetAttribute, WaitForChild