Working with to-do items in ReSharper

Have you ever had the need to place a TODO comment in code? Most of us will have. TODO comments are often a temporary reminder to ourselves, a pointer that tells us to continue work on something after finishing something else.

A TODO can be a bug, a code smell, an optimization or even a feature. That last category should probably be logged in an issue tracker like YouTrackJIRAGitHub issues or Visual Studio Team Services, but the others can usually found in about any code base:

// TODO: This needs cleaning up

// REMARK: Do not change this code - it comes from my brilliant mind and is Turing-complete

// REVIEW: Should we log this Exception?

ReSharper (and Rider, too) makes it easy to navigate and manage this type of comments, recognizing various patterns of TODO comments. With ReSharper 2017.3, we’re adding a couple of additional features to navigate from code to our To-do Explorer, or to an external URL such as an issue tracker.

This post is part of a series around working with to-do items in ReSharper:

First things first, though! How can we navigate these TODO comments in a code base? How do we group and filter them?

Working with to-do items

The To-do Explorer tool window (Ctrl+Alt+D or ReSharper | Tools | To-do Explorer) provides an overview of all TODO comments in our codebase. By default, these are all grouped by project structure, similar to what our solution looks like in Solution Explorer.
ReSharper To-do Explorer tool window

ReSharper not only searches for to-do items in C# code, but also in other languages like VB.NET, JavaScript, TypeScript, CSS, ASP.NET Razor syntax etc. As long as we write a comment that starts with the word “todo”, ReSharper will display it in the To-Do Explorer.

The toolbar provides a couple of options. For example, we can export the list of items to a text file, HTML or XML, we can show/hide to-do items in generated code, or select to Show Preview (Ctrl+P) of the code where our to-do item is located:
Show Preview of to-do item in ReSharper

We can browse the list of to-do items using our mouse or the keyboard up/down arrows, or use the search bar to find a specific item we’re after. To jump to the source code where the comment is located, we can double-click the item in the list or simply press Enter when selected.
Navigating to-do items

Grouping and filtering to-do items

By default, the To-Do Explorer lists our to-do items based on project structure. There are many other options to group our to-do items. We can disable grouping, group by tags, types, namespaces, directories, projects, …
Grouping to-do items

We can also filter out list of to-do items, based on the type of to-do item we want to see. We can show all to-do items, only those marked todo, bug, or all places where we throw NotImplementedException. One or multiple to-do patterns can be selected.
Filtering to-do items with ReSharper

These types originate from the to-do item patterns. The todo, bug and NotImplementedException types are pre-defined, but we can add our own – a topic for our next post.

ReSharper makes working with to-do items more efficient than when using Visual Studio’s built-in to-do functionality. We’ve already mentioned it is possible to export to-do items to a text file (or HTML or XML). This is very helpful as it allows creating items in an issue tracker based on the export from To-do Explorer. And keep in mind: we can also use Rider to work with to-do items!

There are more benefits: to-do patterns, linking to external resources (new in ReSharper 2017.3) and better filtering and grouping of to-do items. We will keep those for a next post!

Download ReSharper 2017.3 and give it a try! We’d love to hear your feedback!

Comments below can no longer be edited.

5 Responses to Working with to-do items in ReSharper

  1. Avatar

    Howard C Persun says:

    April 10, 2018

    I like knowing date and time of when todo was entered in project. I also set priorities.

    • Avatar

      Maarten Balliauw says:

      April 10, 2018

      You could add that as part of the todo comment. Or create a live template for it that enters the timestamp –

    • Avatar

      Matthias B. says:

      June 20, 2018

      The template is very useful. I created one which i can call as “todo” and then i get “//TODO yyyy-mm-dd |” as output. The date (today) is automatically formatted and inserted so i can write my text.

  2. Avatar

    Matthias B. says:

    June 20, 2018

    I would like to see a feature to sort my todos by text.
    I have a todo-tempalte where i have the current date in it. Unfortunately if i have them grouped by Type (bug,. todo, etc) i see something like

    – todo 2018-06-01 …
    – todo 2018-05-10 …
    – todo 2018-06-19 …
    – todo 2018-06-01 …

    It would be good if i could sort them (without export first and use a custom tool) so i can see easily which todo is the oldest/newest

Discover more