gdstyle 0.1.7

A fast, opinionated linter and formatter for GDScript (Godot 4.x)
Documentation
## Autoload singleton that manages game settings.
##
## Showcases common style issues found in real Godot projects:
## - Doc comments (##) before class_name (should be after)
## - Naming violations (PascalCase vars, SCREAMING_CASE vars with @export)
## - Ordering violations (@onready before @export, vars after funcs)
## - Cross-file reference patterns (SETTINGS is referenced by other scripts)
## - Private constants with underscore prefix
## - Multi-line var declarations that must survive reordering intact

class_name SettingsManager
extends Node

const _DEFAULT_SETTINGS_PATH = "user://settings.cfg"
const _FALLBACK_VOLUME = 80

@onready var settings_panel: Control = %SettingsPanel
@onready var status_label: Label = %StatusLabel
@export var SETTINGS_FILE: String = "user://game_settings.cfg"
@export var auto_save: bool = true

var SETTINGS: ConfigFile = null
var DEFAULT_VOLUME = 80
var DEFAULT_DIFFICULTY = 2
var DEFAULT_BRIGHTNESS = 0.7
var cached_display = SettingsManager.get_instance().load_value(
	"display", "BRIGHTNESS"
)

signal settings_change
signal on_settings_written
signal menu_ready
signal finished_loading
signal network_event
signal scene_load_progress
signal on_query_result

enum SettingsSection {General, Graphics, Audio, Controls}

func _ready():
	SETTINGS = _load_settings_file()
	# Apply saved values
	self.DEFAULT_VOLUME = SETTINGS.get_value("audio", "DEFAULT_VOLUME", 80)
	self.DEFAULT_DIFFICULTY = SETTINGS.get_value("gameplay", "DIFFICULTY", 2)
	self.DEFAULT_BRIGHTNESS = SETTINGS.get_value("display", "BRIGHTNESS", 0.7)
	print(DEFAULT_VOLUME)

func get_instance() -> SettingsManager:
	return self

func _load_settings_file() -> ConfigFile:
	var cf = ConfigFile.new()
	var err = cf.load(SETTINGS_FILE)
	if err != OK:
		# Use defaults
		pass
	return cf

## Persist current settings to disk.
## Creates the file if it doesn't exist.
static func SaveAndFlush(path: String):
	var cf = ConfigFile.new()
	cf.save(path)

func SaveSettings():
	SETTINGS.save(SETTINGS_FILE)
	on_settings_written.emit()

func GetValue(section: String, key: String, default_val = null):
	return SETTINGS.get_value(section, key, default_val)

static var ToggleSettingsUI = "toggle_settings_ui"