ScriptEditorService

Tampilkan yang Tidak Digunakan Lagi

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Tidak Dapat Dibuat
Layanan
Tidak Direplikasi

Layanan ini digunakan untuk berinteraksi dengan instansi ScriptDocument .

Rangkuman

Metode

Acara

Properti

Metode

DeregisterAutocompleteCallback

void
Keamanan Plugin

Menghapus panggilan kembali yang sebelumnya terdaftar dengan nama name .

Parameter

name: string

Memberikan nilai

void

Contoh Kode

ScriptEditorService:DeregisterAutocompleteCallback

game.ScriptEditorService:DeregisterAutocompleteCallback("foo")

DeregisterScriptAnalysisCallback

void
Keamanan Plugin

Menghapus panggilan kembali yang sebelumnya terdaftar dengan nama name .

Parameter

name: string

Memberikan nilai

void

Contoh Kode

ScriptEditorService:DeregisterScriptAnalysisCallback

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

FindScriptDocument

Keamanan Plugin

Mengembalikan ScriptDocument yang sesuai dengan LuaSourceContainer yang diberikan, atau nol jika script yang diberikan tidak dibuka.

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

Keamanan Plugin

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

Instances
Keamanan Plugin

Mengembalikan array dari dokumen script yang saat ini terbuka, termasuk bilah perintah.


Memberikan nilai

Instances

Contoh Kode

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

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

name: string
priority: number
callbackFunction: function

Memberikan nilai

void

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

void
Keamanan Plugin

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

name: string
priority: number
callbackFunction: function

Memberikan nilai

void

Contoh Kode

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

Hasil
Keamanan Plugin

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

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
Hasil
Keamanan Plugin

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.

callback: function

Fungsi untuk mengembalikan konten script baru.


Memberikan nilai

void

Acara

TextDocumentDidChange

Keamanan Plugin

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

document: ScriptDocument
changesArray: Variant

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

Keamanan Plugin

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

oldDocument: ScriptDocument

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

Keamanan Plugin

Berapi-api hanya setelah objek ScriptDocument dibuat dan diwarisi ke layanan, yang terjadi tepat setelah editor script dibuka.

Parameter

newDocument: ScriptDocument

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)