该技能面向 Elixir 宏与声明式 DSL 的编写,前提是已经确认宏确实必要,而不是能用普通函数、behaviour 或“数据加解释器”解决的情形。资料指出,判断是否该用宏属于兄弟技能(staff-level-elixir、adversarial-elixir)的范畴,应先完成这道门槛,再打开本技能。
适用时机包括:编写宏时决定哪些内容放进 quote、哪些留给运行时函数,以及参数如何求值;构建收集声明并生成模块的 schema/spec/route/workflow 式 DSL;处理 use MyDSL 时 using 应注入什么、什么该放进 @before_compile;在编译期从声明列表生成函数或子句;让 DSL 在 mix compile 阶段报出指向用户源码的错误;审查既有宏/DSL 的求值、卫生、转义与编译期校验问题。
规则分为四类:宏设计(macro)——薄宏委托运行时函数、守卫场景用 defguard;quote 与卫生(quote)——用 bind_quoted 保证重复 unquote 参数只求值一次、拼接运行期数据前用 Macro.escape、优先依赖卫生、仅在注入名称是既定契约时用 var!;DSL 构造(dsl)——用 accumulate: true 属性记录声明并在 @before_compile 生成、using 只做设置、用推导式中的 def unquote(name)(...) 为每条声明生成子句、生成 schema 式反射函数供调用方读取数据;编译期校验(valid)——在宏体内而非返回的 quote 中校验以在 mix compile 报错、从声明宏 raise 或捕获 CALLER 让错误指向用户行号。
使用方式是:当相关决策出现时阅读对应参考文件;每条规则先点明其纠正的错误默认做法,再给出规范写法,仅在错误方式确属陷阱时用正误对比。参考文件包括 references/_sections.md(分类定义与排序)、assets/templates/_template.md(新规则模板)、metadata.json(版本与来源)。具体安装命令、收费与平台信息暂未提供。