Re: Can one have different Coloring to show which local symbols are
- To: mathgroup at smc.vnet.net
- Subject: [mg108730] Re: Can one have different Coloring to show which local symbols are
- From: dh <dh at metrohm.com>
- Date: Mon, 29 Mar 2010 06:57:14 -0500 (EST)
- References: <hoklkh$so0$1@smc.vnet.net>
Hi Nasser, here is a function that may help you. I would like to pay tribute to the one who deserves it, but its too long ago that I got this and I can no more remember who it was. The code classifies variables according to use: (*shows used variable sorted according to type*) Clear[ClassifyVariables]; ClassifyVariables[func_Symbol] := Module[{const, dv, sym, param, locVar, locVar2, gloVar,hsVar, pat, temp,exc}, (*exc = HoldForm /@ Join[Union[Head /@ ToExpression[Names[]]], {Head, Constant, Pattern}];*) (*heads*) const = HoldForm /@ ToExpression[Select[Names[], MemberQ[Attributes[#], Constant] &]]; (*system constants*) dv=ToExpression["DownValues["<>ToString[func]<>"]"]; (*DownValues*) sym = Complement[Cases[dv, x_Symbol :> HoldForm[x], Infinity], const]; (*Symbols - constants*) param = Union[Cases[ (*parameters*) DownValues[func][[All, 1]], x_Pattern :> ToExpression["HoldForm[ " <> StringTake[temp = ToString[x], StringPosition[temp, "_"][[1, 1]] - 1] <> "]"], Infinity]]; locVar = Union[Cases[dv, (*local variables*) HoldPattern[Module[vl_List, _]] :> (Map[HoldForm, HoldForm[vl], {2}][[1]] /. HoldPattern[Set[v_, _]] :> v), Infinity] //Flatten]; temp = Cases[dv, HoldPattern[Module[_List, b_]] :> HoldForm[b], Infinity] //Flatten; (*body*) locVar2 = Complement[locVar, Union[Cases[temp, x_Symbol :> HoldForm[x], Infinity]]]; (*all local variables not in body*) (*pat = Complement[Cases[Cases[temp, x_Pattern :> HoldForm[x], Infinity], x_Symbol :> HoldForm[x], Infinity], exc]; (*pattern in body*) *) hsVar = {}; (*Union[Join[pat, Cases[dv, {s_Symbol, _ , _?NumericQ} :> HoldForm[s], Infinity]]];*) (*HiddenScopeVariables????*) gloVar = Complement[sym, param, locVar, hsVar, const (*, exc*)]; (*global variables*) {Parameters -> param, LocalVariables -> locVar, GlobalVariablesUsed -> gloVar, LocalVariablesNotUsed -> locVar2(*, HiddenScopeVariables -> hsVar*)} // TableForm ]; Daniel On 27.03.2010 11:11, Nasser M. Abbasi wrote: > Hello; > > Many times when I write some module, I add local symbols, then later I might > change the code and those symbols will no longer be used. > > For example > > f[x_]:=Module[{a,b},... a=...; ....] > > Suppose that 'a' is still used, but 'b' is not used inside the module. Both > will be colored green as things are now. > > It would be nice, if a new color is made for symbols that are local, but NOT > used, i.e not referenced. > > This way, after some long editing session, and I need to clean the code, I > can simply remove those local symbols declaration more easily, by remove the > symbols with the new color. > > Right now, I have to check for each symbol, one by one, by doing Find, to > see if I am still using it or not. > > In practice, I normally like to write small functions, so this is not a > problem, as I can easily see which symbol is used or not, but sometimes, I > have to write a large function, and I notice the need for this feature. > > May be this feature can be added to version 8? (Unless one can do this now > in version 7, which I am not aware of). > > --Nasser > > > -- Daniel Huber Metrohm Ltd. Oberdorfstr. 68 CH-9100 Herisau Tel. +41 71 353 8585, Fax +41 71 353 8907 E-Mail:<mailto:dh at metrohm.com> Internet:<http://www.metrohm.com>