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>