{"id":30851537,"url":"https://github.com/willibrandon/willow","last_synced_at":"2025-09-07T07:13:45.530Z","repository":{"id":311561977,"uuid":"1044059126","full_name":"willibrandon/willow","owner":"willibrandon","description":null,"archived":false,"fork":false,"pushed_at":"2025-08-25T09:08:04.000Z","size":83,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-25T09:22:52.098Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/willibrandon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-25T06:01:42.000Z","updated_at":"2025-08-25T09:08:07.000Z","dependencies_parsed_at":"2025-08-25T09:33:00.610Z","dependency_job_id":null,"html_url":"https://github.com/willibrandon/willow","commit_stats":null,"previous_names":["willibrandon/willow"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/willibrandon/willow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willibrandon%2Fwillow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willibrandon%2Fwillow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willibrandon%2Fwillow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willibrandon%2Fwillow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/willibrandon","download_url":"https://codeload.github.com/willibrandon/willow/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willibrandon%2Fwillow/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274006846,"owners_count":25206222,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-07T02:00:09.463Z","response_time":67,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-09-07T07:13:42.682Z","updated_at":"2025-09-07T07:13:45.521Z","avatar_url":"https://github.com/willibrandon.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Willow 🌿\n\n**A graceful TODO/FIXME highlighter for Zed - bending with your workflow, never breaking**\n\nWillow is a TODO/FIXME highlighting extension for the Zed editor that uses tree-sitter comment grammar injection to provide universal highlighting across all programming languages.\n\n## Features ✨\n\n- **Universal Language Support**: Works with 18+ languages out of the box\n- **Zero Compilation**: Pure configuration-based extension - no build step required\n- **Rich Pattern Recognition**: TODO, FIXME, HACK, NOTE, BUG, OPTIMIZE, SECURITY, and more\n- **Theme Integration**: Works with your existing Zed theme or custom overrides\n- **Lightweight**: No WebAssembly, no Rust compilation, just tree-sitter configuration\n\n## Supported Keywords 🏷️\n\n| Keyword | Description |\n|---------|-------------|\n| `TODO` | Tasks to be done |\n| `FIXME` | Known issues to fix |\n| `HACK` | Temporary workarounds |\n| `NOTE` | Important information |\n| `BUG` | Confirmed bugs |\n| `OPTIMIZE` | Performance improvements |\n| `SECURITY` | Security concerns |\n| `DEPRECATED` | Obsolete code |\n| `REVIEW` | Code review needed |\n| `REFACTOR` | Refactoring needed |\n\nKeywords are highlighted in comments using your theme's colors, distinct from regular comment text.\n\n![Willow highlighting demo](assets/willow-highlighting-demo.png)\n\nWith custom theme overrides:\n\n![Willow custom colors demo](assets/willow-highlighting-demo-custom.png)\n\n## Supported Languages 🌍\n\n- Rust\n- JavaScript/TypeScript/TSX\n- Python\n- Go\n- C/C++\n- Java\n- Ruby\n- Kotlin\n- PHP\n- C#\n- Elixir\n- Haskell\n- Shell (Bash)\n- YAML\n- TOML\n- JSON5\n- And easily extensible to more!\n\n\u003e **Note:** Some languages require their respective Zed extensions to be installed for syntax highlighting to work. Built-in support includes Rust, Python, JavaScript, TypeScript, C, C++, Go, Bash, YAML, and Kotlin. Other languages (Ruby, Java, PHP, C#, Elixir, Haskell, TOML, JSON5) need their language extensions installed from the Zed Extension Gallery.\n\n## Installation 📦\n\n### From Zed Extension Gallery\n\n1. Launch the Zed Extension Gallery:\n   - Press `Cmd+Shift+X`\n   - Or open the command palette and select \"zed: extensions\"\n   - Or select \"Zed \u003e Extensions\" from the menu bar\n\n2. Search for \"Willow\" and click Install\n\n3. Install language extensions as needed for full support (see Supported Languages section)\n\n### As a Dev Extension\n\n1. Clone this repository:\n   ```bash\n   git clone https://github.com/willibrandon/willow.git\n   ```\n\n2. Open Zed Extension Gallery (`Cmd+Shift+X`)\n\n3. Click \"Install Dev Extension\" and select the `willow` directory\n\n## Customization 🎨\n\n### Theme Colors\n\nAdd custom colors to your Zed `settings.json`:\n\n```json\n{\n  \"experimental.theme_overrides\": {\n    \"syntax\": {\n      \"comment.todo\": { \"color\": \"#4FC1FF\", \"font_weight\": 700 },\n      \"comment.fixme\": { \"color\": \"#FFCC00\", \"font_weight\": 700 },\n      \"comment.hack\": { \"color\": \"#FF6B6B\", \"font_weight\": 700 },\n      \"comment.note\": { \"color\": \"#98C379\", \"font_weight\": 700 },\n      \"comment.bug\": { \"color\": \"#E06C75\", \"font_weight\": 700 },\n      \"comment.deprecated\": { \"color\": \"#7C7C7C\", \"font_weight\": 700 },\n      \"comment.security\": { \"color\": \"#FF0000\", \"font_weight\": 700 },\n      \"comment.optimize\": { \"color\": \"#C678DD\", \"font_weight\": 700 },\n      \"comment.review\": { \"color\": \"#56B6C2\", \"font_weight\": 700 },\n      \"comment.refactor\": { \"color\": \"#61AFEF\", \"font_weight\": 700 }\n    }\n  }\n}\n```\n\n### Adding Language Support\n\nTo add support for a new language, create a new injection configuration:\n\n1. Create directory: `languages/{language}-injections/`\n2. Add `config.toml`:\n   ```toml\n   name = \"Language with TODOs\"\n   grammar = \"language_grammar_name\"\n   path_suffixes = [\"ext\"]\n   ```\n3. Add `injections.scm`:\n   ```scheme\n   ((comment) @injection.content\n    (#set! injection.language \"comment\"))\n   ```\n4. Update `extension.toml` to include the new language path\n\n## Project Structure 📁\n\n```\nwillow/\n├── extension.toml           # Extension manifest\n├── examples/               # Example files for all supported languages\n├── languages/              # Language configurations\n│   ├── comment/           # Core comment grammar highlighting\n│   └── *-injections/      # Per-language injection rules\n└── scripts/               # Helper scripts\n    └── add-language-support.sh  # Add new language support\n```\n\n## How It Works 🔧\n\nWillow leverages the [tree-sitter-comment](https://github.com/stsewd/tree-sitter-comment) grammar to parse comment content and highlight TODO patterns:\n\n1. **Grammar Injection**: Each language's comment nodes are injected with the comment grammar\n2. **Pattern Matching**: The comment grammar identifies TODO-style patterns\n3. **Syntax Highlighting**: Zed applies theme colors to the identified patterns\n\nNo compilation, no WebAssembly, just pure tree-sitter configuration!\n\n## Contributing 🤝\n\n1. Fork the repository\n2. Create a feature branch\n3. Add language support or improve patterns\n4. Submit a pull request\n\n### Adding a New Pattern\n\nEdit `languages/comment/highlights.scm` to add new patterns:\n\n```scheme\n((tag (name) @comment.yourpattern)\n (#any-of? @comment.yourpattern \"YOURPATTERN\" \"yourpattern\"))\n```\n\n## FAQ ❓\n\n**Q: Why doesn't highlighting work in my language?**\nA: Check if your language is in the supported list. If not, you can easily add it following the instructions above.\n\n**Q: Can I change the highlight colors?**\nA: Yes! Use the theme overrides in your Zed settings.json.\n\n**Q: Does this slow down the editor?**\nA: No, tree-sitter grammars are highly optimized and run at native speed.\n\n## License 📄\n\nMIT License - see [LICENSE](LICENSE) file.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwillibrandon%2Fwillow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwillibrandon%2Fwillow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwillibrandon%2Fwillow/lists"}