跳到主要内容
知仓学习社ZHICANG

makepad-dsl

|

不碰外部(只输出文字)无严重或高危命中sickn33/agentic-awesome-skills

它会碰到什么

扫了多少1 个文本文件,5 KB
它会碰到什么不碰外部(只输出文字)
命中总数0 处
命中统计严重 0 · 高 0 · 中 0 · 低 0

这一栏是扫描器报的事实,不是结论。命中多不等于有毒(安全工具、规则库、示例脚本本来就会包含危险写法),命中少也不等于干净。它和你手上的凭据、文件、网络有什么关系,需要你自己看。

技能内容

Makepad DSL Skill

> Version: makepad-widgets (dev branch) | Last Updated: 2026-01-19

>

> Check for updates: https://crates.io/crates/makepad-widgets

You are an expert at the Rust makepad-widgets crate DSL. Help users by:

  • Writing code: Generate DSL code following the patterns below
  • Answering questions: Explain DSL syntax, inheritance, property overriding

When to Use

  • You need help with Makepad live_design! syntax, object definitions, or inheritance patterns.
  • The task involves widget declarations, property overrides, prototypes, or DSL composition rules.
  • You want Makepad DSL-specific examples rather than generic Rust syntax advice.

Documentation

Refer to the local files for detailed documentation:

  • ./references/dsl-syntax.md - Complete DSL syntax reference
  • ./references/inheritance.md - Inheritance patterns and examples

IMPORTANT: Documentation Completeness Check

Before answering questions, Claude MUST:

  1. Read the relevant reference file(s) listed above
  2. If file read fails or file is empty:
  • Inform user: "本地文档不完整,建议运行 /sync-crate-skills makepad --force 更新文档"
  • Still answer based on SKILL.md patterns + built-in knowledge
  1. If reference file exists, incorporate its content into the answer

Key Patterns

1. Anonymous Object

{
    width: 100.0
    height: 50.0
    color: #FF0000
}

2. Named Object (Prototype)

MyButton = {
    width: Fit
    height: 40.0
    padding: 10.0
    draw_bg: { color: #333333 }
}

3. Inheritance with Override

PrimaryButton = <MyButton> {
    draw_bg: { color: #0066CC }  // Override parent color
    draw_text: { color: #FFFFFF }  // Add new property
}

4. Widget Instantiation

<View> {
    // Inherits from View prototype
    width: Fill
    height: Fill

    <Button> { text: "Click Me" }  // Child widget
    <Label> { text: "Hello" }      // Another child
}

5. Linking Rust Struct to DSL

// In live_design!
MyWidget = {{MyWidget}} {
    // DSL properties
    width: 100.0
}

// In Rust
#[derive(Live, LiveHook, Widget)]
pub struct MyWidget {
    #[deref] view: View,
    #[live] width: f64,
}

DSL Syntax Reference

| Syntax | Description | Example |

|--------|-------------|---------|

| { ... } | Anonymous object | { width: 100.0 } |

| Name = { ... } | Named prototype | MyStyle = { color: #FFF } |

| <Name> { ... } | Inherit from prototype | <MyStyle> { size: 10.0 } |

| {{RustType}} | Link to Rust struct | App = {{App}} { ... } |

| name = <Widget> | Named child widget | btn = <Button> { } |

| dep("...") | Resource dependency | dep("crate://self/img.png") |

Property Types

| Type | Example | Description |

|------|---------|-------------|

| Number | width: 100.0 | Float value |

| Color | color: #FF0000FF | RGBA hex color |

| String | text: "Hello" | Text string |

| Enum | flow: Down | Enum variant |

| Size | width: Fit | Fit, Fill, or numeric |

| Object | padding: { top: 10.0 } | Nested object |

| Array | labels: ["A", "B"] | List of values |

Inheritance Rules

  1. Eager Copy: All parent properties are copied immediately
  2. Override: Child can override any parent property
  3. Extend: Child can add new properties
  4. Nested Override: Override nested objects partially
Parent = {
    a: 1
    nested: { x: 10, y: 20 }
}

Child = <Parent> {
    a: 2              // Override a
    b: 3              // Add new property
    nested: { x: 30 } // Override only x, y remains 20
}

When Writing Code

  1. Use <Widget> syntax to inherit from built-in widgets
  2. Define reusable styles as named prototypes
  3. Use {{RustType}} to link DSL to Rust structs
  4. Override only properties that need to change
  5. Use meaningful names for child widget references

When Answering Questions

  1. Explain inheritance as "eager copy" - properties are copied at definition time
  2. Emphasize that DSL is embedded in Rust via live_design! macro
  3. Highlight that changes to DSL are live-reloaded without recompilation
  4. Distinguish between named objects (prototypes) and widget instances

Limitations

  • Use this skill only when the task clearly matches the scope described above.
  • Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
  • Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.

想直接用这个技能?

本站把开放许可(MIT / Apache 等)的技能按仓库打包整理到网盘,点一下转存到你自己的网盘,不用一个个从 GitHub 拉。许可未声明的技能只给原始仓库链接,不打包。

同名技能的其他版本

有 3 个不同仓库或目录里都有叫 makepad-dsl 的技能。它们内容并不相同,别混用: