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 ScriptDocument instances.
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.
Retourne l'ouverture ScriptDocument correspondante à la donnée LuaSourceContainer donnée, ou nil si le script donné n'est pas ouvert.
Renvoie la source d'édition pour le script donné.
Renvoie une liste d'éléments du script actuellement ouverts, y compris la barre de commande.
Enregistre un rappel d'autocomplétion callbackFunction nommé name avec priorité priority .
Enregistre un rappel d'analyse de script callbackFunction nommé name avec priority .
Demandes que l'éditeur de scripts ouvre le script spécifié.Retours (vrai, zéro) si la demande réussit.Retours (faux, chaîne) si la demande échoue, avec une chaîne qui décrit le problème.
Génère un nouveau contenu à partir du vieux script et met à jour l'éditeur de script s'il est ouvert, ou l'instance Script si l'éditeur de script est fermé.
Évènements
Feux juste après un changement de ScriptDocument 2.
Feux juste avant que l'objet ScriptDocument ne soit détruit, ce qui se produit immédiatement après la fermeture de l'éditeur de scripts.
Feux juste après qu'un objet ScriptDocument ait été créé et parenté au service, ce qui se produit juste après l'ouverture de l'éditeur de scripts.
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
Retourne l'ouverture ScriptDocument correspondante à la donnée LuaSourceContainer donnée, ou nil si le script donné n'est pas ouvert.
Paramètres
Retours
Échantillons de code
ScriptDocument:CloseAsync
--!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
Demonstrates using ScriptDocument.ViewportChanged to print the start and end line of the script's viewport when it changes.
To run:
- Ensure Output view is open
- Run the below code in the Command Bar
- Scroll up and down in the opened Script window
--!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 d'édition pour le script donné.
Si le script est ouvert dans l'éditeur script, cette méthode renvoie le texte actuellement affiché dans l'éditeurSi le script n'est pas ouvert dans l'éditeur, la méthode renvoie le texte que l'éditeur afficherait s'il était ouvert.La source d'édition n'est pas toujours cohérente avec la propriété Script.Source .
Paramètres
Retours
GetScriptDocuments
Renvoie une liste d'éléments du script actuellement ouverts, y compris la barre de commande.
Retours
Échantillons de code
Gets all script documents in the place with ScriptEditorService:GetScriptDocuments() and prints their names.
--!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 priorité priority .
Lorsque l'éditeur de scripts invoque l'autocomplétion, toutes les demandes et réponses d'autocomplétion enregistrées sont appelées dans l'ordre croissant de priorité avec la demande et la réponse d'autocomplétion.Plusieurs rappels peuvent partager une priorité, mais leur ordre d'appel est ensuite imprévisible.Chaque rappel est destiné à retourner une table de réponse avec le même format que la table d'entrée de réponse.Les rappels ne devraient pas produire.Le premier rappel invoqué reçoit la réponse de l'autocomplétion interne comme table de réponse, et les appels suivants reçoivent l'entrée du rappel précédent comme table de réponse.Les rappels peuvent soit modifier la table passée, soit retourner une nouvelle table du même format.
Le callbackFunction doit avoir le tapersuivant : (Request: table, Response: table) -> table
La table Requête a le format suivant :
type Request = {position: {line: number,character: number},textDocument: {document: ScriptDocument?,script: LuaSourceContainer?}}
- position est la position du curseur indexé où vous effectuez l'autocomplétion.
- textDocument.document est l'ouverture ScriptDocument que vous terminez, si elle existe.
- textDocument.script est le LuaSourceContainer que vous terminez, 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,insert: { start: { line: number, character: number }, ["end"]: { line: number, character: number } },replace: { start: { line: number, character: number }, ["end"]: { line: number, character: number } },}?}}}
- Response.items est un tableau des éléments de finition. L'ordre de ce tableau est insignifiant et il se résout dans l'éditeur lorsque l'utilisateur tape.
- Response.items[n].label est l'étiquette de l'élément qui s'affiche dans le menu d'autocomplétion.
- Response.items[n].kind spécifie quel type d'élément d'autocomplétion c'est.Principalement, cela contrôle l'icône donnée à l'élément dans l'éditeur.Tous les types n'ont pas une icône unique.Si ce n'est pas spécifié, l'éditeur utilise l'icône « Texte ».Les types non pris en charge affichent par défaut l'icône « Propriété ».
- Response.items[n].tags spécifie un ensemble de balises décrivant cet itemde finition. Voir le Enum.CompletionItemTag pour les détails de leur fonction.
- Response.items[n].details spécifie une chaîne qui décrit des détails sur l'élément de finition.Pour les éléments par défaut, c'est une représentation en 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, de sorte que la fenêtre de documentation s'affiche si des détails ou des surcharges sont spécifiés.
- Response.items[n].overloads spécifie le nombre de surcharges d'une autocomplétion de fonction.
- Response.items[n].learnMoreLink liens vers une page pertinente sur les docs du créateur.Cette URL doit être une demande https à créer.roblox.com ; aucune autre URL n'est affichée dans l'éditeur.
- Response.items[n].codeSample spécifie une utilisation d'échantillon de l'itemde finition. documentation doit être non vide pour afficher ce champ.
- Response.items[n].preselect Si c'est vrai, l'éditeur trie cet élément de finition avant tous les autres et le sélectionne par défaut pour l'utilisateur s'il est faux ou manquant. Aucun effet si faux ou manquant.
- Response.items[n].textEdit Si présent, l'acceptation de la finition applique cette modification de texte - insérer ou remplacer l'espacement entre les positions de début 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
ScriptEditorService:RegisterAutocompleteCallback ScriptEditorService:DeregisterAutocompleteCallback
--!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 sont appelés dans l'ordre croissant de priorité.Chaque rappel est destiné à retourner une table de réponse correspondant au format spécifié ci-dessous.Les rappels ne doivent pas 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 ensemble de tables diagnostiques. Chaque table diagnostique a les entrées listé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 plage de texte qui devrait être mise en évidence par le linter, fournissant quelle ligne/caractère pour commencer à mettre en évidence et quelle ligne/caractère pour 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 une bulle d'information lorsque l'utilisateur fait passer le 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 des scripts dans Studio, ainsi que la manière dont le texte est mis en évidence dans l'éditeur de scripts.
- codeDescription liens vers une page pertinente sur les docs du créateur. Cette URL doit être une demande https à create.roblox.com ; aucune autre URL n'est affichée 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
Demandes que l'éditeur de scripts ouvre le script spécifié.Retours (vrai, zéro) si la demande réussit.Retours (faux, chaîne) 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 change les onglets vers l'éditeur associé.
Paramètres
Retours
Échantillons de code
ScriptEditorService:OpenScriptDocumentAsync
--!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
Renvoie le temps d'édition Script.Source pour le script donné.
Cette fonction appelle le rappel passé en utilisant le contenu ancien du script pour calculer le nouveau contenu du script.
Si le script est ouvert dans l'éditeur de scripts Script Editor, il envoie une demande à l'éditeur de mettre à jour sa source.L'éditeur peut rejeter cette mise à jour si la propriété Script.Source était obsolète avec la version du script de l'utilisateur lorsque cette fonction a été appelée, auquel cas le rappel sera réinvité et l'essai sera répété.
Le rappel peut ne pas produire.Si le rappel renvoie nil , l'opération est annulée.Cette fonction produit jusqu'à ce que l'opération soit annulée ou réussisse.
Si le script n'est pas ouvert dans l'éditeur, la nouvelle mise à jour du contenu s'applique à la source du script, qui est le texte que l'éditeur afficherait s'il était ouvert.
local ses = game:GetService('ScriptEditorService')
ses:UpdateSourceAsync(Workspace.Script, function(oldContent)
return oldContent .. " World!"
end)
Paramètres
Instance de script à mettre à jour.
La fonction pour retourner le contenu du nouveau script.
Retours
Évènements
TextDocumentDidChange
Feux juste après un changement de de format. Le 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
ScriptEditorService.TextDocumentDidChange
--!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
Feux juste avant que l'objet ScriptDocument ne soit détruit, ce qui se produit immédiatement après la fermeture de l'éditeur de scripts.Après cet événement, le ScriptDocument entre dans un état « fermé » et essayer d'appeler ses méthodes lance une erreur.ScriptDocument les objets ne sont pas réutilisables, même si l'éditeur de script réouvre le même script.
Paramètres
Échantillons de code
ScriptEditorService.TextDocumentDidClose
--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidClose:Connect(function(scriptDocument)
print("Closed", scriptDocument)
end)
TextDocumentDidOpen
Feux juste après qu'un objet ScriptDocument ait été créé et parenté au service, ce qui se produit juste après l'ouverture de l'éditeur de scripts.
Paramètres
Échantillons de code
ScriptEditorService.TextDocumentDidOpen
--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidOpen:Connect(function(scriptDocument)
print("Opened", scriptDocument)
end)