I built TodoForge: a VS Code TODO tree with owners, due dates, and a Changes view

2026-11-16来源 dev.toEnglish
I built TodoForge: a VS Code TODO tree with owners, due dates, and a Changes view

Most of my day is C# in large solutions. I have always left TODO and FIXME comments in the code, and I have always been bad at going back to them. TODOs I added on a feature branch kept slipping into pull requests, often with no owner and no date, and I had no quick way to see what I had just introduced.

I wanted those details to live in the comment itself, so they move with the code and show up in review. I wanted a view of the TODOs on my current branch before I opened a PR. And I wanted the tool to stay offline, MIT-licensed, with no account and no telemetry.

That is TodoForge. Version 1.1.0 is on the Visual Studio Marketplace.
The source is at github.com/onurkarakus/todo-forge.

What I actually wanted from a TODO comment

A bare // TODO: fix this is easy to write and easy to forget. I wanted the owner, the date and the priority to live in the comment, and not in a side database.

// TODO(onur, 2026-12-01, !high, #perf): cache the price lookup // FIXME(@ayse): null check before Save() // HACK(2026-11-15): remove after the API fix ships 

Every piece inside the parentheses is optional and can appear in any order. When the date passes, the line gets an overdue hint and the tree entry turns red. Hover the comment for a card with that metadata, plus git blame: who last touched the line, how long ago, and which commit. From the same hover, or with Ctrl+., you can snooze it, set a date or a priority, pin it, mute it or remove it.

Type todo inside a comment and a snippet offers the plain form or the one with owner and date.

Hover card with owner, due date, priority, git blame and actions

The Changes view is the feature I open before a pull request

The tree of every TODO in the repo is useful. The list I was missing was narrower: what did I just add?

TodoForge has a Changes view that uses only local, read-only git (git diff, git blame, and so on — nothing is fetched). It splits TODOs into Uncommitted and This branch, relative to main / master / develop or whatever you set. That is the pass I wanted before opening a PR: no surprise FIXME riding along on a line I touched this morning.

The Changes view listing uncommitted TODOs and TODOs added on the current branch

The same git data feeds a live filter. is:mine, is:overdue, is:new and is:stale do what they sound like. You can also filter by owner, label, tag or path, save a view, and pin TODOs at the top of the tree. An Insights panel shows counts by tag, folder and owner, plus the oldest and overdue items, in a local webview with no network scripts.

Built for the repos I actually open

I work in .NET, so the defaults are opinionated in that direction.

  • bin/, obj/, packages, generated C# (*.g.cs, *.designer.cs), .vs/ and minified files are skipped out of the box. .gitignore is honored.

  • Comments are parsed per language, not with one regex for every file. A todoList variable or a "TODO" string is not a TODO. NOTE, BUG, REVIEW and OPTIMIZE only count when followed by : or (, so // Note that… stays quiet.

  • In C#, TodoForge can also list throw new NotImplementedException(), [Obsolete] and #warning, in a built-in ".NET code markers" view.

  • If you already have tags, excludes or comment markers set up in your existing TODO and comment-highlighting extensions, Import Settings can bring them over. The same command also reads Visual Studio (.vssettings) and Rider (.DotSettings) files.

A full scan of a 20,000-file test repo takes about 50 ms. Activation does not wait for the scan. The VSIX ships its own ripgrep for each platform, so scanning does not depend on a path inside VS Code.

It also runs where the files are: Remote SSH, WSL, Dev Containers, Codespaces. It does not support virtual workspaces such as vscode.dev, because it needs ripgrep and git on disk.

Comment colors in the editor

Tags are colored in the editor, the gutter and the overview ruler, with separate light and dark colors. From 1.1.0, TodoForge can also color // ! (alert), // ? (question), // * (highlight) and //// (strikethrough) markers. Those stay in the editor and do not appear in the TODO tree unless the comment also has a real TODO or FIXME tag. If those markers are already being colored in the editor, TodoForge leaves them alone so the colors do not stack.

Ticket tokens such as #123 or FIXME[JIRA-123] become links in the hover card when you set a URL template. Clicking them opens your browser. TodoForge itself does not call any issue tracker.

Privacy, and the two features that are off until you ask

This was a hard requirement, not a bullet for the README. TodoForge makes no HTTP requests. There is no telemetry, no account and no sign-in. Pins, muted TODOs and saved views live in VS Code's own storage, not in your repo.

Two AI-related features exist, and both are off by default:

  • Explain TODO with AI uses a chat model you already have in VS Code (for example GitHub Copilot), after a one-time consent prompt, and only sends the TODO plus a few nearby lines.

  • Copilot Chat tools (#todos, #todoChanges, #todo) let you ask questions such as "which overdue TODOs are mine?" or "what did I add on this branch?" The tools are read-only, they read TodoForge's local index, they do not send surrounding source, and each call is visible in the chat. They need VS Code 1.95 or later and a chat extension. If you never turn them on, nothing changes.

In an untrusted workspace, scanning and highlights still work; git, custom regex and the AI features stay off.

What it gives you

TodoForge gives you owners, due dates and priorities in the comment itself, a Changes view for what you added on your branch, live filters and Insights, and defaults that fit the .NET repos I open every day. It is free, MIT-licensed, and offline. There is no account and no telemetry.

If you already have a setup you like, you do not have to start again. Run TodoForge: Import Settings.

If you want to try it

Install it, open a folder, and the tree should fill in. If it does not, or if it is noisy on a repo I have not seen, open an issue. That is more useful to me than a star with no comment.

原文:https://www.a8q9.cn/en/article/i-built-todoforge-a-vs-code-todo-tree-with-owners-due-dates-and-a-changes-view-25e27e.html

相关文章