ScriptEditorService
*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.
Ce service est utilisé pour interagir avec les instances ScriptDocument.
Résumé
Méthodes
Supprime un rappel précédemment enregistré avec le nom name .
Supprime un rappel précédemment enregistré avec le nom name .
Renvoie le ScriptDocument ouvert correspondant au LuaSourceContainer donné, ou zéro si le script donné n'est pas ouvert.
Renvoie la source de l'heure d'édition pour le script donné.
Renvoie une tableau des documents d'脚本 actuellement ouverts, y compris la barre de commande.
Enregistre un rappel d'autocomplétion callbackFunction nommé name avec une priorité priority .
Enregistre un rappel d'analyse de script callbackFunction nommé name avec priority .
Les demandes qu'un Éditeur de Script ouvre le script spécifié. Retourne (vrai, zéro) si la demande réussit. Retourne (faux, string) si la demande échoue, avec une chaîne qui décrit le problème.
Génère du nouveau contenu à partir du vieux script et met à jour le script editor si il est ouvert, ou la Script instance si le script editor est fermé.
Évènements
Tire juste après qu'un ScriptDocument ait changé.
Fires juste avant qu'un objet Class.ScriptDocument soit détruit, ce qui se produit juste après que l'éditeur de script ferme.
Fires juste après qu'un objet Class.ScriptDocument soit créé et associé au service, ce qui se produit juste après que l'éditeur de script s'ouvre.
Propriétés
Méthodes
DeregisterAutocompleteCallback
Supprime un rappel précédemment enregistré avec le nom name .
Paramètres
Retours
Échantillons de code
game.ScriptEditorService:DeregisterAutocompleteCallback("foo")
DeregisterScriptAnalysisCallback
Supprime un rappel précédemment enregistré avec le nom name .
Paramètres
Retours
Échantillons de code
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService:DeregisterScriptAnalysisCallback("foo")
FindScriptDocument
Renvoie le ScriptDocument ouvert correspondant au LuaSourceContainer donné, ou zéro si le script donné n'est pas ouvert.
Paramètres
Retours
Échantillons de code
--!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
Renvoie la source de l'heure d'édition pour le script donné.
Si le script est ouvert dans le Éditeur de scripts, cette méthode renvoie le texte actuellement affiché dans l'éditeur. Si le script n'est pas ouvert dans l'éditeur, la méthode renvoie le texte qui le rédacteur afficherait s'il était ouvert. La source de temps d'édition n'est pas toujours cohérente avec la propriété Script.Source.
Paramètres
Retours
GetScriptDocuments
Renvoie une tableau des documents d'脚本 actuellement ouverts, y compris la barre de commande.
Retours
Échantillons de code
--!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
Enregistre un rappel d'autocomplétion callbackFunction nommé name avec une priorité priority .
Lorsque le Script Editor invite l'autocomplétion, tous les scripts d'autocomplétion enregistrés appellent l'autocomplétion en ordre croissant avec la demande et la réponse autocomplétion. Plusieurs scripts peuvent partager une priorité, mais alors leur ordre d'appel est imprévisible. Chaque script est destiné à retourner une table de réponse avec le même
La fonction callbackFunction doit avoir le tapersuivant : (Request: table, Response: table) -> table
La table Request a le format suivant :
type Request = {position: {line: number,character: number},textDocument: {document: ScriptDocument?,script: LuaSourceContainer?}}
- position est la position de curseur indexée où vous êtes en train d'autocompléter.
- textDocument.document est le ScriptDocument ouvert que vous avez terminé, s'il existe.
- textDocument.script est le LuaSourceContainer que vous avez terminé, s'il existe.
Si les deux textDocument.document et textDocument.script sont présents, alors ils correspondent l'un à l'autre : req.textDocument.document:GetScript() == req.textDocument.script
La table de réponse a le format suivant :
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 est un tableau des éléments de finition. L'ordre de cet tableau est insignifiant et il se règle dans l'éditeur comme les types d'utilisateur.
- Response.items[n].label est l'étiquette de l'élément qui s'affiche dans le menu autocomplétion.
- Response.items[n].kind spécifie le type d'autocomplétion que ceci est. En général, ceci contrôle le type d'icône donné à l'élément dans l'éditeur. Tous les types n'ont pas d'icône unique. Si ce n'est pas spécifié, l'éditeur utilise l'icône « Text ». Les types non pris en charge affichent l'icône « Propriété ».
- Response.items[n].tags spécifie un tableau de balises décrivant cet élément de finition. Voir le Enum.CompletionItemTag pour plus de détails sur leur fonction.
- Response.items[n].details spécifie une chaîne qui décrit les détails sur l'élément de finition. Pour les éléments par défaut, ceci est une représentation de chaîne de leur taper. Notez que, pour que le widget de documentation s'affiche, documentation doit être présent, mais documentation.value peut être vide.
- Response.items[n].documentation spécifie le corps principal de la documentation dans son champ value. documentation est présent, même si la valeur est vide, afin que la fenêtre de la documentation s'affiche, même si les détails ou les surcharges sont spécifiés.
- Response.items[n].overloads spécifie le nombre de surcharges d'une fonction autocomplétion.
- Response.items[n].learnMoreLink liens vers une page pertinente sur les docs du créateur. Ce lien doit être une demande https pour créer.roblox.com ; aucun autre lien n'est affiché dans l'éditeur.
- Response.items[n].codeSample spécifie une utilisation d'échantillon de l'élément de finition. documentation doit être non vide pour afficher ce champ.
- Response.items[n].preselect Si oui, l'éditeur trie cet élément de finition avant tous les autres et le sélectionne pour l'utilisateur par défaut. Aucun effet si faux ou manquant.
- Response.items[n].textEdit Si présent, l'acceptation de la finition applique cette édition de texte - remplaçant l'espacement entre les positions de départ et de fin avec le nouveau texte.
Si un rappel renvoie un résultat malformé ou rencontre une erreur, l'éditeur jette la table de réponse modifiée et utilise la liste de résultats d'autocomplétion intégrée.
Paramètres
Retours
Échantillons de code
--!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
Enregistre un rappel d'analyse de script callbackFunction nommé name avec priority . Lorsque l'analyse de script dans Studio s'exécute, tous les rappels enregistrés appellent à tour de rôle. Chaque rappel est destiné à retourner une table de réponse correspondant au format spécifié ci-dessous. Les rappels ne doivent pas se produire.
La table de requête a le format suivant, où script est le LuaSourceContainer qui va être analysé.
type Request = {script: LuaSourceContainer?}
La table de réponse a le format suivant, où diagnostics est un tableau de tables de diagnostic. Chaque table de diagnostic a les entrées répertoriées ci-dessous.
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ésente une gamme de texte qui devrait être mis en évidence par le linter, en fournissant la ligne/caractère à commencer à mettre en évidence et la ligne/caractère à arrêter de mettre en évidence.
- code est une étiquette pour le message.
- message est un message d'avertissement à afficher pour la ligne. Cela apparaîtra également dans un outil lorsque l'utilisateur mettra son curseur sur la ligne dans l'Éditeur de scripts.
- severity est une valeur Enum.Severity pour les diagnostics. Cela détermine comment le diagnostic est catégorisé dans l'outil d'analyse du script dans Studio, ainsi que comment le texte est mis en évidence dans l'éditeur de script.
- codeDescription les liens vers une page pertinente sur les docs du créateur. Ce lien doit être une demande https à create.roblox.com ; aucun autre lien ne s'affiche dans l'éditeur.
Paramètres
Retours
Échantillons de code
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
Les demandes qu'un Éditeur de Script ouvre le script spécifié. Retourne (vrai, zéro) si la demande réussit. Retourne (faux, string) si la demande échoue, avec une chaîne qui décrit le problème.
Si le script est déjà ouvert, cette fonction réussit et bascule les onglets sur l'éditeur associé.
Paramètres
Retours
Échantillons de code
--!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
Retourne le temps d'édition Script.Source pour le script donné.
Cette fonction appelle le rappel passé à l'aide du contenu ancien du script pour calculer les nouveaux contenus du script.
Si le script est ouvert dans le Éditeur de script, il envoie une demande à l'éditeur de mettre à jour sa source. L'éditeur peut rejeter cette mise à jour si la propriété Script.Source est trop ancienne avec la version de l'utilisateur de la fonction lorsque cette fonction est appelée, ce qui entraîne le redémarrage de l'appel et la réessayer.
Le rappel peut ne pas se déclencher. Si le rappel renvoie nil, l'opération est annulée. Cette fonction se déclenche jusqu'à ce que l'opération soit annulée ou réussie.
Si le script n'est pas ouvert dans l'éditeur, les nouvelles mises à jour du contenu s'appliquent à la source du script, qui est le texte que l'éditeur afficherait si ouvert.
local ses = game:GetService('ScriptEditorService')
ses:UpdateSourceAsync(Workspace.Script, function(oldContent)
return oldContent .. " World!"
end)
Paramètres
Insérez le script à mettre à jour.
La fonction pour renvoyer du contenu de script nouveau.
Retours
Évènements
TextDocumentDidChange
Tire juste après qu'un ScriptDocument ait changé. Le textChanged est un tableau de structures de changement du format :
{ range : { start : { line : number, character : number }, end : { line : number, character : number } }, text: string }
Paramètres
Échantillons de code
--!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
Fires juste avant qu'un objet ScriptDocument soit détruit, ce qui se produit juste après que l'éditeur de script ferme. Après cet événement, les objets ScriptDocument entrer dans un état "fermé", et essayant d'appeler ses méthodes lance une erreur. ScriptDocument les objets ne sont pas réutilisables, même si l'éditeur de script ré
Paramètres
Échantillons de code
--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidClose:Connect(function(scriptDocument)
print("Closed", scriptDocument)
end)
TextDocumentDidOpen
Fires juste après qu'un objet Class.ScriptDocument soit créé et associé au service, ce qui se produit juste après que l'éditeur de script s'ouvre.
Paramètres
Échantillons de code
--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidOpen:Connect(function(scriptDocument)
print("Opened", scriptDocument)
end)