ScriptEditorService

显示已弃用

*此内容使用人工智能(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,或零,如果指定的脚本未打开。

参数


返回

代码示例

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

当脚本编辑器启用自动完成时,所有注册的自动完成回调都会按照上升的优先级顺序调用,与自动完成请求和回应。多个回调可能会共享优先级,但然后它们的调用顺序是不可预知的。每个回调都是否返回一个响应表以与响应输入表

调用函数 必须有以下输入:(Request: table, Response: table) -> table

请求表有以下格式:


type Request = {
position: {
line: number,
character: number
},
textDocument: {
document: ScriptDocument?,
script: LuaSourceContainer?
}
}
  • position 是您自动完成的一个索引位置。
  • textDocument.document 是您正在完成的 ScriptDocument,如果它存在。
  • textDocument.script 是您正在完成的,如果它存在。

如果 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 指定这是什么类型的自动完成项目。 主要控制图像在编辑器中提供给项目的图标。 不支持的种类有默认的图标志。 如果未指定,编辑器将显示“属性”标志。
  • Response.items[n].tags 指定一个描述此完成物品的标签阵列。见Enum.CompletionItemTag 了解其功能。
  • Response.items[n].details 指定一个描述完成物品详细信息的字符串。对于默认物品,这是对其输入的字符串表示。注意,为了让文档 widget 显示,documentation 必须存在,但 documentation.value 可能为空。
  • Response.items[n].documentation 指定了文档的主要内容在其 value 字段。documentation 已存在,即使值为空,文档窗口仍会显示,因为有细节或超载指定。
  • Response.items[n].overloads 指定函数自动完成的过载数量。
  • Response.items[n].learnMoreLink 链接到创建者文档上的相关页面。此 URL 必须是 https 请求创创建 or 创作 roblox.com 的所有其他 URL 都不会在编辑器中显示。
  • 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
插件安全性

注册一个名为 name 的脚本分析回调 priority ,并且在 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 代表一个文本范围,该范围应该被插件高亮,提供要开始高亮的线/角色和要停止高亮的线/角色。
  • code 是对消信息的标签。
  • message 是对线的警告消息。当用户将鼠标悬停在线上时,警告消息也会在工具提示上显示。
  • severity 是诊断的Enum.Severity 值。这确定诊断在 Studio 中的脚本分析工具中的分类,以及文本在脚本编辑器中的显示。
  • codeDescription 链接到创建者文档上的相关页面。此链接必须是一个 https 请求到 create.roblox.com ;不显示其他 URL 在编辑器中。

参数

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

暂停
插件安全性

脚本编辑器打开指定的脚本。如果请求成功,返回 (真,零)。如果请求失败,则返回 (错误,字符串),并描述问题。

如果脚本已经打开,这个函数成功并将标签切换到关联的编辑器。

参数


返回

代码示例

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.Source 的编辑时间。

此函数使用脚本的旧内容调用传回调用,计算新内容。

如果脚本在 脚本编辑器 中打开,它会向编辑器发出更新源的请求。如果编辑器的 Script.Source 属性与用户版本的脚本不兼容,那么调用此函数时,调用回调会重新调用,试图重新尝试。

调用可能不会返回。如果调用返回 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 对象不可重用,即使脚本编辑器重新打开相同

参数

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 对象创建后不久,这会在脚本编辑器打开后的几分钟内发生。

参数

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)