ScriptEditorService

Mostrar obsoleto

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Não criável
Serviço
Não replicado

Este serviço é usado para interagir com ScriptDocument.

Resumo

Métodos

Eventos

Propriedades

Métodos

DeregisterAutocompleteCallback

()
Segurança do plugin

Remove um retorno de chamada previamente registrado com o nome name.

Parâmetros

name: string
Valor Padrão: ""

Devolução

()

Amostras de código

ScriptEditorService:DeregisterAutocompleteCallback

game.ScriptEditorService:DeregisterAutocompleteCallback("foo")

DeregisterScriptAnalysisCallback

()
Segurança do plugin

Remove um retorno de chamada previamente registrado com o nome name.

Parâmetros

name: string
Valor Padrão: ""

Devolução

()

Amostras de código

ScriptEditorService:DeregisterScriptAnalysisCallback

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

FindScriptDocument

Segurança do plugin

Retorna o aberto ScriptDocument correspondente ao dado LuaSourceContainer ou nil se o script dado não estiver aberto.

Parâmetros

Valor Padrão: ""

Devolução

Amostras de código

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

Segurança do plugin

Retorna a fonte de tempo de edição para o script dado.

Se o script estiver aberto no Editor de Script, este método retorna o texto que está sendo exibido no editor.Se o script não estiver aberto no editor, o método retorna o texto que o editor exibiria se fosse aberto.A fonte de tempo de edição nem sempre é consistente com a propriedade Script.Source .

Parâmetros

Valor Padrão: ""

Devolução

GetScriptDocuments

Instances
Segurança do plugin

Retorna um array de documentos de script atualmente abertos, incluindo a barra de comando.


Devolução

Instances

Amostras de código

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

()
Segurança do plugin

Registra um retorno de chamada de preenchimento automático callbackFunction chamado name com prioridade priority.

Quando o Editor de Script invoca o preenchimento automático, todos os chamados de retorno de preenchimento automático registrados são chamados em ordem crescente de prioridade com a solicitação e a resposta de preenchimento automático.Múltiplos retornos de chamada podem compartilhar uma prioridade, mas então sua ordem de chamada é imprevisível.Cada chamada de retorno tem a intenção de retornar uma tabela de resposta com o mesmo formato da tabela de entrada de resposta.Chamadas de volta não devem retornar.O primeiro retorno de chamada invocado recebe a resposta do autocompletamento interno como sua tabela de resposta e os próximos retornos de chamada recebem a saída do chamado anterior como sua tabela de resposta.Os retornos de chamada podem modificar a tabela passada ou retornar uma nova tabela do mesmo formato.

O callbackFunction deve ter o seguinte digitar: (Request: table, Response: table) -> table

A tabela de Solicitações tem o seguinte formato:


type Request = {
position: {
line: number,
character: number
},
textDocument: {
document: ScriptDocument?,
script: LuaSourceContainer?
}
}
  • position é a posição do cursor indexada de um onde você está preenchendo automaticamente.
  • textDocument.document é o aberto ScriptDocument que você está completando, se ele existir.
  • textDocument.script é o LuaSourceContainer que você está concluindo, se ele existir.

Se ambos textDocument.document e textDocument.script estiverem presentes, então eles correspondem um ao outro: req.textDocument.document:GetScript() == req.textDocument.script

A tabela de Resposta tem o seguinte formato:


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 é um array dos itens de conclusão. A ordem deste array é insignificante e ele recorre ao editor quando o usuário digita.
  • Response.items[n].label é a etiqueta do item que será exibido no menu de preenchimento automático.
  • Response.items[n].kind especifica que tipo de item de preenchimento automático é este.Primeiramente, isso controla o ícone dado ao item no editor.Nem todos os tipos têm um ícone único.Se não for especificado, o editor usa o ícone "Texto".Tipos não suportados padrão para exibir o ícone "Propriedade".
  • Response.items[n].tags especifica um array de tags que descrevem este item de conclusão. Veja o Enum.CompletionItemTag para detalhes sobre sua função.
  • Response.items[n].details especifica uma string que descreve detalhes sobre o item de conclusão.Para itens padrão, esta é uma representação em string do seu digitar.Observe que, para que o widget de documentação seja exibido, documentation deve estar presente, mas documentation.value pode estar vazio.
  • Response.items[n].documentation especifica o corpo principal da documentação em seu campo value.documentation está presente, mesmo que o valor esteja vazio, então a janela de documentação é exibida se detalhes ou sobrecarregamentos forem especificados.
  • Response.items[n].overloads especifica o número de sobrecarregamentos de uma conclusão automática de função.
  • Response.items[n].learnMoreLink links para uma página relevante nos docs do criador.Este URL deve ser um pedido https para Criar.roblox.com; nenhum outro URL será exibido no editor.
  • Response.items[n].codeSample especifica um uso de amostra do item de conclusão. documentation deve ser não vazio para exibir este campo.
  • Response.items[n].preselect Se verdadeiro, o editor classifica este item de conclusão antes de todos os outros e o seleciona para o usuário por padrão. Nenhum efeito se falso ou ausente.
  • Response.items[n].textEdit Se presente, aceitar a conclusão aplica esta edição de texto - inserindo ou substituindo o espaço entre as posições início e fim com o novo texto.

Se um retorno de chamada retornar um resultado mal formatado ou encontrar um erro, o editor descarta a tabela de resposta modificada e usa a lista de resultados de preenchimento automático integrada.

Parâmetros

name: string
Valor Padrão: ""
priority: number
Valor Padrão: ""
callbackFunction: function
Valor Padrão: ""

Devolução

()

Amostras de código

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

()
Segurança do plugin

Registra um retorno de análise de script callbackFunction chamado name com priority .Quando a Análise de Script no Studio é executada, todos os retornos registrados são chamados em ordem crescente de prioridade.Cada chamada de volta tem a intenção de retornar uma tabela de resposta que corresponda ao formato especificado abaixo.Chamadas de volta não devem retornar.

A tabela de solicitações tem o seguinte formato, onde script é o LuaSourceContainer que vai ser analisado.


type Request = {
script: LuaSourceContainer?
}

A tabela de respostas tem o seguinte formato, onde diagnostics é um array de tabelas de diagnóstico. Cada tabela de diagnóstico tem as entradas listadas abaixo.


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 representa um alcance de texto que deve ser destacado pelo linter, fornecendo qual linha/personagem para começar a destacar e qual linha/personagem para parar de destacar.
  • code é uma etiqueta para a mensagem.
  • message é uma mensagem de aviso a ser exibida para a linha.Isso também aparecerá em uma dica de ferramenta quando o usuário passar o cursor sobre a linha no Editor de Script.
  • severity é um valor Enum.Severity para os diagnósticos.Isso determina como o diagnóstico é categorizado na ferramenta de Análise de Script no Studio, bem como como o texto é destacado no Editor de Script.
  • codeDescription links para uma página relevante nos docs do criador. Este URL deve ser um https pedido para create.roblox.com ; nenhum outro URL será exibido no editor.

Parâmetros

name: string
Valor Padrão: ""
priority: number
Valor Padrão: ""
callbackFunction: function
Valor Padrão: ""

Devolução

()

Amostras de código

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

Rendimentos
Segurança do plugin

Pedidos que um Editor de Script abra o script especificado.Retorna (verdadeiro, nil) se a solicitação for bem-sucedida.Retorna (false, string / cadeia / texto) se a solicitação falhar, com uma string que descreve o problema.

Se o script já estiver aberto, essa função é bem-sucedida e muda as abas para o editor associado.

Parâmetros

Valor Padrão: ""

Devolução

Amostras de código

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

()
Rendimentos
Segurança do plugin

Retorna o tempo de edição Script.Source.

Essa função chama o retorno de chamada passado usando o conteúdo antigo do script para calcular o novo conteúdo do script.

Se o script estiver aberto no Editor de Script, então ele envia um pedido ao editor para atualizar seu original.O editor pode rejeitar esta atualização se a propriedade Script.Source estiver desatualizada com a versão do usuário do script quando esta função foi chamada, caso em que o retorno será reinvocado e a tentativa será repetida.

O retorno de chamada pode não retornar.Se o retorno do callback for nil, a operação é cancelada.Essa função retorna até que a operação seja cancelada ou tenha sucesso.

Se o script não estiver aberto no editor, as novas atualizações de conteúdo serão enviadas para a originaldo script, que é o texto que o editor exibiria se fosse aberto.


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

Parâmetros

Instância de script para ser atualizada.

Valor Padrão: ""
callback: function

A função para retornar novo conteúdo de script.

Valor Padrão: ""

Devolução

()

Eventos

TextDocumentDidChange

Segurança do plugin

Incêndios logo após uma mudança ScriptDocument depois de uma mudança. O textChanged é um array de estruturas de mudança do formato:

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

Parâmetros

document: ScriptDocument
changesArray: Variant

Amostras de código

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

Segurança do plugin

Incêndios apenas antes que um objeto ScriptDocument seja destruído, o que acontece logo após o editor de scripts fechar.Após este evento disparar, o ScriptDocument entra em um estado "Fechado" e tentar chamar seus métodos lança um erro.Objetos ScriptDocument não reutilizáveis, mesmo que o editor de scripts reabra o mesmo script.

Parâmetros

oldDocument: ScriptDocument

Amostras de código

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

Segurança do plugin

Fogos apenas depois que um objeto ScriptDocument é criado e associado ao serviço, o que acontece logo após o editor de scripts abrir.

Parâmetros

newDocument: ScriptDocument

Amostras de código

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)