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.