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 les instances ScriptDocument.

Résumé

Méthodes

Évènements

Propriétés

Méthodes

DeregisterAutocompleteCallback

void
Sécurité des plugins

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

Paramètres

name: string

Retours

void

Échantillons de code

ScriptEditorService:DeregisterAutocompleteCallback

game.ScriptEditorService:DeregisterAutocompleteCallback("foo")

DeregisterScriptAnalysisCallback

void
Sécurité des plugins

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

Paramètres

name: string

Retours

void

Échantillons de code

ScriptEditorService:DeregisterScriptAnalysisCallback

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

FindScriptDocument

Sécurité des plugins

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

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

Instances
Sécurité des plugins

Renvoie une tableau des documents d'脚本 actuellement ouverts, y compris la barre de commande.


Retours

Instances

Échantillons de code

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

void
Sécurité des plugins

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 label
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 } },
}?
}
}
}
  • 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

name: string
priority: number
callbackFunction: function

Retours

void

É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

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

name: string
priority: number
callbackFunction: function

Retours

void

É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

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

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

void
Rendement
Sécurité des plugins

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.

callback: function

La fonction pour renvoyer du contenu de script nouveau.


Retours

void

Évènements

TextDocumentDidChange

Sécurité des plugins

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

document: ScriptDocument
changesArray: Variant

É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

Sécurité des plugins

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

oldDocument: ScriptDocument

É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

Sécurité des plugins

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

newDocument: ScriptDocument

É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)