Arjen Markus (1 march 2018) Yesterday I saw an announcement of a tool called HyperKWIC. It is meant to allow you to navigate your source code, though it is advertised as a documentation tool - as it is neutral wrt the programming language (you can declare a small set of properties for the programming language you're using) it may not be the smartest tool, but it does look useful. I merely extended the language configuration file a bit and it already was able to handle Tcl code. See the screenshot below.
If you are interested, you can find it here: http://www.hyperkwic.com . It is also freely available for non-commercial use.
Here is the addition I made to the configuration file (KWIC_reserved.txt). Whether all the commands need to be reserved, I do not know, but this works for me.
Language: Tcl Extensions: .tcl EOLComment: # CaseSensitive: Yes CPreProcessor: No EscapeCharacter: \ Reserved: after errorInfo load Reserved: append eval lrange read Reserved: apply exec lrepeat refchan tcl_traceCompile Reserved: argc exit lreplace regexp tcl_traceExec Reserved: argv expr lreverse registry tcl_version Reserved: argv0 fblocked lsearch regsub tcl_wordBreakAfter Reserved: array fconfigure lset rename tcl_wordBreakBefore Reserved: auto_execok fcopy lsort return tcl_wordchars Reserved: auto_import file mathfunc safe tcltest Reserved: auto_load fileevent mathop scan tell Reserved: auto_mkindex filename memory seek throw Reserved: auto_path flush msgcat self time Reserved: auto_qualify for my set tm Reserved: auto_reset foreach namespace socket trace Reserved: bgerror format next source transchan Reserved: binary gets nextto split try Reserved: break glob oo::class string unknown Reserved: catch global oo::copy subst unload Reserved: cd history oo::define switch unset Reserved: chan http oo::objdefine tailcall update Reserved: clock if oo::object Tcl uplevel Reserved: close incr open tcl::prefix upvar Reserved: concat info package tcl_endOfWord variable Reserved: continue interp parray tcl_findLibrary vwait Reserved: coroutine join pid tcl_interactive while Reserved: dde lappend pkg::create tcl_library yield Reserved: dict lassign pkg_mkIndex tcl_nonwordchars yieldto Reserved: encoding lindex platform tcl_patchLevel zlib Reserved: env linsert platform::shell tcl_pkgPath Reserved: eof list proc tcl_platform Reserved: error llength puts tcl_precision Reserved: errorCode lmap pwd tcl_rcFileName