# Djls Ruff Ast

> Use when editing djls-extraction or Rust code that consumes Ruff Python AST APIs, including parse_module, parameters, boxed expressions, f-strings, or exception handlers. Handles known Ruff AST shape gotchas in django-language-server.

- Skill: `joshuadavidthomas/djls-ruff-ast` (Agent Skill)
- Install (CLI): `npx skillmds@latest add joshuadavidthomas/djls-ruff-ast`
- Raw SKILL.md: https://api.skillmd.com/api/skills/joshuadavidthomas/djls-ruff-ast/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: joshuadavidthomas (https://skillmd.com/u/joshuadavidthomas)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/joshuadavidthomas/djls-ruff-ast

---


# DJLS Ruff AST

Use this before editing `djls-extraction` or code that consumes Ruff Python AST nodes.

## Known API shapes

- Parse modules with `ruff_python_parser::parse_module(source)` and call `.into_syntax()` for `ModModule` AST.
- Function defaults are per-parameter. There is no top-level `defaults` field.
  - Use `ParameterWithDefault { parameter, default: Option<Box<Expr>> }`.
- `StmtWhile.test`, `StmtIf.test`, and similar fields are `Box<Expr>`.
  - Dereference with `&*` for pattern matching.
- `FStringValue` uses `.iter()`, not `.parts()`, for `FStringPart` iteration.
- `ExceptHandler::ExceptHandler` is irrefutable.
  - Use `let`, not `if let`.

