ScriptEditorService
*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.
Dieser Dienst wird verwendet, um mit ScriptDocument Instanzen zu interagieren.
Zusammenfassung
Methoden
Entfernt einen früher registrierten Rückruf mit dem Namen name.
Entfernt einen früher registrierten Rückruf mit dem Namen name.
Gibt das offene ScriptDocument zurück, das der angegebene LuaSourceContainer entspricht, oder null, wenn das gegebene Skript nicht geöffnet ist.
Gibt die Bearbeitungszeit-Quelle für das gegebene Skript, das. PL: die Skriptszurück.
Kehrt eine Reihe der derzeit offenen Skript-Dokumente zurück, einschließlich der Befehlsleiste.
Registriert einen Autocomplete-Callback callbackFunction mit dem Namen name mit einer Priorität von priority.
Registriert einen Skript-Analysen-Callback callbackFunction mit dem Namen name mit priority .
Anfragen, dass ein Skript-Editor das angegebene Skript, das. PL: die Skriptsöffnet. Gibt (wahr, null) zurück, wenn die Anfrage erfolgreich ist. Gibt (falsch, String) zurück, wenn die Anfrage mit einem String, der das Problem beschreibt, fehlschlägt.
Erzeugt neuen Inhalt aus dem alten Skript und aktualisiert den Skript-Editor, wenn er geöffnet ist, oder die Script Instanz, wenn der Skript-Editor geschlossen ist.
Ereignisse
Feuert nur nach einem ScriptDocument Änderungen.
Feuert nur, wenn ein ScriptDocument Objekt zerstört wird, was kurz nach dem Schließen des Skripteditors geschieht.
Feuert ScriptDocument Objekte, die der Dienst erstellt und der übergeordneten zu dem Dienst sind, direkt nach dem Öffnen des Skripteditors.
Eigenschaften
Methoden
DeregisterAutocompleteCallback
Entfernt einen früher registrierten Rückruf mit dem Namen name.
Parameter
Rückgaben
Code-Beispiele
game.ScriptEditorService:DeregisterAutocompleteCallback("foo")
DeregisterScriptAnalysisCallback
Entfernt einen früher registrierten Rückruf mit dem Namen name.
Parameter
Rückgaben
Code-Beispiele
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService:DeregisterScriptAnalysisCallback("foo")
FindScriptDocument
Gibt das offene ScriptDocument zurück, das der angegebene LuaSourceContainer entspricht, oder null, wenn das gegebene Skript nicht geöffnet ist.
Parameter
Rückgaben
Code-Beispiele
--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
local documents = ScriptEditorService:GetScriptDocuments()
local scriptDocument
-- Find the first open script document
for _, document in documents do
-- The Command Bar can't be closed, so don't select it
if not document:IsCommandBar() then
scriptDocument = document
break
end
end
if scriptDocument then
local success, err = scriptDocument:CloseAsync()
if success then
print(`Closed {scriptDocument.Name}`)
else
warn(`Failed to close {scriptDocument.Name} because: {err}`)
end
else
print("No open scripts")
end
--!nocheck
--[[
To run:
1. Ensure Output view is open
2. Run the below code in the Command Bar
3. Scroll up and down in the opened Script window
Print statements from the ViewportChanged event will appear in the Output
]]
local Workspace = game:GetService("Workspace")
local ScriptEditorService = game:GetService("ScriptEditorService")
-- Create text that spans many lines
local dummyText = string.rep("-- Dummy Text\n", 60)
-- Create a script containing the dummy text and open it
local otherScript = Instance.new("Script")
otherScript.Source = dummyText
otherScript.Parent = Workspace
local success, err = ScriptEditorService:OpenScriptDocumentAsync(otherScript)
if not success then
warn(`Failed to open script because: {err}`)
return
end
-- Get a reference to the opened script
local scriptDocument = ScriptEditorService:FindScriptDocument(otherScript)
local function onViewportChanged(startLine: number, endLine: number)
print(`Script Viewport Changed - startLine: {startLine}, endLine: {endLine}`)
end
-- Connect the ViewportChanged event to the function above that prints the start and end line of the updated viewport
scriptDocument.ViewportChanged:Connect(onViewportChanged)
GetEditorSource
Gibt die Bearbeitungszeit-Quelle für das gegebene Skript, das. PL: die Skriptszurück.
Wenn der Skript-Editor geöffnet ist, gibt diese Methode den Text zurück, der derzeit im Editor angezeigt wird. Wenn der Skript-Editor nicht geöffnet ist, gibt die Methode den Text zurück, der der Editor anzeigen würde, wenn er geöffnet wäre. Die Quelle der Bearbeitungszeit ist nicht immer mit der Class.Script.Source Eigenschaftenein致.
Parameter
Rückgaben
GetScriptDocuments
Kehrt eine Reihe der derzeit offenen Skript-Dokumente zurück, einschließlich der Befehlsleiste.
Rückgaben
Code-Beispiele
--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
local scriptDocuments = ScriptEditorService:GetScriptDocuments()
for _, scriptDocument in scriptDocuments do
-- Prints the name of each script
if not scriptDocument:IsCommandBar() then
print(scriptDocument.Name)
end
end
RegisterAutocompleteCallback
Registriert einen Autocomplete-Callback callbackFunction mit dem Namen name mit einer Priorität von priority.
Wenn der Skript-Editor autocomplete aufruft, werden alle registrierten autocompleten Rückrufe in der Reihenfolge der steigenden Priorität mit der autocompleten-Anfrage und der Antwort aufgerufen. Mehrere Rückrufe können eine Priorität teilen, aber dann ist ihr Aufruf顺序 unvorhersehbar. Jeder Rückruf wird mit der Antwort-Tab mit d
Die callbackFunction muss die folgende eingebenhaben: (Request: table, Response: table) -> table
Die Request-Tabelle hat die folgende Formatierung:
type Request = {position: {line: number,character: number},textDocument: {document: ScriptDocument?,script: LuaSourceContainer?}}
- position ist die ein-indexed-cursor-position, in der sie automatisch abgeschlossen werden.
- textDocument.document ist das offene ScriptDocument, das Sie abschließen, wenn es vorhanden ist.
- textDocument.script ist der LuaSourceContainer Sie sind in, wenn es existiert.
Wenn beide textDocument.document und textDocument.script vorhanden sind, dann entsprechen sie einander: req.textDocument.document:GetScript() == req.textDocument.script
Die Antwort-Tabelle hat die folgende Formatierung:
type Response = {items: {{label: string, -- The labelkind: Enum.CompletionItemKind?,tags: {Enum.CompletionItemTag}?,detail: string?,documentation: {value: string,}?,overloads: number?,learnMoreLink: string?,codeSample: string?,preselect: boolean?,textEdit: {newText: string,replace: { start: { line: number, character: number }, ["end"]: { line: number, character: number } },}?}}}
- Response.items ist ein Array der Fertigungs-Items. Die Reihenfolge dieses Arrays ist unbedeutend und wird im Editor als Benutzertypen zurückgegeben.
- Response.items[n].label ist das Label des Elements, das im Autocompleted-Menü angezeigt wird.
- Response.items[n].kind gibt an, welche Art von Autovervollständigungs-Item dies ist. Primär kontrolliert dies den angezeigten Icon für das Item im Editor. Nicht alle Arten haben ein Symbol. Wenn nicht angegeben, verwendet der Editor das "Text"Symbol. Unterstützte Arten werden standardmäßig als "Eigenschaft" angezeigt.
- Response.items[n].tags gibt eine Reihe von Tags an, die diesen Artikelbeschreiben. Siehe den Enum.CompletionItemTag für Details zu ihrer Funktion.
- Response.items[n].details gibt eine Zeichenfolge an, die Details über das Artikelbeschreibt. Für Standard-Items ist dies eine Zeichenfolgevertretung ihres eingeben. Beachten Sie, dass, um das Dokument-Widget anzuzeigen, documentation vorhanden sein muss, aber documentation.value kann leer sein.
- Response.items[n].documentation gibt die Hauptkörper der Dokumentation in seinem value Feld an. documentation ist vorhanden, auch wenn der Wert leer ist, so dass das Dokumentfenster angezeigt wird, wenn Details oder Overloads angegeben sind.
- Response.items[n].overloads gibt die Anzahl der Overloads einer Funktion autovervollständigung an.
- Response.items[n].learnMoreLink Verknüpfungen mit einer relevanten Seite auf den Creator-Dokumenten. Diese URL muss eine https-Anfrage sein, um create.roblox.com zu erstellen; keine anderen URLs werden im Editor angezeigt.
- Response.items[n].codeSample gibt ein Beispiel für die Verwendung des Artikelan. documentation muss nicht leer sein, um dieses Feld anzuzeigen.
- Response.items[n].preselect Wenn es wahr ist, sortiert der Editor diesen Fertigstellungsartikel vor allen anderen und wählt ihn für den Benutzer standardmäßig aus. Kein Effekt, wenn falsch oder fehlt.
- Response.items[n].textEdit Wenn vorhanden, gilt dieses Text-Bearbeitung, wenn Sie die Abnahme annehmen, indem Sie das Breadboard zwischen den Positionen Start und End mit dem neuen Text ersetzen.
Wenn ein Rückruf ein ungültiges Ergebnis zurückgibt oder einen Fehler feststellt, weist der Editor die modifizierte Antwort-Tabelle ab und verwendet die integrierte Autovervollständigungsliste.
Parameter
Rückgaben
Code-Beispiele
--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
type Request = {
position: {
line: number,
character: number,
},
textDocument: {
document: ScriptDocument?,
script: LuaSourceContainer?,
},
}
type Response = {
items: {
{
label: string,
kind: Enum.CompletionItemKind?,
tags: { Enum.CompletionItemTag }?,
detail: string?,
documentation: {
value: string,
}?,
overloads: number?,
learnMoreLink: string?,
codeSample: string?,
preselect: boolean?,
textEdit: {
newText: string,
replace: {
start: { line: number, character: number },
["end"]: { line: number, character: number },
},
}?,
}
},
}
local autocompleteCallback = function(request: Request, response: Response): Response
local item = {
label = "foo",
preselect = true,
}
table.insert(response.items, item)
return response
end
ScriptEditorService:RegisterAutocompleteCallback("foo", 1, autocompleteCallback)
-- To deregister the callback, run the following code in the Command Bar
ScriptEditorService:DeregisterAutocompleteCallback("foo")
RegisterScriptAnalysisCallback
Registert eine Skript-Analyse-Rückruf callbackFunction mit dem Namen name mit priority. Wenn Skript-Analyse in Studio ausgeführt wird, ruft alle registrierten Rückrufe auf, in der Reihenfolge der aufsteigenden Priorität. Jeder Rückruf sollte keine Antwort-Tabelle liefern.
Die Anfrage-Tabelle hat die folgende Format, in der script das LuaSourceContainer ist, das analysiert wird.
type Request = {script: LuaSourceContainer?}
Die Antwort-Tabelle hat die folgende Format, in der diagnostics ist eine Matrix von Diagnose-Tabellen. Jede Diagnose-Tabelle hat die unten aufgeführten Einträge.
type Response = {diagnostics: {{range: {start: {line: number,character: number,},["end"]: {line: number,character: number,}},code: string?,message: string,severity: Enum.Severity?,codeDescription: { href: string }?}}}
- range repräsentiert einen textbereich, der von der linter hervorgehoben werden soll, indem die zeile/zeichen anfangen und die zeile/zeichen beenden.
- code ist eine etikett für die nachricht.
- message ist eine Warnung, die für die Zeile angezeigt wird. Dies wird auch in einem Tooltip angezeigt, wenn der Benutzer seinen Cursor über die Zeile in der Skript-Editor anhebt.
- severity ist ein Enum.Severity-Wert für die Diagnosen. Dies bestimmt, wie die Diagnose in dem Skript-Analyse-Werkzeug in Studio kategorisiert wird, sowie wie der Text in der Skript-Editor angezeigt wird.
- codeDescription Verknüpfungen mit einer relevanten Seite auf den Creator-Dokumenten. Diese URL muss eine https-Anfrage an create.roblox.com sein; keine anderen URLs werden im Editor angezeigt.
Parameter
Rückgaben
Code-Beispiele
type Request = {
["script"]: LuaSourceContainer,
}
type Response = {
diagnostics: {
{
range: {
start: {
line: number,
character: number,
},
["end"]: {
line: number,
character: number,
}
},
code: string?,
message: string,
severity: Enum.Severity?,
codeDescription: { href: string }?,
}
}
}
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService:RegisterScriptAnalysisCallback("foo", 1, function(
Req : Request): Response
local response = {
diagnostics = {}
}
local lineNo = 1
-- Iterate line by line
for text, newline in Req.script.Source:gmatch("([^\r\n]*)([\r\n]*)") do
local startIndex, endIndex = string.find(text, "Foo")
if startIndex and endIndex then
table.insert(response.diagnostics, {
range = {
["start"] = {
line = lineNo,
character = startIndex,
},
["end"] = {
line = lineNo,
character = endIndex,
},
},
code = "FooFinder",
message = "Foo found here!",
severity = Enum.Severity.Warning,
})
end
lineNo = lineNo + #newline:gsub("\n+", "\0%0\0"):gsub(".%z.", "."):gsub("%z", "")
end
return response
end)
OpenScriptDocumentAsync
Anfragen, dass ein Skript-Editor das angegebene Skript, das. PL: die Skriptsöffnet. Gibt (wahr, null) zurück, wenn die Anfrage erfolgreich ist. Gibt (falsch, String) zurück, wenn die Anfrage mit einem String, der das Problem beschreibt, fehlschlägt.
Wenn das Skript bereits geöffnet ist, funktioniert diese Funktion und wechselt die Registerkarten zum zugeordneten Editor.
Parameter
Rückgaben
Code-Beispiele
--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
local Workspace = game:GetService("Workspace")
local newScript = Instance.new("Script")
newScript.Parent = Workspace
local success, err = ScriptEditorService:OpenScriptDocumentAsync(newScript)
if success then
print("Opened script document")
else
print(`Failed to open script document: {err}`)
end
UpdateSourceAsync
Gibt die Bearbeitungszeit Script.Source für das angegebene Skript, das. PL: die Skriptszurück.
Diese Funktion ruft den übergebenen Rückruf mit den alten Inhalten des Skripts auf, um die neuen Inhalte des Skript, das. PL: die Skriptszu berechnen.
Wenn das Skript in dem Skript-Editor geöffnet ist, sendet es eine Anfrage an den Editor, seine Ausgangstextzu aktualisieren. Der Editor kann diese Aktualisierung ablehnen, wenn die Eigenschaft Script.Source mit der Version des Benutzers des Skripts nicht übereinstimmt, in dem Fall wird der Rückruf ausgelöst und der Versuch wiederholt.
Der Rückruf kann nicht geliefert werden. Wenn der Rückruf nil gibt, wird die Operation abgebrochen. Diese Funktion wird bis zum Erfolg oder Abbrechen der Operation zurückgegeben.
Wenn das Skript nicht im Editor geöffnet ist, werden die neuen Inhalte auf die Ausgangstextaktualisiert, die der Editor anzeigen würde, wenn es geöffnet wäre.
local ses = game:GetService('ScriptEditorService')
ses:UpdateSourceAsync(Workspace.Script, function(oldContent)
return oldContent .. " World!"
end)
Parameter
Skript-Instanz zum Aktualisieren.
Die Funktion, um neue Skript-Inhalte zurückzugeben.
Rückgaben
Ereignisse
TextDocumentDidChange
Feuert direkt nach einem ScriptDocument Änderungen. Die textChanged ist eine Matrix von Änderungsstrukturen des Formats:
{ range : { start : { line : number, character : number }, end : { line : number, character : number } }, text: string }
Parameter
Code-Beispiele
--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidChange:Connect(function(scriptDocument, changes)
print("Changed", scriptDocument, changes)
end)
TextDocumentDidClose
Feuert nur, wenn ein ScriptDocument Objekt zerstört wird, was kurz nach dem Schließen des Skripteditors geschieht. Nach diesem Ereignis feuert das ScriptDocument in einen "Geschlossenen" Zustand und versucht, seine Methoden aufzurufen. Nach diesem Ereignis feuert das ScriptDocument Objekte nicht wiederverwertbar, auch wenn der Skripteditor
Parameter
Code-Beispiele
--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidClose:Connect(function(scriptDocument)
print("Closed", scriptDocument)
end)
TextDocumentDidOpen
Feuert ScriptDocument Objekte, die der Dienst erstellt und der übergeordneten zu dem Dienst sind, direkt nach dem Öffnen des Skripteditors.
Parameter
Code-Beispiele
--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidOpen:Connect(function(scriptDocument)
print("Opened", scriptDocument)
end)