Classe de moteur
ScriptEditorService
*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.
Résumé
Méthodes
DeregisterAutocompleteCallback(name: string):() |
DeregisterScriptAnalysisCallback(name: string):() |
GetEditorSource(script: LuaSourceContainer):string |
OpenScriptDocumentAsync(script: LuaSourceContainer,options: Dictionary):Tuple |
RegisterAutocompleteCallback(name: string,priority: number,callbackFunction: function):() |
RegisterScriptAnalysisCallback(name: string,priority: number,callbackFunction: function):() |
UpdateSourceAsync(script: LuaSourceContainer,callback: function):() |
Événements
TextDocumentDidChange(document: ScriptDocument,changesArray: Variant):RBXScriptSignal |
TextDocumentDidClose(oldDocument: ScriptDocument):RBXScriptSignal |
TextDocumentDidOpen(newDocument: ScriptDocument):RBXScriptSignal |
Référence API
Méthodes
DeregisterAutocompleteCallback
DeregisterScriptAnalysisCallback
FindScriptDocument
Paramètres
Retours
Échantillons de code
ScriptDocument:CloseAsync
--!nocheck
-- Exécutez le code suivant dans la barre de commandes
local ScriptEditorService = game:GetService("ScriptEditorService")
local documents = ScriptEditorService:GetScriptDocuments()
local scriptDocument
-- Trouvez le premier document de script ouvert
for _, document in documents do
-- La barre de commandes ne peut pas être fermée, donc ne la sélectionnez pas
if not document:IsCommandBar() then
scriptDocument = document
break
end
end
if scriptDocument then
local success, err = scriptDocument:CloseAsync()
if success then
print(`Fermé {scriptDocument.Name}`)
else
warn(`Échec de la fermeture de {scriptDocument.Name} parce que : {err}`)
end
else
print("Aucun script ouvert")
endConnexion à ScriptDocument.ViewportChanged
--!nocheck
--[[
Pour exécuter :
1. Assurez-vous que la vue de sortie est ouverte
2. Exécutez le code ci-dessous dans la barre de commande
3. Faites défiler vers le haut et vers le bas dans la fenêtre de script ouverte
Les instructions d'impression de l'événement ViewportChanged apparaîtront dans la sortie
]]
local Workspace = game:GetService("Workspace")
local ScriptEditorService = game:GetService("ScriptEditorService")
-- Créer un texte qui s'étend sur plusieurs lignes
local dummyText = string.rep("-- Dummy Text\n", 60)
-- Créer un script contenant le texte fictif et l'ouvrir
local otherScript = Instance.new("Script")
otherScript.Source = dummyText
otherScript.Parent = Workspace
local success, err = ScriptEditorService:OpenScriptDocumentAsync(otherScript)
if not success then
warn(`Échec de l'ouverture du script en raison de : {err}`)
return
end
-- Obtenir une référence au script ouvert
local scriptDocument = ScriptEditorService:FindScriptDocument(otherScript)
local function onViewportChanged(startLine: number, endLine: number)
print(`Changement de vue du script - startLine: {startLine}, endLine: {endLine}`)
end
-- Connecter l'événement ViewportChanged à la fonction ci-dessus qui imprime la ligne de début et la ligne de fin de la vue mise à jour
scriptDocument.ViewportChanged:Connect(onViewportChanged)GetEditorSource
Paramètres
Retours
GetScriptDocuments
Retours
Échantillons de code
Imprimer le nom de chaque script
--!nocheck
-- Exécutez le code suivant dans la barre de commandes
local ScriptEditorService = game:GetService("ScriptEditorService")
local scriptDocuments = ScriptEditorService:GetScriptDocuments()
for _, scriptDocument in scriptDocuments do
-- Imprime le nom de chaque script
if not scriptDocument:IsCommandBar() then
print(scriptDocument.Name)
end
endOpenScriptDocumentAsync
Paramètres
| Valeur par défaut : "nil" |
Retours
Échantillons de code
OpenScriptDocumentAsync()
--!nocheck
-- Exécutez le code suivant dans la barre de commande
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("Document de script ouvert")
else
print(`Échec de l'ouverture du document de script : {err}`)
endRegisterAutocompleteCallback
Retours
()
Échantillons de code
RegisterAutocompleteCallback() et DeregisterAutocompleteCallback()
--!nocheck
-- Exécutez le code suivant dans la barre de commandes
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)
-- Pour désenregistrer le rappel, exécutez le code suivant dans la barre de commandes
ScriptEditorService:DeregisterAutocompleteCallback("foo")RegisterScriptAnalysisCallback
Retours
()
Échantillons de code
RegisterScriptAnalysisCallback()
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
-- Itérer ligne par ligne
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 trouvé ici!",
severity = Enum.Severity.Warning,
})
end
lineNo = lineNo + #newline:gsub("\n+", "\0%0\0"):gsub(".%z.", "."):gsub("%z", "")
end
return response
endUpdateSourceAsync
Paramètres
Retours
()
Échantillons de code
Mettre à jour la source de manière asynchrone
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService:UpdateSourceAsync(workspace.Script, function(oldContent)
return oldContent .. " Monde!"
end)Événements
TextDocumentDidChange
ScriptEditorService.TextDocumentDidChange(
Paramètres
changesArray:Variant |
Échantillons de code
ScriptEditorService.TextDocumentDidChange
--!nocheck
-- Exécutez le code suivant dans la barre de commande
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidChange:Connect(function(scriptDocument, changes)
print("Changé", scriptDocument, changes)
end)TextDocumentDidClose
Paramètres
Échantillons de code
ScriptEditorService.TextDocumentDidClose
--!nocheck
-- Exécutez le code suivant dans la barre de commandes
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidClose:Connect(function(scriptDocument)
print("Fermé", scriptDocument)
end)TextDocumentDidOpen
Paramètres
Échantillons de code
ScriptEditorService.TextDocumentDidOpen
--!nocheck
-- Exécutez le code suivant dans la barre de commandes
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidOpen:Connect(function(scriptDocument)
print("Ouvert", scriptDocument)
end)