ScriptEditorService
*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.
Bu hizmet, ScriptDocument örnekleriyle etkileşim kurmak için kullanılır.
Özet
Özellikler
Yöntemler
Daha önce kaydedilmiş bir geri çağrıyı adı ile name kaldırır.
Daha önce kaydedilmiş bir geri çağrıyı adı ile name kaldırır.
Verilen ScriptDocument 'ye eşdeğer açık LuaSourceContainer döndürür veya verilen senaryo açık değilse nil .
Verilen senaryo için düzenleme süresi kaynağını döndürür.
Komut çubuğu dahil olmak üzere mevcut açık kript dokümanlarının bir diziini döndürür.
Ön doldurma çağrısı callbackFunction önceliği ile adlandırılan name kaydedilir ile ön doldurma çağrısı priority .
Bir senaryo analizi geri çağrısı callbackFunction adlandırılan name ile priority kaydedilir.
Bir Senaryo Editörünün belirtilen senaryoyu açmasını isteyen istekler.İstek başarılı olursa geri döndürür (true, nil).İstek başarısız olursa (yanlış, dizi) sorunu tanımlayan bir dize ile geri döner.
Eski koddan yeni içerik üretir ve senaryo editörü açıksa veya senaryo editörü kapalıysa Script örneğini günceller.
Etkinlikler
Sadece bir ScriptDocument değişiklikten sonra yangınlar çıkar.
Senaryo editörü kapandıktan hemen sonra ScriptDocument bir nesne yok edilmeden önce yangınlar çıkar, bu da senaryo editörünün kapatılmasından hemen sonra gerçekleşir.
Yalnızca bir ScriptDocument nesnesi oluşturulduktan ve hizmete ebeveyn atandıktan sonra yangınlar çıkar, ki bu, senaryo editörü açıldıktan hemen sonra gerçekleşir.
Özellikler
Yöntemler
DeregisterAutocompleteCallback
Daha önce kaydedilmiş bir geri çağrıyı adı ile name kaldırır.
Parametreler
Dönüşler
Kod Örnekleri
game.ScriptEditorService:DeregisterAutocompleteCallback("foo")
DeregisterScriptAnalysisCallback
Daha önce kaydedilmiş bir geri çağrıyı adı ile name kaldırır.
Parametreler
Dönüşler
Kod Örnekleri
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService:DeregisterScriptAnalysisCallback("foo")
FindScriptDocument
Verilen ScriptDocument 'ye eşdeğer açık LuaSourceContainer döndürür veya verilen senaryo açık değilse nil .
Parametreler
Dönüşler
Kod Örnekleri
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
Verilen senaryo için düzenleme süresi kaynağını döndürür.
Eğer senaryo Kod Editörü 'nde açıksa, bu yöntem şu anda editörde gösterilen metni geri verir.Eğer senaryo editörde açılmazsa, yöntem açıldığında editörün göstereceği metni döndürür.Düzenleme süresi kaynağı daima Script.Source özelliği ile tutarlı olmayabilir.
Parametreler
Dönüşler
GetScriptDocuments
Komut çubuğu dahil olmak üzere mevcut açık kript dokümanlarının bir diziini döndürür.
Dönüşler
Kod Örnekleri
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
Ön doldurma çağrısı callbackFunction önceliği ile adlandırılan name kaydedilir ile ön doldurma çağrısı priority .
Senaryo Editörü otomatik tamamlanmayı çağırdığında, tüm kayıtlı otomatik tamamlanma çağrıları otomatik tamamlanma isteği ve yanıtı ile giderek artan öncelik sırasında çağrılır.Birden fazla geri çağrı bir önceliği paylaşabilir, ancak ardından çağrı sırası öngörülemez.Her geri çağrı, yanıt giriş tablosuyla aynı biçimde bir yanıt tablosu döndürmek üzere tasarlanmıştır.Geri çağrılar verilmemelidir.İlk çağrılan geri arama, yanıt tablosu olarak içsel otomatik tamamlamanın yanıtını alır ve sonraki çağrılar önceki çağrının çıkısını yanıt tablosu olarak alır.Geri çağrılar ya geçirilen tabloyu değiştirebilir veya aynı biçimde yeni bir tablo döndürebilir.
The callbackFunction ın aşağıdaki yazsahip olması gerekir: (Request: table, Response: table) -> table
İstek tablosunun aşağıdaki biçimi vardır:
type Request = {position: {line: number,character: number},textDocument: {document: ScriptDocument?,script: LuaSourceContainer?}}
- position bir otomatik tamamlanma yaptığınız bir bir indeksli kurma konumudur.
- textDocument.document açık ScriptDocument olan, varsa bitirdiğiniz, eğer varsa.
- textDocument.script eksiksiz bitirdiğiniz LuaSourceContainer varsa, varsa.
Her ikisi de textDocument.document ve textDocument.script mevcutsa, birbirlerine karşılırlar: req.textDocument.document:GetScript() == req.textDocument.script
Yanıt tablosunun aşağıdaki biçimi vardır:
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 bir tamamlanma öğeleri dizesidir. Bu dizenin sırası önemsizdir ve kullanıcılar tarafından yazıldığı gibi editörde kullanılır.
- Response.items[n].label otomatik tamamlaama menüsünde görüntülenen öğenin etiketidir.
- Response.items[n].kind bu otomatik tamamlama öğesinin hangi tür olduğunu belirtir.Öncelikle bu, editörde öğeye verilen simgeyi kontrol eder.Tüm türlerin benzersiz bir ikonu yok.Belirtilmediğinde, editör "Metin" simgesini kullanır.Desteklenmeyen türler varsayılan olarak "Özellik" simgesini görüntüler.
- Response.items[n].tags bir tamamlayıcı öğeyi tanımlayan bir dizi etiket belirtir. İşlevleri hakkında ayrıntılar için Enum.CompletionItemTag bakın.
- Response.items[n].details bir bitirme öğesiyle ilgili ayrıntıları tanımlayan bir dize belirtir.Varsayılan öğeler için, bu onların yazbir dize temsili.Belge düzenleyicisinin görüntülenmesi için, documentation mevcut olmalı, ancak documentation.value boş olabilir.
- Response.items[n].documentation belgelerin ana vücudunu value alanında tanımlar.documentation varsa, değer boş olsa bile, belgeler penceresi ayrıntılar veya yüklemeler belirtilirse görüntülenir.
- Response.items[n].overloads bir işlevin otomatik tamamlanmasının yük sayısını belirtir
- Response.items[n].learnMoreLink yaratıcı belgelerindeki ilgili bir sayfaya bağlantılar.Bu URL oluştur.roblox.com'u oluşturmak için bir https isteği olmalıdır; diğer URL'ler editörde görünmez.
- Response.items[n].codeSample bitirme öğesinin bir örnek kullanımını belirtir. documentation bu alanı görüntülemek için boş olmamalıdır.
- Response.items[n].preselect Eğer doğruysa, editör bu bitirme öğesini tüm diğerlerinden önce sıralar ve varsayılan olarak kullanıcı için seçer. Yanlış veya kayıp olursa hiçbir etki yoktur.
- Response.items[n].textEdit Eğer mevcutsa, bitirmeyi kabul etmek bu metin düzenlemeyi uygular - pozisyonların başlangıcından sonuna yeniText ile yer değiştiren veya yerleştiren boşlukları ekler.
Bir geri arama geçersiz bir sonuç döndürür veya bir hata ile karşılaşırsa, editör değiştirilmiş Yanıt tablosunu reddeder ve yerleşik otomatik tamamlama sonuç listesini kullanır.
Parametreler
Dönüşler
Kod Örnekleri
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
Bir senaryo analizi geri çağrısı callbackFunction adlandırılan name ile priority kaydedilir.Studio'daki senaryo analizi yapıldığında, tüm kayıtlı geri çağrılar sırasıyla öncelikli olarak çağrılır.Her geri çağrı, aşağıda belirtilen biçime uyan bir yanıt tablosu döndürmek üzere tasarlanmıştır.Geri çağrılar verilmemelidir.
İstek tablosunun aşağıdaki biçimi vardır, script nerede LuaSourceContainer analiz edilecek olan budur.
type Request = {script: LuaSourceContainer?}
Yanıt tablosunun aşağıdaki biçimi vardır, where diagnostics diagnostik tabloların bir dizi olduğu yerdir. Her diagnostik tablo aşağıdaki girişlere sahiptir.
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 bir düzeltici tarafından vurgulanması gereken bir metin aralığını temsil eder, hangi satır/karakterin vurgulanmaya başlayacağını ve hangi satır/karakterin vurgulanmayı durduracağını sağlar.
- code mesaj için bir etikettir.
- message çizgi için görüntülenmesi gereken bir uyarı mesajıdır.Bu, kullanıcı kursörünü Senaryo Editöründeki satıra getirdiğinde bir açıklama olarak da görünecektir.
- severity diyagnostik için bir Enum.Severity değeridir.Bu, Studio'daki Script Analysis aracında teşhisin nasıl sınıflandırıldığını ve ayrıca metnin Script Editöründe nasıl vurgulandığını belirler.
- yaratıcı dokümanlarında ilgili bir sayfaya bağlantılar. Bu URL, editörde başka URL görünmez.
Parametreler
Dönüşler
Kod Örnekleri
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
Bir Senaryo Editörünün belirtilen senaryoyu açmasını isteyen istekler.İstek başarılı olursa geri döndürür (true, nil).İstek başarısız olursa (yanlış, dizi) sorunu tanımlayan bir dize ile geri döner.
Eğer senaryo zaten açıksa, bu işlev başarılı olur ve sekmeleri ilişkili editöre geçirir.
Parametreler
Dönüşler
Kod Örnekleri
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
Verilen senaryo için düzenleme süresini Script.Source geri döndürür.
Bu işlev, senaryonun eski içeriğini kullanarak geçmiş geri çağrıyı çağırır ve senaryonun yeni içeriğini hesaplar.
Eğer senaryo Kod Editörü 'nde açıksa, kaynakgüncelleştirmek için editöre bir istek gönderir.Editör, Script.Source özelliğinin kullanıcının senaryo sürümüyle uyumadığı durumda bu güncellemeyi reddedebilir, bu durumda geri çağrılacak ve deneme tekrarlanacaktır.
Geri çağrı yapılamayabilir.Geri arama nil döndürürse, işlem iptal edilir.Bu işlev, işlem iptal edilene veya başarılı olana kadar verir.
Eğer senaryo editörde açılmazsa, yeni içerik açıldığında görüntüleyeceği metin olan senaryo kaynakgüncellenir.
local ses = game:GetService('ScriptEditorService')
ses:UpdateSourceAsync(Workspace.Script, function(oldContent)
return oldContent .. " World!"
end)
Parametreler
Güncellenmesi gereken senaryo örneği.
Yeni senaryo içeriğini döndüren işlev.
Dönüşler
Etkinlikler
TextDocumentDidChange
Sadece bir ScriptDocument değişiklikten sonra yangınlar. textChanged formatın değişim yapılarının bir dizi:
{ range : { start : { line : number, character : number }, end : { line : number, character : number } }, text: string }
Parametreler
Kod Örnekleri
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
Senaryo editörü kapandıktan hemen sonra ScriptDocument bir nesne yok edilmeden önce yangınlar çıkar, bu da senaryo editörünün kapatılmasından hemen sonra gerçekleşir.Bu olay ateşlendikten sonra, ScriptDocument "Kapalı" bir duruma girer ve yöntemlerini çağırmaya çalışmak bir hata verir.ScriptDocument nesneler aynı senaryoyu yeniden kullanılabilir hale getirmez, yazılım editörü aynı senaryoyu yeniden açsa bile.
Parametreler
Kod Örnekleri
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
Yalnızca bir ScriptDocument nesnesi oluşturulduktan ve hizmete ebeveyn atandıktan sonra yangınlar çıkar, ki bu, senaryo editörü açıldıktan hemen sonra gerçekleşir.
Parametreler
Kod Örnekleri
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)