ScriptEditorService

Pokaż przestarzałe

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

Brak możliwości tworzenia
Usługa
Bez replikacji

Ten serwis jest używany do wchodzenia w interakcję z instancjami ScriptDocument.

Podsumowanie

Metody

Zdarzenia

Właściwości

Metody

DeregisterAutocompleteCallback

void
Zabezpieczenia dodatku plug-in

Usuwa wcześniej zarejestrowany zwrotny call z nazwą name .

Parametry

name: string

Zwroty

void

Przykłady kodu

ScriptEditorService:DeregisterAutocompleteCallback

game.ScriptEditorService:DeregisterAutocompleteCallback("foo")

DeregisterScriptAnalysisCallback

void
Zabezpieczenia dodatku plug-in

Usuwa wcześniej zarejestrowany zwrotny call z nazwą name .

Parametry

name: string

Zwroty

void

Przykłady kodu

ScriptEditorService:DeregisterScriptAnalysisCallback

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

FindScriptDocument

Zabezpieczenia dodatku plug-in

Zwraca otwarty ScriptDocument odpowiadający danej LuaSourceContainer lub nil, jeśli dany skrypt nie jest otwarty.

Parametry


Zwroty

Przykłady kodu

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

Zabezpieczenia dodatku plug-in

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

Instances
Zabezpieczenia dodatku plug-in

Zwraca arkusz dokumentów skryptowych, który jest otwarty w tej chwili, w tym barę komend.


Zwroty

Instances

Przykłady kodu

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
Zabezpieczenia dodatku plug-in

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

name: string
priority: number
callbackFunction: function

Zwroty

void

Przykłady kodu

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
Zabezpieczenia dodatku plug-in

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

name: string
priority: number
callbackFunction: function

Zwroty

void

Przykłady kodu

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

Wynik
Zabezpieczenia dodatku plug-in

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

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
Wynik
Zabezpieczenia dodatku plug-in

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.

callback: function

Funkcja do powrotu nowego treści skryptu.


Zwroty

void

Zdarzenia

TextDocumentDidChange

Zabezpieczenia dodatku plug-in

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

document: ScriptDocument
changesArray: Variant

Przykłady kodu

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

Zabezpieczenia dodatku plug-in

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

oldDocument: ScriptDocument

Przykłady kodu

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

Zabezpieczenia dodatku plug-in

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

newDocument: ScriptDocument

Przykłady kodu

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)