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 ScriptDocument instansi.

Rangkuman

Metode

Acara

Properti

Metode

DeregisterAutocompleteCallback

()
Keamanan Plugin

Menghapus panggilan balik yang sebelumnya terdaftar dengan nama name .

Parameter

name: string
Nilai Default: ""

Memberikan nilai

()

Contoh Kode

ScriptEditorService:DeregisterAutocompleteCallback

game.ScriptEditorService:DeregisterAutocompleteCallback("foo")

DeregisterScriptAnalysisCallback

()
Keamanan Plugin

Menghapus panggilan balik yang sebelumnya terdaftar dengan nama name .

Parameter

name: string
Nilai Default: ""

Memberikan nilai

()

Contoh Kode

ScriptEditorService:DeregisterScriptAnalysisCallback

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

FindScriptDocument

Keamanan Plugin

Kembalikan terbuka ScriptDocument yang sesuai dengan yang diberikan LuaSourceContainer , atau nil jika skrip yang diberikan tidak terbuka.

Parameter

Nilai Default: ""

Memberikan nilai

Contoh Kode

ScriptDocument:CloseAsync

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:

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

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

Nilai Default: ""

Memberikan nilai

GetScriptDocuments

Instances
Keamanan Plugin

Kembalikan array dokumen skrip yang saat ini terbuka, termasuk bilah perintah.


Memberikan nilai

Instances

Contoh Kode

Gets all script documents in the place with ScriptEditorService:GetScriptDocuments() and prints their names.

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

()
Keamanan Plugin

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 label
kind: 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

name: string
Nilai Default: ""
priority: number
Nilai Default: ""
callbackFunction: function
Nilai Default: ""

Memberikan nilai

()

Contoh Kode

ScriptEditorService:RegisterAutocompleteCallback ScriptEditorService:DeregisterAutocompleteCallback

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

()
Keamanan Plugin

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

name: string
Nilai Default: ""
priority: number
Nilai Default: ""
callbackFunction: function
Nilai Default: ""

Memberikan nilai

()

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

Nilai Default: ""

Memberikan nilai

Contoh Kode

ScriptEditorService:OpenScriptDocumentAsync

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

()
Hasil
Keamanan Plugin

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.

Nilai Default: ""
callback: function

Fungsi untuk mengembalikan konten skrip baru.

Nilai Default: ""

Memberikan nilai

()

Acara

TextDocumentDidChange

Keamanan Plugin

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

document: ScriptDocument
changesArray: Variant

Contoh Kode

ScriptEditorService.TextDocumentDidChange

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

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

oldDocument: ScriptDocument

Contoh Kode

ScriptEditorService.TextDocumentDidClose

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

Api hanya setelah objek ScriptDocument dibuat dan diberikan ke layanan, yang terjadi tepat setelah editor skrip dibuka.

Parameter

newDocument: ScriptDocument

Contoh Kode

ScriptEditorService.TextDocumentDidOpen

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)