ScriptEditorService
*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.
이 서비스는 ScriptDocument 인스턴스와 상호 작용하는 데 사용됩니다.
요약
메서드
이전에 등록된 콜백 name 을 (를) 제거합니다.
이전에 등록된 콜백 name 을 (를) 제거합니다.
지정한 ScriptDocument 에 해당하는 열린 LuaSourceContainer 를 반환하거나 지정된 스크립트가 열리지 않은 경우 일반 Class.Script 으로 반환합니다.
지정된 스크립트의 편집 시간 소스를 반환합니다.
명령 줄을 포함한 현재 열려 있는 스크립트 문서 배열을 반환합니다.
우선 순위 priority 를 가진 이름 name 의 자동 완성 콜백 callbackFunction 을 등록합니다.
name이라는 이름의 스크립트 분석 콜백을 등록합니다. name 에 대한 priority 를 가진 스크립트 분석 콜백.
스크립트 편집기가 지정된 스크립트를 열도록 요청합니다. 요청이 성공하면 (예, 일) 반환합니다. 문제를 설명하는 문자열이 포함된 문자열을 반환합니다.
이전 스크립트에서 새로운 콘텐츠를 생성하고 스크립트 편집기가 열려 있거나 Script 인스턴스가 닫힌 경우 스크립트 편집기를 업데이트합니다.
이벤트
변경된 후 즉시 ScriptDocument 화재.
스크립트 편집기가 닫히는 즉시 이전 ScriptDocument 개체가 파괴됩니다.
스크립트 편집기가 열린 직후에 생성된 ScriptDocument 개체에 부모로 지정하는 경우에만 발생합니다.
속성
메서드
DeregisterAutocompleteCallback
이전에 등록된 콜백 name 을 (를) 제거합니다.
매개 변수
반환
코드 샘플
game.ScriptEditorService:DeregisterAutocompleteCallback("foo")
DeregisterScriptAnalysisCallback
이전에 등록된 콜백 name 을 (를) 제거합니다.
매개 변수
반환
코드 샘플
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService:DeregisterScriptAnalysisCallback("foo")
FindScriptDocument
지정한 ScriptDocument 에 해당하는 열린 LuaSourceContainer 를 반환하거나 지정된 스크립트가 열리지 않은 경우 일반 Class.Script 으로 반환합니다.
매개 변수
반환
코드 샘플
--!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
지정된 스크립트의 편집 시간 소스를 반환합니다.
스크립트 편집기에서 스크립트가 열려 있으면 이 메서드는 편집기에 표시되는 텍스트를 반환합니다. 스크립트 편집기에서 텍스트가 열리지 않으면 메서드는 편집기에 표시될 텍스트를 반환합니다. 편집 시간 소스는 Class.Script.Source 속성과 항상 일치하지 않습니다
매개 변수
반환
GetScriptDocuments
명령 줄을 포함한 현재 열려 있는 스크립트 문서 배열을 반환합니다.
반환
코드 샘플
--!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
우선 순위 priority 를 가진 이름 name 의 자동 완성 콜백 callbackFunction 을 등록합니다.
스크립트 편집기가 자동 완성을 호출할 때 모든 등록된 자동 완성 콜백은 순차적 우선 순위를 가진 자동 완성 요청과 응답을 가진 순차적 우선 순위를 가진 자동 완성 응답을
ciasbowFunction 은 다음과 같은 입력가져야 합니다: (Request: table, Response: table) -> table -> table
요청 테이블에는 다음과 같은 형식이 있습니다.
type Request = {position: {line: number,character: number},textDocument: {document: ScriptDocument?,script: LuaSourceContainer?}}
- position 은 자동 완성되는 커서 위치입니다.
- textDocument.document 는 열 ScriptDocument 를 완료하고 있습니다, 만약 존재한다면.
- textDocument.script 는 다음과 같이 완료되었습니다. LuaSourceContainer 는Class.LuaSourceContainer 입니다.
두 개의 textDocument.document 및 textDocument.script 가 있으면 서로 일치합니다: req.textDocument.document:GetScript() == req.textDocument.script
응답 테이블에는 다음과 같은 형식이 있습니다.
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 는 완료 항목의 배열입니다. 이 배열의 순서는 중요하지 않으며 편집기에서 사용자 유형별로 재정렬됩니다.
- Response.items[n].label 는 자동 완성 메뉴에 표시되는 항목의 레이블입니다.
- Response.items[n].kind 는 이 항목의 자동 완성 항목 유형을 지정합니다. 주로 이것은 편집기에 표시된 아이템의 아이콘을 제어합니다. 모든 종류에는 고유한 아이콘이 없습니다. 지정되지 않으면 편집기는 "텍스트" 아이콘을 표시합니다. 지원되지 않는 종류는 속성을
- Response.items[n].tags 는 이 완성 아이템설명하는 태그 배열을 지정합니다. Enum.CompletionItemTag 에 대한 자세한 내용은 함수에 참조하십시오.
- Response.items[n].details 는 완료 아이템대한 세부 정보를 설명하는 문자열을 지정합니다. 기본 항목의 경우 이것은 문자열 표현입니다. 문서 위젯이 표시되려면 documentation 이 있어야 하지만, documentation.value 는 비어 있을 수 있습니다.
- Response.items[n].documentation 은 문서화의 메인 바디를 지정합니다. value 필드에 있는 문서화 창은 비워도 있지만 세부 정보 또는 오버로드가 지정된 경우 문서화 창이 표시됩니다. documentation 이 있으면 세부 정보 또는 오버로드가 지정된 경우 문서화 창이 표시됩니다.
- Response.items[n].overloads 는 함수 자동 완성의 과부하 수를 지정합니다.
- Response.items[n].learnMoreLink 크리에이터 도큐먼트의 관련된 페이지로 연결합니다. 이 URL은 생성하려면 https 요청이어야 합니다.roblox.com; 다른 URL은 편집기에 표시되지 않습니다.
- Response.items[n].codeSample 는 완료 아이템샘플 사용을 지정합니다. documentation 는 이 필드를 표시하려면 비어 있어야 합니다.
- Response.items[n].preselect 에서 사용자가 선택한 완료 항목을 편집이 다른 모든 항목 앞에 정렬하고 기본적으로 사용자에게 선택합니다. 효과는 없음 부분이 잘못되었거나 없는 경우.
- Response.items[n].textEdit 이 텍스트 편집을 적용하려면 현재 완료를 수락하십시오. 새 텍스트로 위치 시작 및 끝을 대체합니다.
콜백이 잘못된 결과를 반환하거나 오류를 만나면 편집기는 수정된 응답 테이블을 삭제하고 내장 자동 완성 결과 목록을 사용합니다.
매개 변수
반환
코드 샘플
--!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
스크립트 분석 콜백을 등록합니다 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 는 라이터에 의해 강조해야 하는 텍스트 범위를 나타내며, 라인/문자를 시작 하는 데 필요한 라인/문자를 지정 하 고 라인/문자를 중지 하는 데 필요한 라인/문자를 지정 합니다.
- code 는 메시지에 대한 레이블입니다.
- message 는 줄에 대한 경고 메시지입니다. 이 메시지는 스크립트 편집기의 줄에 커서를 올린 경우 도구 모음에 나타납니다.
- severity 은 진단을 위한 Enum.Severity 값입니다. 이 값은 Studio의 스크립트 분석 도구에서 진단을 카테고리화하고, 텍스트가 스크립트 편집기에 하이라이트되는 방법을 결정합니다.
- codeDescription 크리에이터 도큐먼트의 관련 페이지로 연결합니다. 이 URL은 크리에이터 도큐먼트의 https 요청이어야 합니다. 편집기에서 다른 URL을 표시하지 않습니다.
매개 변수
반환
코드 샘플
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
스크립트 편집기가 지정된 스크립트를 열도록 요청합니다. 요청이 성공하면 (예, 일) 반환합니다. 문제를 설명하는 문자열이 포함된 문자열을 반환합니다.
스크립트가 이미 열려 있으면 이 함수가 성공하고 탭을 연결된 편집기로 전환합니다.
매개 변수
반환
코드 샘플
--!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
지정된 스크립트에 대해 Script.Source 편집 시간을 반환합니다.
이 함수는 스크립트의 이전 콘텐츠를 사용하여 새로운 콘텐츠를 계산하기 위해 패스된 콜백을 호출합니다.
스크립트가 스크립트 편집기에 열려 있으면 편집기에 대한 요청을 발생시킵니다. 편집기는 Script.Source 속성이 사용자의 스크립트 버전과 동기화되지 않아 이 업데이트를 거부할 수 있습니다. 이 경우 콜백이 다시 호출되고 시도가 반복
콜백이 반환하지 않을 수 있습니다. 콜백이 nil 을 반환하면 작업이 취소됩니다. 이 함수는 작업이 취소되거나 성공할 때까지 생성됩니다.
스크립트가 편집기에서 열리지 않으면 새로운 콘텐츠가 스크립트 소스에 업데이트되며, 편집기가 열린 경우 표시할 텍스트입니다.
local ses = game:GetService('ScriptEditorService')
ses:UpdateSourceAsync(Workspace.Script, function(oldContent)
return oldContent .. " World!"
end)
매개 변수
업데이트할 스크립트 인스턴스.
새로운 스크립트 콘텐츠를 반환하는 함수입니다.
반환
이벤트
TextDocumentDidChange
Class.ScriptDocument 변경 내용 후에 즉시 발생합니다. textChanged는 형식의 변경 구조 배열입니다.
{ range : { start : { line : number, character : number }, end : { line : number, character : number } }, text: string }
매개 변수
코드 샘플
--!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 개체는 "닫힌"상태로 전환되며,
매개 변수
코드 샘플
--!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 개체에 부모로 지정하는 경우에만 발생합니다.
매개 변수
코드 샘플
--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
ScriptEditorService.TextDocumentDidOpen:Connect(function(scriptDocument)
print("Opened", scriptDocument)
end)