ScriptEditorService
*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.
Layanan ini digunakan untuk berinteraksi dengan instansi ScriptDocument .
Rangkuman
Metode
Menghapus panggilan kembali yang sebelumnya terdaftar dengan nama name .
Menghapus panggilan kembali yang sebelumnya terdaftar dengan nama name .
Mengembalikan ScriptDocument yang sesuai dengan LuaSourceContainer yang diberikan, atau nol jika script yang diberikan tidak dibuka.
Mengembalikan sumber waktu pengeditan untuk script yang diberikan.
Mengembalikan array dari dokumen script yang saat ini terbuka, termasuk bilah perintah.
Mendaftar panggilan autocomplete callbackFunction bernama name dengan prioritas priority.
Mendaftar Pengambilan Konsultasi Skrip callbackFunction bernama name dengan priority .
Permintaan yang Editor Skrip buka script yang ditentukan. Mengembalikan (benar, nol) jika permintaan berhasil. Mengembalikan (benar, string) jika permintaan gagal, dengan string yang menggambarkan masalah.
Membuat konten baru dari script lama dan menyetel ulang editor script jika itu terbuka, atau Script instans jika editor script ditutup.
Acara
Fire hanya setelah perubahan ScriptDocument .
Fire hanya sebelum objek ScriptDocument dihancurkan, yang terjadi tepat setelah editor script ditutup.
Berapi-api hanya setelah objek ScriptDocument dibuat dan diwarisi ke layanan, yang terjadi tepat setelah editor script dibuka.
Properti
Metode
DeregisterAutocompleteCallback
Menghapus panggilan kembali yang sebelumnya terdaftar dengan nama name .
Parameter
Memberikan nilai
Contoh Kode
game.ScriptEditorService:DeregisterAutocompleteCallback("foo")
DeregisterScriptAnalysisCallback
Menghapus panggilan kembali yang sebelumnya terdaftar dengan nama name .
Parameter
Memberikan nilai
Contoh Kode
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService:DeregisterScriptAnalysisCallback("foo")
FindScriptDocument
Mengembalikan ScriptDocument yang sesuai dengan LuaSourceContainer yang diberikan, atau nol jika script yang diberikan tidak dibuka.
Parameter
Memberikan nilai
Contoh Kode
--!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
Mengembalikan sumber waktu pengeditan untuk script yang diberikan.
Jika script dibuka di Editor Skrip, metode ini mengembalikan teks yang saat ini ditampilkan di editor. Jika script tidak dibuka di editor, metode ini mengembalikan teks yang akan ditampilkan editor jika dibuka. Sumber waktu pengeditan tidak selalu sama dengan property Script.Source.
Parameter
Memberikan nilai
GetScriptDocuments
Mengembalikan array dari dokumen script yang saat ini terbuka, termasuk bilah perintah.
Memberikan nilai
Contoh Kode
--!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
Mendaftar panggilan autocomplete callbackFunction bernama name dengan prioritas priority.
Ketika Editor Skrip menyebut autotranslate, semua panggilan kembali autotranslate yang terdaftar panggilan kembali pada urutan prioritas dengan permintaan dan jawaban autotranslate. Beberapa panggilan kembali mungkin berbagi prioritas, tetapi kemudian panggilan k
CALLBACKFunction harus memiliki ketikberikut: (Request: table, Response: table) -> table
Tabel Request memiliki format berikut:
type Request = {position: {line: number,character: number},textDocument: {document: ScriptDocument?,script: LuaSourceContainer?}}
- position adalah posisi kurungan yang satu-indeks di mana anda menyelesaikan otomatis.
- textDocument.document adalah open ScriptDocument yang Anda selesaikan, jika ada.
- textDocument.script adalah LuaSourceContainer yang Anda selesaikan, jika ada.
Jika kedua textDocument.document dan textDocument.script hadir, maka mereka berhubungan satu sama lain: req.textDocument.document:GetScript() == req.textDocument.script
Tabel Tanggapan memiliki format berikut:
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 adalah matriks阵 item pengakhiran. Ordo ini tidak signifikan, dan ia diselesaikan di editor sebagai jenis pengguna.
- Response.items[n].label adalah label item yang ditampilkan dalam menu autocompleted.
- Response.items[n].kind spesifikasi jenis item autocustom yang ini. Utama mengendalikan icon yang diberikan ke item di editor. Tidak semua jenis memiliki ikon yang unik. Jika tidak ditentukan, editor menggunakan ikon "Text". Tidak didukung jenis default untuk menampilkan ikon "Properti".
- Response.items[n].tags menguraikan berbagai tag yang menggambarkan item selesai ini. Lihat Enum.CompletionItemTag untuk detail tentang fungsi mereka.
- Response.items[n].details spesifikasi string yang menggambarkan rincian tentang item penyelesaian. Untuk item default, ini adalah representasi string dari ketikmereka. Catat bahwa, agar widget dokumenasi dapat ditampilkan, documentation harus hadir, tetapi documentation.value mungkin kosong.
- Response.items[n].documentation spesifikasi tubuh utama dokumenasi di lapangan value-nya. documentation hadir, bahkan jika value kosong, jadi jendela dokumenasi menunjukkan jika terdapat rincian atau overload.
- Response.items[n].overloads spesifikasi jumlah overload dari fungsi autocompletion.
- Response.items[n].learnMoreLink tautkan ke halaman yang relevan di dokumen pembuat. URL ini harus menjadi permintaan https untuk membuat.roblox.com; tidak ada URL lain yang ditampilkan di editor.
- Response.items[n].codeSample spesifikasi penggunaan sampel item selesai. documentation harus non-Empty untuk menampilkan bidang ini.
- Response.items[n].preselect Jika benar, editor mengurutkan item ini menyusul yang lain dan memilihnya untuk pengguna secara default. Tidak ada efek jika benar atau hilang.
- Response.items[n].textEdit Jika hadir, menerima penyelesaian berlaku untuk text edit ini - mengganti spasi antara posisi awal dan akhir dengan ngetext baru.
Jika panggilan kembali mengembalikan hasil yang tidak valid atau menghadapi kesalahan, editor menyimpah tabel Respon yang dimodifikasi dan menggunakan daftar hasil autocomplet yang dibangun.
Parameter
Memberikan nilai
Contoh Kode
--!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
Mendaftar Pengambilan Konsultasi Skrip callbackFunction bernama name dengan priority . Saat Pengambilan Konsultasi di Studio berjalan, semua panggilan konsultasi terdaftar dipanggil dalam urutan prioritas yang meningkat. Setiap panggilan konsultasi harus mengembalikan tabel respons yang cocok dengan format yang ditentukan di bawah ini. Panggilan konsult
Tabel permintaan memiliki format berikut, di mana script adalah LuaSourceContainer yang akan dianalisis.
type Request = {script: LuaSourceContainer?}
Tabel respons memiliki format berikut, di mana diagnostics adalah array tabel diagnosis. Setiap tabel diagnosis memiliki entri yang tercantum di bawah ini.
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 mewakili rentang teks yang harus ditampilkan oleh linter, menyediakan apa garis/karakter untuk memulai menyoroti dan apa garis/karakter untuk berhenti menyoroti.
- code adalah label untuk pesan.
- message adalah pesan peringatan untuk ditampilkan untuk garis. Ini juga akan muncul di tooltip saat pengguna menyebutkan cursor mereka di atas garis di Editor Skrip.
- severity adalah nilai Enum.Severity untuk diagnosis. Ini menentukan cara diagnosis dikategorikan dalam alat Studio, serta cara teks ditampilkan dalam alat Editor Skrip.
- codeDescription link ke halaman yang relevan di dokumen pencipta. URL ini harus menjadi permintaan https ke create.roblox.com; tidak ada URL lain yang ditampilkan di editor.
Parameter
Memberikan nilai
Contoh Kode
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
Permintaan yang Editor Skrip buka script yang ditentukan. Mengembalikan (benar, nol) jika permintaan berhasil. Mengembalikan (benar, string) jika permintaan gagal, dengan string yang menggambarkan masalah.
Jika script sudah dibuka, fungsi ini berhasil dan beralih tab ke editor yang terkait.
Parameter
Memberikan nilai
Contoh Kode
--!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
Mengembalikan waktu pengeditan Script.Source untuk script yang diberikan.
Fungsi ini menghubungkan panggilan kembali yang diterima menggunakan konten lama script untuk menghitung konten baru dari script.
Jika script dibuka di Editor Skrip, maka itu mengirim permintaan ke editor untuk menyelesaikan sumbernya. Editor mungkin menolak pembaruan ini jika property Script.Source kedaluwarsa dengan versi pengguna saat fungsi ini dipanggil, di mana kali ini panggilan akan diulang dan upaya akan diulang.
Panggilan mungkin tidak menghasilkan. Jika panggilan mengembalikan nil , operasi dibatalkan. Fungsi ini berakhir sampai operasi dibatalkan atau berhasil.
Jika script tidak dibuka di editor, update konten baru ke sumber script, yang merupakan teks yang ditampilkan editor jika dibuka.
local ses = game:GetService('ScriptEditorService')
ses:UpdateSourceAsync(Workspace.Script, function(oldContent)
return oldContent .. " World!"
end)
Parameter
Instensi skrip untuk diperbarui.
Fungsi untuk mengembalikan konten script baru.
Memberikan nilai
Acara
TextDocumentDidChange
Berapi-api hanya setelah perubahan ScriptDocument. The textChanged is an array of struktur perubahan format:
{ range : { start : { line : number, character : number }, end : { line : number, character : number } }, text: string }
Parameter
Contoh Kode
--!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
Mengakhiri hanya sebelum objek ScriptDocument dihancurkan, yang terjadi tepat setelah editor script menutup. Setelah acara ini, objek ScriptDocument memasuki status "Tutup", dan mencoba untuk memanggil metode-metodenya menghasilkan kesalahan. ScriptDocument objek tidak dapat dikembang
Parameter
Contoh Kode
--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidClose:Connect(function(scriptDocument)
print("Closed", scriptDocument)
end)
TextDocumentDidOpen
Berapi-api hanya setelah objek ScriptDocument dibuat dan diwarisi ke layanan, yang terjadi tepat setelah editor script dibuka.
Parameter
Contoh Kode
--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidOpen:Connect(function(scriptDocument)
print("Opened", scriptDocument)
end)