@tool
class_name GDLintPlugin extends EditorPlugin

# If you've installed gdlint in a venv, you may want to overwrite this
const GDLINT: String = "gdlint"


func _enter_tree() -> void:
	assert(not OS.execute(GDLINT, ["-h"]), "Could not find gdLint binary at {0}".format([GDLINT]))
	resource_saved.connect(on_save)


func _exit_tree() -> void:
	resource_saved.disconnect(on_save)


func on_save(resource: Resource) -> void:
	# Run linting when a script resource is saved
	if resource is Script:
		var script: Script = resource
		var filepath: String = ProjectSettings.globalize_path(resource.resource_path)

		var script_editor = EditorInterface.get_script_editor()
		var code_editor: CodeEdit = (
			script_editor.get_current_editor().get_base_editor()
			if script_editor.get_current_script() == script
			else null
		)

		var gdlint_output: Array[String] = []
		var error: int = OS.execute(GDLINT, [filepath], gdlint_output, true)
		if error:
			push_warning("gdLint:\n" + gdlint_output[0])