ScriptEditorService

Afficher les obsolètes

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Création impossible
Service
Non répliqué

Ce service est utilisé pour interagir avec ScriptDocument instances.

Résumé

Méthodes

Évènements

Propriétés

Méthodes

DeregisterAutocompleteCallback

()
Sécurité des plugins

Supprime un rappel précédemment enregistré avec le nom name.

Paramètres

name: string
Valeur par défaut : ""

Retours

()

Échantillons de code

ScriptEditorService:DeregisterAutocompleteCallback

game.ScriptEditorService:DeregisterAutocompleteCallback("foo")

DeregisterScriptAnalysisCallback

()
Sécurité des plugins

Supprime un rappel précédemment enregistré avec le nom name.

Paramètres

name: string
Valeur par défaut : ""

Retours

()

Échantillons de code

ScriptEditorService:DeregisterScriptAnalysisCallback

local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService:DeregisterScriptAnalysisCallback("foo")

FindScriptDocument

Sécurité des plugins

Retourne l'ouverture ScriptDocument correspondante à la donnée LuaSourceContainer donnée, ou nil si le script donné n'est pas ouvert.

Paramètres

Valeur par défaut : ""

Retours

Échantillons de code

ScriptDocument:CloseAsync

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:

  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
Connecting to ScriptDocument.ViewportChanged

--!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

Sécurité des plugins

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

Valeur par défaut : ""

Retours

GetScriptDocuments

Instances
Sécurité des plugins

Renvoie une liste d'éléments du script actuellement ouverts, y compris la barre de commande.


Retours

Instances

Échantillons de code

Gets all script documents in the place with ScriptEditorService:GetScriptDocuments() and prints their names.

Print the name of every script

--!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

()
Sécurité des plugins

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 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.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

name: string
Valeur par défaut : ""
priority: number
Valeur par défaut : ""
callbackFunction: function
Valeur par défaut : ""

Retours

()

Échantillons de code

ScriptEditorService:RegisterAutocompleteCallback ScriptEditorService:DeregisterAutocompleteCallback

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

()
Sécurité des plugins

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

name: string
Valeur par défaut : ""
priority: number
Valeur par défaut : ""
callbackFunction: function
Valeur par défaut : ""

Retours

()

Échantillons de code

ScriptEditorService: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
-- 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

Rendement
Sécurité des plugins

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

Valeur par défaut : ""

Retours

Échantillons de code

ScriptEditorService:OpenScriptDocumentAsync

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

()
Rendement
Sécurité des plugins

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.

Valeur par défaut : ""
callback: function

La fonction pour retourner le contenu du nouveau script.

Valeur par défaut : ""

Retours

()

Évènements

TextDocumentDidChange

Sécurité des plugins

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

document: ScriptDocument
changesArray: Variant

Échantillons de code

ScriptEditorService.TextDocumentDidChange

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

Sécurité des plugins

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

oldDocument: ScriptDocument

Échantillons de code

ScriptEditorService.TextDocumentDidClose

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

Sécurité des plugins

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

newDocument: ScriptDocument

Échantillons de code

ScriptEditorService.TextDocumentDidOpen

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)