bone-forge/addons/SimpleFormatOnSave/simple_format_on_save.gd

83 lines
2.3 KiB
GDScript3
Raw Normal View History

2025-06-27 12:07:21 +00:00
@tool
extends EditorPlugin
var FORMAT_ACTION := "simple_format_on_save/format_code"
var format_key: InputEventKey
var formatter: Formatter
func _enter_tree():
add_tool_menu_item("Format (Ctrl+Alt+L)", _on_format_code)
if InputMap.has_action(FORMAT_ACTION):
InputMap.erase_action(FORMAT_ACTION)
InputMap.add_action(FORMAT_ACTION)
format_key = InputEventKey.new()
format_key.keycode = KEY_L
format_key.ctrl_pressed = true
format_key.alt_pressed = true
InputMap.action_add_event(FORMAT_ACTION, format_key)
resource_saved.connect(on_resource_saved)
func _exit_tree():
remove_tool_menu_item("Format (Ctrl+Alt+L)")
InputMap.erase_action(FORMAT_ACTION)
resource_saved.disconnect(on_resource_saved)
# Return true if formatted code != original code
func _on_format_code() -> bool:
var current_editor := EditorInterface.get_script_editor().get_current_editor()
if not (current_editor and current_editor.is_class("ScriptTextEditor")):
return false
var text_edit = current_editor.get_base_editor()
var code = text_edit.text
if not formatter:
formatter = Formatter.new()
var formatted_code = formatter.format_code(code)
if not formatted_code:
return false
if code.length() == formatted_code.length() and code == formatted_code:
return false
var scroll_horizontal = text_edit.scroll_horizontal
var scroll_vertical = text_edit.scroll_vertical
var caret_column = text_edit.get_caret_column(0)
var caret_line = text_edit.get_caret_line(0)
text_edit.text = formatted_code
text_edit.set_caret_line(caret_line)
text_edit.set_caret_column(caret_column)
text_edit.scroll_horizontal = scroll_horizontal
text_edit.scroll_vertical = scroll_vertical
return true
func _shortcut_input(event: InputEvent) -> void:
if event is InputEventKey and event.is_pressed():
if Input.is_action_pressed(FORMAT_ACTION):
_on_format_code()
# CALLED WHEN A SCRIPT IS SAVED
func on_resource_saved(resource: Resource):
if resource is Script:
var script: Script = resource
var current_script = get_editor_interface().get_script_editor().get_current_script()
# Prevents other unsaved scripts from overwriting the active one
if current_script == script:
var is_modified: bool = _on_format_code()
#if is_modified:
#print_rich("[color=#636363]Auto formatted code[/color]")