tclexpect

Way to list all procedures in a Tcl file


Is there any way to list all the procedures(proc) in a myFile.tcl using another tcl file or in the same file.


Solution


You can use [info procs] before and after sourcing the file in question and compare the results to determine which procs were added. For example:

proc diff {before after} {
    set result [list]
    foreach name $before {
        set procs($name) 1
    }
    foreach name $after {
        if { ![info exists procs($name)] } {
            lappend result $name
        }
    }
    return [lsort $result]
}

set __before [info procs]
source myFile.tcl
set __after  [info procs]
puts "Added procs: [diff $__before $__after]"

One thing I like about this solution is that the diff procedure is really just a generic set differencing utility -- it's not specific to comparing lists of defined procedures.