ScriptEditorService
*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.
Este serviço é usado para interagir com ScriptDocument.
Resumo
Métodos
Remove um retorno de chamada previamente registrado com o nome name.
Remove um retorno de chamada previamente registrado com o nome name.
Retorna o aberto ScriptDocument correspondente ao dado LuaSourceContainer ou nil se o script dado não estiver aberto.
Retorna a fonte de tempo de edição para o script dado.
Retorna um array de documentos de script atualmente abertos, incluindo a barra de comando.
Registra um retorno de chamada de preenchimento automático callbackFunction chamado name com prioridade priority.
Registra um retorno de análise de script callbackFunction chamado name com priority .
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.
Gera novo conteúdo a partir do antigo script e atualiza o editor de script se ele estiver aberto, ou a instância se o editor de script estiver fechado.
Eventos
Incêndios logo após uma alteração de ScriptDocument 2 mudanças.
Incêndios apenas antes que um objeto ScriptDocument seja destruído, o que acontece logo após o editor de scripts fechar.
Fogos apenas depois que um objeto ScriptDocument é criado e associado ao serviço, o que acontece logo após o editor de scripts abrir.
Propriedades
Métodos
DeregisterAutocompleteCallback
Remove um retorno de chamada previamente registrado com o nome name.
Parâmetros
Devolução
Amostras de código
game.ScriptEditorService:DeregisterAutocompleteCallback("foo")
DeregisterScriptAnalysisCallback
Remove um retorno de chamada previamente registrado com o nome name.
Parâmetros
Devolução
Amostras de código
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService:DeregisterScriptAnalysisCallback("foo")
FindScriptDocument
Retorna o aberto ScriptDocument correspondente ao dado LuaSourceContainer ou nil se o script dado não estiver aberto.
Parâmetros
Devolução
Amostras de código
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
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
Devolução
GetScriptDocuments
Retorna um array de documentos de script atualmente abertos, incluindo a barra de comando.
Devolução
Amostras de código
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
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 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 é 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
Devolução
Amostras de código
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
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
Devolução
Amostras de código
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
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
Devolução
Amostras de código
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
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.
A função para retornar novo conteúdo de script.
Devolução
Eventos
TextDocumentDidChange
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
Amostras de código
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
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
Amostras de código
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
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
Amostras de código
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)