Search code examples
xcodecomments

What source comments does Xcode recognize as tags?


This is mostly for curiosity's sake. I've known for awhile that Xcode is capable of recognizing comments in the form of // TODO: Something I don't feel like doing now. Adding that line to the source of a file will cause that TODO comment to show up in Xcode's navigation bar:

enter image description here

I also recently discovered that comments of the form // MARK: Something can achieve the same effect as #pragma marking something. So I can write a comment that looks like:

// MARK: -
// MARK: Future Improvements:
// TODO: Make something better
// TODO: Fix some bug

And Xcode will render it out like this:

enter image description here

Which leads me to wonder: Are there other kinds of comments that Xcode can understand to improve project navigation?


Solution

  • There is also MARK, FIXME, !!! and ???, e.g.

    // FIXME: this bug needs to be fixed
    

    and

    // ???: WTF ???
    

    You can see where these are defined in /Applications/Xcode.app/Contents/OtherFrameworks/XcodeEdit.framework/Versions/A/Resources/BaseSupport.xclangspec (or /Developer/Library/PrivateFrameworks/XcodeEdit.framework/Resources/BaseSupport.xclangspec for older versions of Xcode). Presumably you could also add your own tags here if you wanted to but I have not actually tried this. Here is the relevant section in BaseSupport.xclangspec:

    {
        Identifier = "xcode.lang.comment.mark";
        Syntax = {
            StartChars = "MTF!?";
            Match = (
                "^MARK:[ \t]+\(.*\)$",
                "^\(TODO:[ \t]+.*\)$",       // include "TODO: " in the markers list
                "^\(FIXME:[ \t]+.*\)$",      // include "FIXME: " in the markers list
                "^\(!!!:.*\)$",              // include "!!!:" in the markers list
                "^\(\\?\\?\\?:.*\)$"         // include "???:" in the markers list
            );
            // This is the order of captures. All of the match strings above need the same order.
            CaptureTypes = (
                "xcode.syntax.mark"
            );
            Type = "xcode.syntax.comment";
        };
    },
    

    These tags are also supported in the BBEdit text editor and its freeware sibling TextWrangler.