ScriptEditorService
*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.
Ten serwis jest używany do wchodzenia w interakcję z instancjami ScriptDocument.
Podsumowanie
Metody
Usuwa wcześniej zarejestrowany zwrotny call z nazwą name .
Usuwa wcześniej zarejestrowany zwrotny call z nazwą name .
Zwraca otwarty ScriptDocument odpowiadający danej LuaSourceContainer lub nil, jeśli dany skrypt nie jest otwarty.
Zwraca źródło czasu edytowania dla podanego skryptu.
Zwraca arkusz dokumentów skryptowych, który jest otwarty w tej chwili, w tym barę komend.
Rejestruje automatyczne uzupełnienie zwrotu callbackFunction z imieniem name z priorytetem priority .
Rejestruje wysokozwężoną funkcję analityki skryptów callbackFunction o nazwie name z priority .
Żądania, że Skryptowy Editor otworzy określony skrypt. Wynika (prawdziwy, zero) jeśli zgłoszenie się powoduje sukces. Wynika ( fałszywy, ciąg) jeśli zgłoszenie się nie powoduje sukcesu, z wiadomością opisującą problem.
Generuje nową treść z starego skryptu i aktualizuje edytor skryptów, jeśli jest otwarty, lub instancję Script, jeśli edytor skryptów jest zamknięty.
Zdarzenia
Wystąpi po południu ScriptDocument zmian.
Występuje tylko przed tym, jak obiekt ScriptDocument zostanie zniszczony, co dzieje się właśnie po zamknięciu edytora skryptów.
Występuje tylko po utworzeniu obiektu ScriptDocument i związanie z usługą, co dzieje się właśnie po otwarciu edytora skryptów.
Właściwości
Metody
DeregisterAutocompleteCallback
Usuwa wcześniej zarejestrowany zwrotny call z nazwą name .
Parametry
Zwroty
Przykłady kodu
game.ScriptEditorService:DeregisterAutocompleteCallback("foo")
DeregisterScriptAnalysisCallback
Usuwa wcześniej zarejestrowany zwrotny call z nazwą name .
Parametry
Zwroty
Przykłady kodu
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService:DeregisterScriptAnalysisCallback("foo")
FindScriptDocument
Zwraca otwarty ScriptDocument odpowiadający danej LuaSourceContainer lub nil, jeśli dany skrypt nie jest otwarty.
Parametry
Zwroty
Przykłady kodu
--!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
Zwraca źródło czasu edytowania dla podanego skryptu.
Jeśli skrypt jest otwarty w Skrypt Editor, ten metod returnuje tekst, który jest obecnie wyświetlany w edytorze. Jeśli skrypt nie jest otwarty w edytorze, metod returnuje tekst, który edytor będzie wyświetlić, jeśli jest otwarty. Źródło czasu edytowania nie zawsze jest spójny z właściwością Script.Source.
Parametry
Zwroty
GetScriptDocuments
Zwraca arkusz dokumentów skryptowych, który jest otwarty w tej chwili, w tym barę komend.
Zwroty
Przykłady kodu
--!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
Rejestruje automatyczne uzupełnienie zwrotu callbackFunction z imieniem name z priorytetem priority .
Gdy Skryptowy Editor wzywa autokomplet, wszystkie zarejestrowane w autokomplecie zwroty wzywania są w kolejności rosnącej z priorytetu z prośbą autokompletu i odpowiedzią. Wiele zwrotów może mieć priorytet, ale jego kolejność nie jest przewidywalna. Każdy
Funkcja callbackFunction musi mieć następujący wpisywać: (Request: table, Response: table) -> table
Tabela Request ma następujący format:
type Request = {position: {line: number,character: number},textDocument: {document: ScriptDocument?,script: LuaSourceContainer?}}
- position jest pozycją kursora jednoznacznej wartości, w której autouzupełniasz.
- textDocument.document to otwarty ScriptDocument z którym kończysz, jeśli istnieje.
- textDocument.script jest LuaSourceContainer w którym jesteś ukończony, jeśli istnieje.
Jeśli obie textDocument.document i textDocument.script są obecne, to odpowiadają sobie nawzajem: req.textDocument.document:GetScript() == req.textDocument.script
Tabela Odpowiedzi ma następujący format:
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 jest matrycą przedmiotów zakończenia. Porządek tej matryцы jest nieważny, a weryfikuje się go w edytorze jako typy użytkownika.
- Response.items[n].label to etykieta przedmiotu, która jest wyświetlana w menu autouzupełniania.
- Response.items[n].kind określa jaki typ autouzupełnienia jest to. Przede wszystkim to kontroluje udzielony dla przedmiotu ikona. Nie wszystkie rodzaje mają unikalny identyfikator. Jeśli nie określono, edytor używa ikony „Text”. Nie obsługiwane rodzaje domyślnie wyświetlają ikona „Właściwość”.
- Response.items[n].tags określa maszynę tagów opisującą ten przedmiot zakończenia. Patrz Enum.CompletionItemTag po szczegóły na ich funkcję.
- Response.items[n].details określa stronę opisującą szczegóły o przedmiocie kończenia. Dla przedmiotów domyślnych jest to reprezentacja stronki ich wpisywać. Uwaga, aby dla podstawowych przedmiotów dokumentacja była wyświetlana, documentation musi być obecny, ale documentation.value może być pusty.
- Response.items[n].documentation określa główną treść dokumentacji w jej polu value. documentation jest obecny, nawet jeśli wartość jest pusta, więc okienko dokumentacji wyświetla się, jeśli szczegóły lub przeciążenia są określone.
- Response.items[n].overloads określa liczbę przeciążeń funkcji autoukończenia.
- Response.items[n].learnMoreLink linki do odpowiedniej strony na dokumentach twórcy. Ten URL musi być https żądanie do tworzenia.roblox.com; żadne inne URL nie są wyświetlane w edytorze.
- Response.items[n].codeSample określa próbkowe użycie przedmiotu zakończenia. documentation musi być nieważne, aby wyświetlić to pole.
- Response.items[n].preselect Jeśli jest to prawdą, edytor sortuje ten przedmiot do ukończenia przed wszystkimi innymi i wybiera go dla użytkownika domyślnie. Brak efektu jeśli fałszywy lub brakujący.
- Response.items[n].textEdit Jeśli obecny, akceptacja końca zastosowania tego edytora tekstu - zastąpienie znaku spacji między pozycjami start i końca nowym tekstem.
Jeśli wysok funkcja zwraca nieprawidłowy wynik lub popełnia błąd, edytor odrzuca zmodyfikowaną tabelę odpowiedzi i używa zintegrowanej listy wyników autouzupełniania.
Parametry
Zwroty
Przykłady kodu
--!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
Rejestruje wezwanie do analizy skryptu callbackFunction z nazwą name z priority . Gdy Studio wykonuje analizę skryptu, wszystkie wezwania do analizy skryptu zostaną wykonane w kolejności rosnącej priorytetu. Każde wezwanie do analizy skryptu powinno zwracać tabelę odpowiedzi odpowiadającą formatowi określonemu poniżej. Wezwania do analizy sk
Tabela wniosków ma następujący format, w którym script jest LuaSourceContainer , który zostanie zeskanowany.
type Request = {script: LuaSourceContainer?}
Tabela odpowiedzi ma następujący format, gdzie diagnostics to lista tabel diagnozycznych. Każda tabela diagnozyczna ma wpisy wymienione poniżej.
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 reprezentuje tekstowy zasięg, który powinien być podświetlony przez linter, zapewniając, którą linię/znak rozpocząć podświetlaniem i którą linię/znak zakończyć podświetlaniem.
- code jest etykietą dla wiadomość.
- message to jest komunikat ostrzeżenia dla linii. Będzie to również pojawiać się na pasku narzędzi, gdy użytkownik położy kursor na linii w Skrypt Editora.
- severity jest wartością Enum.Severity dla diagnozatorów. To określa, jak diagnozator jest kategoryzowany w narzędziu Analyse Skryptów w Studio, a także jak tekst jest podświetlony w narzędziu Edytora Skryptów.
- codeDescription linki do odpowiedniej strony na dokumentach twórcy. Ten URL musi być https prośbą do create.roblox.com ; nie inne URL nie są wyświetlane w edytorze.
Parametry
Zwroty
Przykłady kodu
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
Żądania, że Skryptowy Editor otworzy określony skrypt. Wynika (prawdziwy, zero) jeśli zgłoszenie się powoduje sukces. Wynika ( fałszywy, ciąg) jeśli zgłoszenie się nie powoduje sukcesu, z wiadomością opisującą problem.
Jeśli skrypt jest już otwarty, funkcja ta się powoduje i przełącza zakładki na związanych edytorach.
Parametry
Zwroty
Przykłady kodu
--!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
Zwraca czas edytowania Script.Source dla danej skryptu.
Funkcja ta wzywa przekazany zwrotny callback używając starych treści skryptu, aby obliczyć nowe treści skryptu.
Jeśli skrypt jest otwarty w Editorze Skryptów, wysyłuje prośbę do edytora, aby zaktualizował jego kod źródłowy. Editor może odrzucić tę aktualizację, jeśli właściwość Script.Source była nieaktualna z wersją użytkownika, w przypadku którego funkcja ta zostanie ponownie wywołana i próba zostanie powtórzona.
Kwota może nie zostać wykonana. Jeśli kwota zwraca nil , operacja jest anulowana. Ta funkcja zostanie wykonana do czasu anulowania lub powodzenia operacji.
Jeśli skrypt nie zostanie otwarty w edytorze, nowe treści aktualizują się do kod źródłowyskryptu, co jest tekstem, który edytor wyświetliłby, gdyby otwarty.
local ses = game:GetService('ScriptEditorService')
ses:UpdateSourceAsync(Workspace.Script, function(oldContent)
return oldContent .. " World!"
end)
Parametry
Instancja skryptu do aktualizacji.
Funkcja do powrotu nowego treści skryptu.
Zwroty
Zdarzenia
TextDocumentDidChange
Występuje po pojawieniu się zmiany ScriptDocument . The textChanged jest listą struktur zmiany formatu:
{ range : { start : { line : number, character : number }, end : { line : number, character : number } }, text: string }
Parametry
Przykłady kodu
--!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
Występuje tylko przed obiektem ScriptDocument, który zostaje usunięty po zamknięciu edytora skryptów. Po tym zdarzeniu ScriptDocument wchodzi w stan "zamknięty", a próba wezwania jego metod spowoduje błąd. Obiekty ScriptDocument nie są ponownie używalne, nawet jeśli edytor skryptów
Parametry
Przykłady kodu
--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidClose:Connect(function(scriptDocument)
print("Closed", scriptDocument)
end)
TextDocumentDidOpen
Występuje tylko po utworzeniu obiektu ScriptDocument i związanie z usługą, co dzieje się właśnie po otwarciu edytora skryptów.
Parametry
Przykłady kodu
--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidOpen:Connect(function(scriptDocument)
print("Opened", scriptDocument)
end)