# Remove Crate Prefix

> Remove Crate Prefix Skill

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

---


# Remove Crate Prefix Skill

## Purpose

This skill enforces the "Clean Imports over Inline Absolute Paths (Mandatory)" rule
defined in the project's `AGENTS.md`. It automatically scans code for inline `crate::`
prefixes (e.g. `crate::Type`, `crate::Size`) and refactors the code to use clean imports
at the top of the file or scope.

## Rules

Do NOT write absolute inline paths like `crate::Type` or `crate::Size` inside function
signatures or bodies.

### ✅ Good:

```rust
use crate::{Size, Pos};

pub fn render(size: Size) -> Pos { ... }
```

### ❌ Bad:

```rust
pub fn render(size: crate::Size) -> crate::Pos { ... }
```

## Exceptions

- **Declarative Macros (`macro_rules!`)**: Do NOT apply this refactor inside declarative macros, and NEVER touch or remove the `$crate::` prefix. Modifying `$crate::` will result in a syntax error because it turns a built-in macro keyword into an undeclared macro variable.
- Macro invocations often require absolute paths (e.g., `crate::key_press!`). This rule
  primarily targets structs, traits, and enums (e.g., `crate::ModifierKeysMask`).
- Sometimes in generated code or highly isolated scopes, a `use crate::{...}` block
  directly inside a function or `if` block is preferred over a file-level import to
  minimize scope pollution.

## Execution

When invoked:

1. **Determine Target Files:**
    - If specific files are provided as arguments, target those files.
    - If **no arguments** are supplied, find all modified staged and unstaged files (e.g.,
      via `git diff --name-only` and `git diff --cached --name-only`) and target all of
      them.
2. Scan the targeted file(s) for instances of inline `crate::` usage for types.
3. Group the required imports into a single `use crate::{...};` statement.
    - **For production code**: Place the `use` statement at or near the top of the file,
      joining existing file-level imports (even if the `crate::` usage is inside an inner
      module).
    - **For test code**: The `use` statement can be added to the closest inner test module
      where the other test imports are located.
4. Remove the `crate::` prefix from the inline usages.
5. Verify the changes compile successfully using `./check.fish --check`.

