ScriptEditorService
*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。
このサービスは、ScriptDocument インスタンスとインタラクトするために使用されます。
概要
方法
以前に登録されたコールバックを name という名前で削除します。
以前に登録されたコールバックを name という名前で削除します。
指定の ScriptDocument に対応する開く LuaSourceContainer を返します。また、指定のスクリプトが開くことがない場合は、Class.ScriptDocument を返します。
指定されたスクリプトの編集時間ソースを返します。
コマンドバーを含む現在開いているスクリプトのアレイを返します。
自動完了コールバックを登録します callbackFunction 名前の name は、優先順位の priority で優先順位を付与します。
スクリプト分析コールバックを登録します callbackFunction 名前の 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.ScriptDocument を返します。
パラメータ
戻り値
コードサンプル
--!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
指定されたスクリプトの編集時間ソースを返します。
スクリプトが スクリプトエディター で開いている場合、このメソッドは、編集中に表示されているテキストを返します。スクリプトが編集中でない場合は、編集時間ソースは、編集された場合に Script.Source プロパティと一致しません。編集時間ソースは、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
自動完了コールバックを登録します 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 は、存在する場合、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 は、作成する roblox.com の https でなければなりません。編集器には、他の 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 値です。これは、スクリプト分析ツールでのスクリプトのカテゴリ化、およびスクリプトエディタでのテキストのハイライトについてどのようにカテゴライズされるかを決定します。
- codeDescription クリエイターのドキュメントにリンクされた関連するページへのリンク。この URL は、https リクエストで、create.roblox.com に表示されません。
パラメータ
戻り値
コードサンプル
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
Class.Script.Source のスクリプトの編集時間を返します。
この関数は、スクリプトの古いコンテンツを使用して、スクリプトの新しいコンテンツを計算するために呼び出されます。
スクリプトが スクリプトエディター で開いている場合、エディターはスクリプトのソースを更新するようにリクエストします。編集器は、Script.Source プロパティがユーザーのスクリプトバージョンと一致しないため、この関数が呼び出されたときにコールバックが再び呼び出さ
コールバックはストランクアウトする可能性があります。コールバックが nil を返すと、オペレーションはキャンセルされます。この関数は、オペレーションがキャンセルされるまでまたは成功するまで生成されます。
スクリプトがエディタで開くことがない場合、新しいコンテンツはスクリプトソースに更新されます。これは、編集者が開くと表示するテキストです。
local ses = game:GetService('ScriptEditorService')
ses:UpdateSourceAsync(Workspace.Script, function(oldContent)
return oldContent .. " World!"
end)
パラメータ
スクリプトインスタンスを更新する必要があります。
新しいスクリプトコンテンツを返す関数。
戻り値
イベント
TextDocumentDidChange
変更後に直ちに 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 は「クローズド」状態になり、ScriptDocument のメソッドを呼び出そうとするとエラーが発生します。 2>Class
パラメータ
コードサンプル
--!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)