Not OP, but a very quick and simple example of something I put in my .emacs
very long time ago:
(defconst trc-comment-keywords "\\
This defines a function #'add-comment-keywords and adds it as a hook to the "open file" operation. The function highlights all matches to the regexp in trc-comment-keywords so that they're highlighted in the source code using a modified font-lock-warning-face.
This is an example of something you could just type in and evaluate right there, in your buffer. Later, you can save it in your init file to have it always enabled.
A more complicated example of related code I wrote with some help from the Internet and the Emacs documentation:
(defun list-comment-notes ()
"List all TODO/FIXME/HACK, itp. in a new buffer for reference."
(interactive)
(save-excursion
(goto-char (point-min))
(let ((collected-lines '()))
(while (re-search-forward trc-comment-keywords nil t)
;; collect lines
(setq collected-lines (cons
(format "%d: %s" (line-number-at-pos) (grab-current-line))
collected-lines)))
;; generate a new buffer
(let ((notes-buffer (generate-new-buffer (concat (buffer-name) "-comment-notes"))))
(set-buffer notes-buffer)
;; dump collected stuff to here.
(dolist (a-line collected-lines)
(insert a-line)
(insert "\n"))))))
What it does is it scans the current buffer for all occurrences of the keywords and lists them in a new buffer (with "-comment-notes" appended to the name). It's a crude function that could use some improvements, but it works well enough and is now just a M-x list-comment-notes away. Or, with the way M-x works, just M-x l-c-n away. Or I could bind it to a key.
The great thing about Emacs is that all you need to extend it is to type the source somewhere. No need for creating projects, build scripts, rebooting your editor, etc. You can evalute and reevaluate the code until it does what you want. Lisp interactivity, which Emacs inherits, is addicting and still unparalleled in other programming languages / environments.