skills/gdscript-syntax-rules/SKILL.md
--- name: gdscript-syntax-rules description: Enforcement checklist cho GDScript 4. Bắt buộc chạy TRƯỚC khi viết .gd và TRƯỚC khi mark done. Trigger khi: viết GDScript, parse error, import failure, hoặc sau khi tạo file .gd. --- # GDScript 4 — Syntax Rules & Enforcement Checklist ## Khi nào dùng skill này - Trước khi viết BẤT KỲ file .gd nào - Sau khi viết, trước khi claim "done" - Khi gặp parse error hoặc import/class_name failure - Khi convert code từ GDScript 3 / JavaScript / C# sang GDScrip
npx skillsauth add dvduongth/skills skills/gdscript-syntax-rulesInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Đây là nguồn gốc của 90% parse errors từ LLMs. Ghi nhớ và kiểm tra mọi file.
❌ KHÔNG BAO GIỜ dùng:
extends preload("res://path/to/file.gd")
✅ LUÔN dùng:
extends ClassName ← nếu parent có class_name ClassName
extends "res://path/to/file.gd" ← string literal (nếu không có class_name)
❌ emit_signal("signal_name", arg1, arg2)
✅ signal_name.emit(arg1, arg2)
❌ .connect("signal_name", self, "_method_name")
✅ signal_name.connect(_method_name)
✅ signal_name.connect(func(args): ...) ← lambda
❌ var x setget _set_x, _get_x
✅ var x: T: get: return _x set(v): _x = v
❌ onready var, export var, tool
✅ @onready var, @export var, @tool
❌ yield(get_tree(), "idle_frame")
✅ await get_tree().process_frame
static func KHÔNG có self → không thể truy cập:
@onready varstr(), get_node(), add_child())tr() — dùng string literal hoặc nhận string qua param@onready var nàoself.❌ Sai:
static func build_label(text: String) -> Label:
var lb := Label.new()
lb.text = tr(text) # tr() là instance method!
return lb
✅ Đúng:
static func build_label(translated_text: String) -> Label:
var lb := Label.new()
lb.text = translated_text
return lb
Sau khi viết xong script, bắt buộc cross-check từng @onready với file .tscn:
@onready var _x: Type = $Path/To/Node:
$Panel Button sai → $"Panel Button" hoặc đổi tên node$bg/btn_close vs $btn_close — đọc .tscn để confirm$panelBgSetting vs $panel_bg_setting — Godot node names case-sensitiveKhi feature có nhiều file .gd (main + helpers + wiring):
script_validate trên từng file .gdscript_validate trả về stale errors (timestamp cũ) → bỏ qua, dùng manual scaneditor_get_errors SAU KHI project reload, không ngay sau khi saveextends preload — nếu có → fix ngayemit_signal\( — nếu có → fix ngaysnake_case, prefix theo domain (_lbl_, _btn_, _img_)_ (e.g. _btn_close)PascalCase với domain prefix: SceneLobbyFull, LayerSettingConsolefunc _ready() -> void:
ShowcaseOverlay.attach_if_standalone(self)
# ... rest of _ready
# ❌ Sai
@onready var btn_close = $bg/btn_close
var count = 0
# ✅ Đúng
@onready var _btn_close: TextureButton = $bg/btn_close
var _count: int = 0
# Ở đầu class, sau class_name/extends
signal login_completed
signal close_requested(data: Dictionary)
development
Hiểu sâu bất kỳ codebase nào đã được GitNexus index — architecture, execution flows, symbol relationships, blast radius. Dùng khi hỏi về codebase architecture, symbol context, impact analysis, hoặc index status.
tools
Search GIF providers with CLI/TUI, download results, and extract stills/sheets.
documentation
Fetch GitHub issues, spawn sub-agents to implement fixes and open PRs, then monitor and address PR review comments. Usage: /gh-issues [owner/repo] [--label bug] [--limit 5] [--milestone v1.0] [--assignee @me] [--fork user/repo] [--watch] [--interval 5] [--reviews-only] [--cron] [--dry-run] [--model glm-5] [--notify-channel -1002381931352]
tools
Gemini CLI for one-shot Q&A, summaries, and generation.