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 ScriptDocument instansi.
Rangkuman
Metode
Menghapus panggilan balik yang sebelumnya terdaftar dengan nama name .
Menghapus panggilan balik yang sebelumnya terdaftar dengan nama name .
Kembalikan terbuka ScriptDocument yang sesuai dengan yang diberikan LuaSourceContainer , atau nil jika skrip yang diberikan tidak terbuka.
Kembalikan sumber waktu编辑 untuk skrip yang diberikan.
Kembalikan array dokumen skrip yang saat ini terbuka, termasuk bilah perintah.
Mendaftarkan panggilan balas otomatis callbackFunction bernama name dengan prioritas priority .
Mendaftarkan panggilan analisis skrip callbackFunction bernama name dengan priority .
Permintaan agar Editor Skrip membuka skrip yang ditentukan.Kembali (benar, nol) jika permintaan berhasil.Kembali (false, string) jika permintaan gagal, dengan string yang menggambarkan masalah.
Membuat konten baru dari skrip lama dan memperbarui editor skrip jika terbuka, atau instansi Script jika editor skrip ditutup.
Acara
Api hanya setelah perubahan ScriptDocument setelahnya.
Api hanya sebelum objek ScriptDocument terhancur, yang terjadi tepat setelah editor skrip ditutup.
Api hanya setelah objek ScriptDocument dibuat dan diberikan ke layanan, yang terjadi tepat setelah editor skrip dibuka.
Properti
Metode
DeregisterAutocompleteCallback
Menghapus panggilan balik yang sebelumnya terdaftar dengan nama name .
Parameter
Memberikan nilai
Contoh Kode
game.ScriptEditorService:DeregisterAutocompleteCallback("foo")
DeregisterScriptAnalysisCallback
Menghapus panggilan balik yang sebelumnya terdaftar dengan nama name .
Parameter
Memberikan nilai
Contoh Kode
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService:DeregisterScriptAnalysisCallback("foo")
FindScriptDocument
Kembalikan terbuka ScriptDocument yang sesuai dengan yang diberikan LuaSourceContainer , atau nil jika skrip yang diberikan tidak terbuka.
Parameter
Memberikan nilai
Contoh Kode
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:
- Ensure Output view is open
- Run the below code in the Command Bar
- Scroll up and down in the opened Script window
--!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
Kembalikan sumber waktu编辑 untuk skrip yang diberikan.
Jika skrip dibuka di Editor Skrip, metode ini mengembalikan teks yang saat ini ditampilkan di editor.Jika skrip tidak terbuka di editor, metode tersebut mengembalikan teks yang akan ditampilkan oleh editor jika terbuka.Sumber waktu编辑 tidak selalu konsisten dengan properti Script.Source .
Parameter
Memberikan nilai
GetScriptDocuments
Kembalikan array dokumen skrip yang saat ini terbuka, termasuk bilah perintah.
Memberikan nilai
Contoh Kode
Gets all script documents in the place with ScriptEditorService:GetScriptDocuments() and prints their names.
--!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
Mendaftarkan panggilan balas otomatis callbackFunction bernama name dengan prioritas priority .
Ketika Editor Skrip memanggil autocomplete, semua panggilan balasan autocomplete terdaftar dipanggil dalam urutan prioritas meningkat dengan permintaan dan respons autocomplete.Beberapa panggilan balasan dapat berbagi prioritas, tetapi kemudian urutan panggilan mereka tidak dapat diprediksi.Setiap panggilan kembali dimaksudkan untuk mengembalikan tabel respons dengan format yang sama dengan tabel input respons.Panggilan balik tidak boleh menghasilkan.Panggilan balasan pertama diundang menerima respons internal autocomplete sebagai tabel responsnya, dan panggilan balasan berikutnya menerima output panggilan sebelumnya sebagai tabel responsnya.Panggilan balik dapat mengubah tabel yang dilewati atau mengembalikan tabel baru dengan format yang sama.
The callbackFunction harus memiliki ketikberikut: (Request: table, Response: table) -> table
Tabel Permintaan memiliki format berikut:
type Request = {position: {line: number,character: number},textDocument: {document: ScriptDocument?,script: LuaSourceContainer?}}
- position adalah posisi kursor indeks satu di mana anda melakukan autocomplete.
- textDocument.document adalah terbuka ScriptDocument yang anda selesaikan, jika ada.
- textDocument.script adalah LuaSourceContainer yang anda selesaikan, jika ada.
Jika keduanya textDocument.document dan textDocument.script hadir, maka mereka sesuai satu sama lain: req.textDocument.document:GetScript() == req.textDocument.script
Tabel Respon 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,insert: { start: { line: number, character: number }, ["end"]: { line: number, character: number } },replace: { start: { line: number, character: number }, ["end"]: { line: number, character: number } },}?}}}
- Response.items adalah array item penyelesaian. Urutan array ini tidak signifikan, dan ia berlaku di editor sebagai jenis pengguna.
- Response.items[n].label adalah label item yang ditampilkan di menu autocomplete.
- Response.items[n].kind menentukan jenis item autocomplete apa ini.Terutama ini mengontrol ikon yang diberikan ke item di editor.Tidak semua jenis memiliki ikon unik.Jika tidak ditentukan, editor menggunakan ikon "Teks".Jenis yang tidak didukung secara default menampilkan ikon "Properti."
- Response.items[n].tags menentukan array tag yang menggambarkan item penyelesaian ini. Lihat Enum.CompletionItemTag untuk rincian fungsi mereka.
- Response.items[n].details menentukan string yang menggambarkan rincian tentang item penyelesaian.Untuk item default, ini adalah representasi string dari ketik.Perhatikan bahwa, agar widget dokumentasi ditampilkan, documentation harus hadir, tetapi documentation.value mungkin kosong.
- Response.items[n].documentation menentukan tubuh utama dokumentasi di bidangnya value . documentation hadir, bahkan jika nilainya kosong, jadi jendela dokumentasi ditampilkan jika terdapat rincian atau overload yang diberikan.
- Response.items[n].overloads menentukan jumlah overload dari fungsi penyelesaian otomatis.
- Response.items[n].learnMoreLink tautan ke halaman yang relevan di dokumen pencipta.URL ini harus menjadi permintaan https untuk create.roblox.com; tidak ada URL lain yang ditampilkan di editor.
- Response.items[n].codeSample menentukan penggunaan sampel dari item penyelesaian. documentation harus tidak kosong untuk menampilkan bidang ini.
- Response.items[n].preselect Jika benar, editor mengurutkan item penyelesaian ini sebelum semua orang lain dan memilihnya untuk pengguna secara default. Tidak ada efek jika salah atau hilang.
- Response.items[n].textEdit Jika hadir, menerima penyelesaian menerapkan edit teks ini - menyisipkan atau menggantikan spasi antara posisi mulai dan akhir dengan teks baru.
Jika panggil balasan mengembalikan hasil yang tidak valid atau menemukan kesalahan, editor membuang tabel Respon yang dimodifikasi dan menggunakan daftar hasil autocomplete bawaan.
Parameter
Memberikan nilai
Contoh Kode
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
Mendaftarkan panggilan analisis skrip callbackFunction bernama name dengan priority .Saat analisis skrip di Studio berjalan, semua panggilan balasan terdaftar dipanggil dalam urutan prioritas meningkat.Setiap panggilan balasan dimaksudkan untuk men返回 respons tabel yang sesuai dengan format yang ditentukan di bawah ini.Panggilan balik tidak boleh menghasilkan.
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 terdaftar 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 disorot oleh linter, memberikan baris/karakter mana yang harus mulai disorot dan baris/karakter mana yang harus berhenti disorot.
- code adalah label untuk pesan.
- message adalah pesan peringatan yang akan ditampilkan untuk baris.Ini juga akan muncul di tooltip saat pengguna menggerakkan kursor mereka di atas baris di Editor Skrip.
- severity adalah nilai Enum.Severity untuk diagnosis.Ini menentukan bagaimana diagnosis dikategorikan di alat Analisis Skrip di Studio, serta bagaimana teks disorot di 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 agar Editor Skrip membuka skrip yang ditentukan.Kembali (benar, nol) jika permintaan berhasil.Kembali (false, string) jika permintaan gagal, dengan string yang menggambarkan masalah.
Jika skrip sudah terbuka, fungsi ini berhasil dan beralih tab ke editor yang terkait.
Parameter
Memberikan nilai
Contoh Kode
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
Kembalikan waktu编辑 untuk skrip yang diberikan Script.Source
Fungsi ini memanggil callback yang dilewati menggunakan konten lama skrip untuk menghitung konten baru skrip.
Jika skrip dibuka di Editor Skrip, maka ia mengeluarkan permintaan ke editor untuk memperbarui sumbernya.Editor dapat menolak pembaruan ini jika properti Script.Source kadaluarsa dengan versi skrip pengguna saat fungsi ini dipanggil, dalam hal ini panggilan balik akan diaktifkan kembali dan upaya akan diulangi.
Panggil balik mungkin tidak menghasilkan.Jika panggil balasan mengembalikan nil, operasi dibatalkan.Fungsi ini menghasilkan sampai operasi dibatalkan atau berhasil.
Jika skrip tidak terbuka di editor, pembaruan konten baru ke sumber skrip, yang merupakan teks yang akan ditampilkan oleh editor jika dibuka.
local ses = game:GetService('ScriptEditorService')
ses:UpdateSourceAsync(Workspace.Script, function(oldContent)
return oldContent .. " World!"
end)
Parameter
Instansi skrip yang akan diperbarui.
Fungsi untuk mengembalikan konten skrip baru.
Memberikan nilai
Acara
TextDocumentDidChange
Api hanya setelah perubahan ScriptDocument setelah perubahan. textChanged adalah array struktur perubahan format:
{ range : { start : { line : number, character : number }, end : { line : number, character : number } }, text: string }
Parameter
Contoh Kode
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
Api hanya sebelum objek ScriptDocument terhancur, yang terjadi tepat setelah editor skrip ditutup.Setelah peristiwa ini terjadi, ScriptDocument memasuki status "Tutup", dan mencoba memanggil metodenya menyebabkan kesalahan.ScriptDocument objek tidak dapat digunakan kembali, bahkan jika editor skrip membuka kembali skrip yang sama.
Parameter
Contoh Kode
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
Api hanya setelah objek ScriptDocument dibuat dan diberikan ke layanan, yang terjadi tepat setelah editor skrip dibuka.
Parameter
Contoh Kode
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)