uncomment
Inventory, preserve, lint and remove source comments using Uncomment's tree-sitter CLI or Rust library. Use for comment cleanup and preservation policies without changing comment-like text in strings.
Source facts
- Repository
- Goldziher/uncomment
- Last source activity
- October 14, 2026 at 17:24
- Detected SKILL.md language
- English
- Stars
- 135
- Forks
- 13
Install options
The review-first prompt is selected by default. You can switch to a direct command or download a local copy.
Review the source files
Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.
File Explorer
4 filesShowing SKILL.md
SKILL.md
Source instructions · Read-only preview- description
- Inventory, preserve, lint and remove source comments using Uncomment's tree-sitter CLI or Rust library. Use for comment cleanup and preservation policies without changing comment-like text in strings.
- name
- uncomment
- license
- MIT
- metadata
- {"author":"Goldziher","repository":"https://github.com/Goldziher/uncomment"}
<!--
AI-RULEZ :: GENERATED FILE — DO NOT EDIT
Content-Hash: blake3:0c7de78d48b93b3fbba0488c23059fea8b4e0ff49f7c1de07c8c7bbf8a3c24fa
Source-Hash: blake3:0935b1c74300d0f985a89bd38c3cfd9146d3b7832a514aca4b1d1a2f0db775ed
Schema-Version: v1
-->
## Uncomment Source Comment Cleanup
Uncomment uses tree-sitter to find source comments. This skill targets Uncomment
3.10 and newer, including `scan`, `keep`, `lint` and the `--check` gate. Install the
CLI separately; this plugin provides instructions and has no MCP server.
```bash
cargo install uncomment --version '^3.10'
# Binary wrappers are available as uncomment-cli on npm and uncomment on PyPI.
uncomment --version
```
### Inspect and preview
Start with the paths the user selected. An ordinary removal invocation writes
files; `scan`, `--dry-run`, and `--check` let you inspect the planned cleanup.
```bash
uncomment scan src/ --only removable --format jsonl --output comments.jsonl
uncomment src/ --dry-run --diff
```
Scan records contain `id`, `path`, `line`, `end_line`, `start_byte`, `end_byte`,
`kind`, `verdict` and `text`. Preserved records also include `reason`. Positions are
one-based lines and zero-based byte offsets. Use IDs to select comments; IDs survive
edits above a comment but depend on its path, exact text and occurrence index.
### Preserve selected comments
Use a plain comment marker for comments that must survive cleanup:
```rust
// This workaround must stay until the upstream fix ships. ~keep
// ~keep
/// Documentation that must survive --remove-doc.
```
A standalone marker uses the language's plain comment token, such as `//` or `#`,
not a documentation prefix such as `///`. Quoted mentions of `~keep` are prose,
not active markers. Let `keep` handle block comments and docstrings so it can
place and verify the marker without editing their runtime contents.
```bash
uncomment keep src/ --id 'ID_FROM_SCAN'
uncomment keep src/ --match 'workaround' --dry-run --diff
uncomment keep src/ --from selected-comments.jsonl
```
`--from` marks every ID in the supplied JSON or JSONL records; select the records
first. Extra decision fields do not turn an ID into a rejection. Missing IDs fail
unless `--skip-missing` is explicitly requested.
### Apply cleanup or gate it
```bash
uncomment src/ --dry-run --diff
uncomment src/
uncomment --check src/ --format json
uncomment --check --changed-only --base origin/main .
```
Defaults preserve TODO/FIXME, documentation, common lint directives and active
`~keep` markers. `--remove-todo`, `--remove-fixme` and `--remove-doc` opt into removing
those categories; `--ignore PATTERN` adds case-sensitive substring preservation.
`--no-default-ignores` disables the built-in preservation patterns.
The removal gate exits 0 when nothing would be removed, 1 when removable comments
exist, and 2 when inspection could not complete. Check reported file counts;
zero matched files are not evidence that the intended tree passed. In 3.10.3, a
missing input path can print an error and still exit 0, so also verify paths exist
and the report covers the expected files. Current main source builds reject a
missing explicit path with exit 2; that fix has not been released yet.
### Lint tag conventions
Tag linting removes nothing and is inactive until `[lint] enabled = true` is
configured. Use [configuration](references/configuration.md) for layering,
exclusions and rule settings.
```bash
uncomment lint src/ --format json
uncomment lint src/ --fix --todo-key 'PROJECT-123'
```
Use `--fix` only when rewriting tag comments is part of the requested work.
The key must be a real issue key chosen for that project.
For read-only Rust integration, see [library usage](references/library.md).
View on GitHub