ScriptEditorService
*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.
Dịch vụ này được sử dụng để tương tác với ScriptDocument instances.
Tóm Tắt
Phương Pháp
Loại bỏ một hồ sơ trước đó đã đăng ký với tên name .
Loại bỏ một hồ sơ trước đó đã đăng ký với tên name .
Trả lại ScriptDocument mở tương ứng với LuaSourceContainer , hoặc nil nếu script đã được mở không.
Trả lại nguồn thời gian chỉnh sửa cho tập tin đã được cho phép.
Trả lại một dàn tài liệu ngôn tức thời đang mở, bao gồm cả thanh command.
Đăng ký một hàm chọn tự động callbackFunction có tên là name với ưu tiên priority .
Đăng ký một hàm phân tích tập lệnh callbackFunction có tên name với priority .
Yêu cầu mà một Editor Skript mở script được chỉ định. Trả lại (đúng, nil) nếu yêu cầu thành công. Trả lại (giả, chuỗi) nếu yêu cầu thất bại, với một chuỗi mô tả vấn đề.
Tạo nội dung mới từ các câu lệnh cũ và cập nhật trình biên tập nếu nó được mở hoặc Script instance nếu trình biên tập nội dung đó đã đóng.
Sự Kiện
Lửa chỉ sau khi một ScriptDocument thay đổi.
Lửa chỉ trước khi một ScriptDocument đối tượng được phá hủy, xảy ra ngay sau khi trình chỉnh script đóng cửa.
Lửa chỉ sau khi một ScriptDocument đối tượng được tạo và liên quan với dịch vụ, xảy ra ngay sau khi trình biên tập script mở.
Thuộc Tính
Phương Pháp
DeregisterAutocompleteCallback
Loại bỏ một hồ sơ trước đó đã đăng ký với tên name .
Tham Số
Lợi Nhuận
Mẫu mã
game.ScriptEditorService:DeregisterAutocompleteCallback("foo")
DeregisterScriptAnalysisCallback
Loại bỏ một hồ sơ trước đó đã đăng ký với tên name .
Tham Số
Lợi Nhuận
Mẫu mã
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService:DeregisterScriptAnalysisCallback("foo")
FindScriptDocument
Trả lại ScriptDocument mở tương ứng với LuaSourceContainer , hoặc nil nếu script đã được mở không.
Tham Số
Lợi Nhuận
Mẫu mã
--!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
Trả lại nguồn thời gian chỉnh sửa cho tập tin đã được cho phép.
Nếu script được mở trong Editor Script, phương thức này trả lại nội dung hiện đang được hiển thị trong editor. Nếu script không được mở trong editor, phương thức trả lại nội dung mà editor sẽ hiển thị nếu nó được mở. Nguồn thời gian chỉnh sửa không phải lú
Tham Số
Lợi Nhuận
GetScriptDocuments
Trả lại một dàn tài liệu ngôn tức thời đang mở, bao gồm cả thanh command.
Lợi Nhuận
Mẫu mã
--!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
Đăng ký một hàm chọn tự động callbackFunction có tên là name với ưu tiên priority .
Khi Editor Script gọi autocomplet, tất cả các hàm autocomplet đã đăng ký sẽ gọi theo thứ tự theo thứ tự ưu tiên với yêu cầu và phản hồi autoc
Cuộn hồi callbackFunction phải có đánh máysau: (Request: table, Response: table) -> table
Cột Request có hình dạng như sau:
type Request = {position: {line: number,character: number},textDocument: {document: ScriptDocument?,script: LuaSourceContainer?}}
- position là vị trí chuột được tự động hoàn thành.
- textDocument.document là một tập tin ScriptDocument mở, nếu nó tồn tại.
- textDocument.script là LuaSourceContainer bạn đang hoàn thành, nếu nó tồn tại.
Nếu cả hai textDocument.document và textDocument.script đều hiện diện, thì chúng đều được đồng bộ với nhau: req.textDocument.document:GetScript() == req.textDocument.script
Cột trả lời có hình dạng như sau:
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 là một danh sách các mục đã hoàn thành. Thứ tự của danh sách này không có ý nghĩa, và nó được thiết lập lại trong editor như màu mực của người dùng.
- Response.items[n].label là nhãn của mục được hiển thị trong menu tự động hoàn thành.
- Response.items[n].kind định nghĩa loại autocompletet này là gì. Chủ yếu điều này kiểm soát loại icon được cung cấp cho mục trong trình duyệt. Không tất cả các loại đều có một biểu tượngđộc đáo. Nếu không được định nghĩa, trình duyệt sử dụng biểu tượng"Vă
- Response.items[n].tags định nghĩa một loạt các thẻ mô tả về món vật phẩmnày. Tham khảo Enum.CompletionItemTag để biết chi tiết về chức năng của họ.
- Response.items[n].details specifies a string describing details about the completion vật phẩm. For default items, this is a string representation of their đánh máy. Note that, in order for the documentation widget to display, documentation must be present, but documentation.value may be empty.
- Response.items[n].documentation specifies the main body of the documentation in its value field. documentation is present, even if value is empty, so the documentation window displays if either details or overloads are specified.
- Response.items[n].overloads đặt ra số lượng quá tải của một chức năng autocompletion.
- Response.items[n].learnMoreLink liên kết đến trang bị liên quan trên tài liệu doc của người tạo. URL này phải là một yêu cầu https để tạo ra.roblox.com; không có URL khác được hiển thị trong trình duyệt.
- Response.items[n].codeSample định nghĩa một mẫu sử dụng của vật phẩmhoàn thành. documentation phải là non-Empty để hiển thị trường này.
- Response.items[n].preselect Nếu đúng, trình soạn thảo sắp xếp mục này trước tất cả những người khác và chọn nó cho người dùng bằng cách mặc định. Không có hiệu ứng nếu đúng hoặc bị thiếu.
- Response.items[n].textEdit Nếu hiện có, chấp nhận hoàn thành áp dụng hộp chỉnh sửa văn bản này - thay thế các khoảng trống giữa các vị trí bắt đầu và kết thúc với những văn bản mới.
Nếu một hàm bị gọi trả lại kết quả sai hoặc gặp lỗi, trình soạn thảo sẽ bỏ rơi bảng Responce đã được hiệu chỉnh và sử dụng danh sách kết quả tự động hoàn thành tích hợp.
Tham Số
Lợi Nhuận
Mẫu mã
--!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
Đăng ký một hành động Phân tích Script callbackFunction có tên name với priority . Khi Phân tích Script ở Studio chạy, tất cả các hành động đăng ký được gọi theo thứ tự theo thứ tự. Mỗi hành động đăng ký đều được yêu cầu trả
Bảng yêu cầu có định dạng như sau, script là LuaSourceContainer được phân tích.
type Request = {script: LuaSourceContainer?}
Bảng trả lời có các hình dạng sau đây, trong đó diagnostics là một bảng trả lời. Mỗi bảng trả lời có các hàng được liệt kê dưới đây.
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 đại diện cho một phạm vi văn bản mà nên nhấn mạnh bởi linter, cung cấp những dòng/nhân vật để bắt đầu nhấn mạng và những dòng/nhân vật để dừng nhấn mạng.
- code là một nhãn cho thông tin nhắn.
- message là một thông báo cho dòng. Điều này cũng sẽ xuất hiện trên một mẫu khi người dùng giữ chuột của họ trên dòng trong Trình biên tập Ngôn từ.
- severity là một giá trị Enum.Severity cho điều kiện di chẩn. Điều này xác định cách di chẩn được phân loại trong công cụ phân tích script trong Studio, cũng như cách nhận xét được nhấn màu trong công cụ trình chỉnh script trong Studio.
- codeDescription liên kết đến trang liên quan trên tài liệu của người tạo. URL này phải là một yêu cầu https để create.roblox.com; không có URL khác được hiển thị trong trình duyệt.
Tham Số
Lợi Nhuận
Mẫu mã
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
Yêu cầu mà một Editor Skript mở script được chỉ định. Trả lại (đúng, nil) nếu yêu cầu thành công. Trả lại (giả, chuỗi) nếu yêu cầu thất bại, với một chuỗi mô tả vấn đề.
Nếu script đã mở, hành động này thành công và chuyển tùy chỉnh sang editor liên kết.
Tham Số
Lợi Nhuận
Mẫu mã
--!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
Lại thời gian chỉnh sửa Script.Source cho script đó.
Hàm này gọi lại hồi gọi đã được sử dụng trong nội dung cũ của script để tính toán nội dung mới của script.
Nếu script được mở trong Editor Script, thì nó sẽ ra một yêu cầu đối với editor để nâng cấp nguồn của nó. Editor có thể từ chối yêu cầu này nếu độ tuổi Script.Source đã lỗi với phiên bản người dùng khi gọi chức năng này
Hàm đó có thể không trả kết quả. Nếu hàm đó trả lại nil, hoạt động sẽ bị huỷ. Đây là hàm đến khi hoạt động được huỷ hoặc thành công.
Nếu script không được mở trong trình biên tập, nội dung mới sẽ được cập nhật lên nguồn script, which is the text the editor would display if it is opened.
local ses = game:GetService('ScriptEditorService')
ses:UpdateSourceAsync(Workspace.Script, function(oldContent)
return oldContent .. " World!"
end)
Tham Số
Cập nhật nội dung tập lệnh.
Chức năng để trả lại nội dung mới của script.
Lợi Nhuận
Sự Kiện
TextDocumentDidChange
Lửa chỉ sau khi một ScriptDocument thay đổi. The textChanged is an array of cấu trúc thay đổi của hình dạng:
{ range : { start : { line : number, character : number }, end : { line : number, character : number } }, text: string }
Tham Số
Mẫu mã
--!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
Lửa chỉ đơn giản là ScriptDocument đối tượng được tiêu diệt, xảy ra ngay sau khi editor script đóng cửa. Sau sự kiện này, ScriptDocument đi vào trạng thái "Đóng cửa", và thử gọi các phương thức củ
Tham Số
Mẫu mã
--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidClose:Connect(function(scriptDocument)
print("Closed", scriptDocument)
end)
TextDocumentDidOpen
Lửa chỉ sau khi một ScriptDocument đối tượng được tạo và liên quan với dịch vụ, xảy ra ngay sau khi trình biên tập script mở.
Tham Số
Mẫu mã
--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidOpen:Connect(function(scriptDocument)
print("Opened", scriptDocument)
end)