grunk/utilities/regenerate_docs/regenerate_docs.gd

52 lines
1.2 KiB
GDScript3
Raw Normal View History

2025-04-17 14:54:59 -06:00
@tool
extends EditorScript
## Regenerates all documentation for custom scripts
## Workaround for https://github.com/godotengine/godot/issues/72406
const ROOT_DIR := "res://"
const SCRIPT_EXTENSION := ".gd"
const PATH_LENGTH_LIMIT := 128
const PATH_BLACKLIST := [
"res://utilities/regenerate_docs", # This script MUST blacklist itself!
"res://venv",
"res://data_build",
"res://data_sandbox",
]
func regen_docs(script_path: String) -> void:
print("Regenerating docs for ", script_path)
ResourceSaver.save(load(script_path))
func walk_directory(path: String) -> void:
if len(path) > PATH_LENGTH_LIMIT:
push_warning("Might be in a loop, skipping path ", path)
return
if path in PATH_BLACKLIST:
push_warning("Skipping blacklisted path ", path)
return
var dir := DirAccess.open(path)
if dir:
dir.include_hidden = false
dir.include_navigational = false
dir.list_dir_begin()
var file := dir.get_next()
while file:
var file_path := path.path_join(file)
if dir.current_is_dir():
walk_directory(file_path)
elif file.ends_with(SCRIPT_EXTENSION):
regen_docs(file_path)
file = dir.get_next()
func _run() -> void:
print("Regenerating custom script docs...")
walk_directory(ROOT_DIR)
print("Done!")