ScriptEditorService

顯示已棄用項目

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

無法建立
服務
未複製

此服務用於與 ScriptDocument 實例互動。

概要

方法

活動

屬性

方法

DeregisterAutocompleteCallback

void
外掛程式安全性

移除名為 name 的先前註冊的回撥。

參數

name: string

返回

void

範例程式碼

ScriptEditorService:DeregisterAutocompleteCallback

game.ScriptEditorService:DeregisterAutocompleteCallback("foo")

DeregisterScriptAnalysisCallback

void
外掛程式安全性

移除名為 name 的先前註冊的回撥。

參數

name: string

返回

void

範例程式碼

ScriptEditorService:DeregisterScriptAnalysisCallback

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

FindScriptDocument

外掛程式安全性

返回與指定 ScriptDocument 對應的開啟 LuaSourceContainer,或為零,如果沒有指定的 Class.LuaSourceContainer 。

參數


返回

範例程式碼

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

外掛程式安全性

為指定的指令碼返回編輯時間。

如果指令碼在 指令碼編輯器 中開啟,此方法會將顯示在編輯器中的文字歸還給指定的方塊。如果指令碼未在編輯器中開啟,此方法會將編輯器中顯示的文字歸還給指定的方塊。編輯時間來源與 Script.Source 屬性不始終一致。

參數


返回

GetScriptDocuments

Instances
外掛程式安全性

包括指令欄的開啟腳本文件,以及其他腳本文件。


返回

Instances

範例程式碼

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
外掛程式安全性

註冊自動完成回歸函數 callbackFunction 以名稱 name 與優先權 priority

當Script Editor召喚自動完成時,所有已註冊的自動完成回報都會按照上升的優先權與自動完成請求和回應共同排名。 多個回報可能會分享優先權,但然後它們的呼叫順序是不可預測的。 每個回報都是以與�

調用函數 必須有以下輸入:(Request: table, Response: table) -> table

請求表格式為:


type Request = {
position: {
line: number,
character: number
},
textDocument: {
document: ScriptDocument?,
script: LuaSourceContainer?
}
}
  • position 是您自動完成的指定曲線位置。
  • textDocument.document 是您正在完成的開啟 ScriptDocument,如果它存在。
  • textDocument.script 是您正在完成的 LuaSourceContainer,如果它存在。

如果 both textDocument.documenttextDocument.script 存在,則相互對應: req.textDocument.document:GetScript() == req.textDocument.script

回應表格式為:


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 是一個完成項目的陣列。這個陣列的順序沒有意義,因此在編輯器中會以用戶類型的順序重新排序。
  • Response.items[n].label 是顯示在自動完成菜單中的項目標籤。
  • Response.items[n].kind 指定這是什麼類型的自動完成項目。 主要控制項目中提供的圖示。 不支持的種類沒有獨特的圖示。 如果未指定,編輯器會顯示 "Text" 圖示。
  • Response.items[n].tags 指定一個描述此完成道具的標籤的列表。參閱「Ennum」完成項目標籖了解其功能。
  • Response.items[n].details 指定一個描述完成道具目細節的字串。對於預設項輸入,這是一個類型的表示。注意,為了要開始文件頁面顯示,documentation 必須存在,但documentation.value 可以為空。
  • Response.items[n].documentation 指定了文件中的主體,其 value 字段。documentation 已存在,即使值是空的,因此文件窗口會顯示是否需要詳細資料或過載。
  • Response.items[n].overloads 指定功能自動完成的過載數。
  • Response.items[n].learnMoreLink 鏈接到創作者的資料上,這個鏈接必須是 https 的請求,才能創建立、創作。roblox.com;不會顯示其他網址。
  • Response.items[n].codeSample 指定完成項道具的樣本使用。documentation 必須為空才能顯示此字段。
  • Response.items[n].preselect 如果是,編輯器會將此完成項目排在所有其他項目之前,並且預先選擇它,然後按預設順序為用戶選擇。如果是假或缺失,無效。
  • Response.items[n].textEdit 如果存在,接受完成將此文字編輯套用 - 用新文字取代位置開始和結束之間的空格。

如果回調返回不正確的結果或發生錯誤,編輯器將扔棄已修改的回應表,並使用預置的自動完成結果列表。

參數

name: string
priority: number
callbackFunction: function

返回

void

範例程式碼

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
外掛程式安全性

註冊一個名為 callbackFunction 的腳本分析回歸 name ,並且以 priority 的優先級呼叫。當 Studio 中的腳本分析執行時,所有註冊的回歸回歸都會以上述格式的順序召回。回歸不應該輸出。

請求表有以下格式,其中 script 是要分析的 LuaSourceContainer


type Request = {
script: LuaSourceContainer?
}

回應表有以下格式,其中 diagnostics 是一個用於診斷的表。每個診斷表都有以下列表。


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 代表一個文字範圍,該範圍應該由 linter 強調,提供哪一行/角色開始強調和哪一行/角色停止強調。
  • code 是標籤訊息。
  • message 是警告訊息,要顯示在線上。這也會在指定的工具提示中顯示,當使用者將鼠標揮動在線上時。
  • severity 是對診斷程式的 Enum.Severity 值。這會決定診斷程式在 Studio 的腳本分析工具中的分類方式,以及文字在腳本編輯器中標示方式。
  • codeDescription 連結到創作者的 doc 上的相關頁面。這個網址必須是 https 要求在 create.roblox.com ;不會顯示其他網址。

參數

name: string
priority: number
callbackFunction: function

返回

void

範例程式碼

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

暫停
外掛程式安全性

要求開啟指定的指指令碼。如果要求成功,則返回 (true, nil)。如果要求失敗,則返回 (false, string),並且包含說明問題的字串。

如果已開啟此指令碼,此功能成功,並將標籤切換到指定的編輯器。

參數


返回

範例程式碼

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
暫停
外掛程式安全性

為指定的 script 返回 Script.Source 的指令碼輯時間。

此功能使用舊版本的內容來計算新指令碼本的內容。

如果指令碼在 指令碼編輯器 中開啟,則發出要求編輯器更新其來原始碼。編輯器可能拒絕此更新,如果 Script.Source 屬性與用戶版本的 script 不相容,當此功能呼叫時,則會重新呼叫回潛在的函數,並重新執行此操作。

回潮可能不會發生。如果回潮返回 nil,操作將取消。此函數在成功或取消操作之前會生成。

如果指令碼在編輯器中未開啟,新內容將以指令碼的內容更新到指令碼的原始碼,這是編輯器會顯示的內容。


local ses = game:GetService('ScriptEditorService')
ses:UpdateSourceAsync(Workspace.Script, function(oldContent)
return oldContent .. " World!"
end)

參數

要更新的指令。

callback: function

返回新內容的指令。


返回

void

活動

TextDocumentDidChange

外掛程式安全性

發生在 ScriptDocument 變更後。textChanged 是格式的變更結構的一個數據型:

{ range : { start : { line : number, character : number }, end : { line : number, character : number } }, text: string }

參數

document: ScriptDocument
changesArray: Variant

範例程式碼

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

外掛程式安全性

ScriptDocument 對象被摧毀之前發生,這是發生在 ScriptDocument 編輯器關閉後的事件。在此事件發生後,ScriptDocument 會進入「關閉」狀態,並且嘗試喊叫方法會發生錯誤。 1>Class.ScriptDocument1> 對象不是可重用的,

參數

oldDocument: ScriptDocument

範例程式碼

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

外掛程式安全性

發生在 ScriptDocument 對象創建後,並且與服務關聯,這會在 script 編輯器開啟後發生。

參數

newDocument: ScriptDocument

範例程式碼

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)