Thread overview
Automated D code editing?
Oct 12, 2012
Lubos Pintes
Oct 12, 2012
Aziz K.
Oct 12, 2012
Andrej Mitrovic
Oct 13, 2012
Lubos Pintes
Oct 13, 2012
Andrej Mitrovic
Oct 13, 2012
Aziz K.
Oct 12, 2012
Nick Sabalausky
Oct 13, 2012
Lubos Pintes
October 12, 2012
Hi,
I am still playing with DGUI library. Besides other things, I would like to convert enum names from "THIS_STUPID_NAMING_CONVENTION_WHICH_I_ABSOLUTELY_HATE" to "thisGoodOne".
Obviously I could do this by hand but it is a bit time consuming. Any tool / hack to help me with this?
Thank
October 12, 2012
On Fri, 12 Oct 2012 19:51:02 +0200, Lubos Pintes <lubos.pintes@gmail.com>
wrote:

> Hi,
> I am still playing with DGUI library. Besides other things, I would like to convert enum names from "THIS_STUPID_NAMING_CONVENTION_WHICH_I_ABSOLUTELY_HATE" to "thisGoodOne".
> Obviously I could do this by hand but it is a bit time consuming. Any tool / hack to help me with this?
> Thank

Refactoring tools are not available for D as of yet. Your best bet is to use a bash command or your editor's Find & Replace in Files feature.
October 12, 2012
On 10/12/12, Lubos Pintes <lubos.pintes@gmail.com> wrote:
> Hi,
> I am still playing with DGUI library. Besides other things, I would like
> to convert enum names

You mean at compile-time? Try this: http://dpaste.dzfl.pl/06b95c3f

Copied below:

import std.conv;
import std.string;
import std.traits;

private @property string toCamelCase(E)()
    if (is(E == enum))
{
    string result;
    result ~= "enum CamelCase {\n";
    foreach (Member; EnumMembers!E)
    {
        foreach (word; to!string(Member).split("_"))
        {
            result ~= word.capitalize;
        }
        result ~= " = " ~ Member.stringof ~ ",\n";
    }
    result ~= "}";
    return result;
}

template CamelCase(E)
    if (is(E == enum))
{
    mixin(toCamelCase!E);
}

enum SOME_ENUM
{
    VAL_FIRST = -4,
    VAL_SECOND
}

alias CamelCase!SOME_ENUM SomeEnum;

void main()
{
    SomeEnum en1 = SomeEnum.ValFirst;
    SOME_ENUM en2 = SOME_ENUM.VAL_FIRST;
    assert(en1 == en2);
}
October 12, 2012
On Fri, 12 Oct 2012 19:51:02 +0200
Lubos Pintes <lubos.pintes@gmail.com> wrote:

> Hi,
> I am still playing with DGUI library. Besides other things, I would
> like to convert enum names from
> "THIS_STUPID_NAMING_CONVENTION_WHICH_I_ABSOLUTELY_HATE" to
> "thisGoodOne". Obviously I could do this by hand but it is a bit time
> consuming. Any tool / hack to help me with this?
> Thank

If you're on Windows and know Python, you could download Programmer's Notepad 2 <http://www.pnotepad.org/> which supports scripting in Python to make custom macros/tools/extensions/etc. Maybe someone already made such a PN2 script, I don't know. It does already have a built-in keyboard shortcut for "convert to lowercase" (ctrl-u), which might at least help. Then you could manually uppercase the letter after each _ and then regex search/replace to get rid of the _'s.

IIRC, Visual Studio has a similar scripting feature, but not in Python (VBScript maybe? Or C#? I forget), so maybe you could do the same with Visual-D.

Or, it would probably be pretty simple to write a little script in D that just does a regex search for say, `[A-Z_][A-Z_]+` and then converts each instance.

Unfortunately I don't know offhand of a tool that would do it all automatically without code needing to be written. :(

October 13, 2012
Although I thought about refactoring, which I know is not available yet, this was very interesting example (for me as newbye).
Dňa 12. 10. 2012 21:43 Andrej Mitrovic  wrote / napísal(a):
> On 10/12/12, Lubos Pintes <lubos.pintes@gmail.com> wrote:
>> Hi,
>> I am still playing with DGUI library. Besides other things, I would like
>> to convert enum names
>
> You mean at compile-time? Try this: http://dpaste.dzfl.pl/06b95c3f
>
> Copied below:
>
> import std.conv;
> import std.string;
> import std.traits;
>
> private @property string toCamelCase(E)()
>      if (is(E == enum))
> {
>      string result;
>      result ~= "enum CamelCase {\n";
>      foreach (Member; EnumMembers!E)
>      {
>          foreach (word; to!string(Member).split("_"))
>          {
>              result ~= word.capitalize;
>          }
>          result ~= " = " ~ Member.stringof ~ ",\n";
>      }
>      result ~= "}";
>      return result;
> }
>
> template CamelCase(E)
>      if (is(E == enum))
> {
>      mixin(toCamelCase!E);
> }
>
> enum SOME_ENUM
> {
>      VAL_FIRST = -4,
>      VAL_SECOND
> }
>
> alias CamelCase!SOME_ENUM SomeEnum;
>
> void main()
> {
>      SomeEnum en1 = SomeEnum.ValFirst;
>      SOME_ENUM en2 = SOME_ENUM.VAL_FIRST;
>      assert(en1 == en2);
> }
>

October 13, 2012
Blindly replacing identifiers is certainly not what I need, I want for example
FormStartPosition.CENTER_SCREEN to be written like FormStartPosition.centerScreen;
Enums in DGUI are written like
enum FormStartPosition {
  CENTER_SCREEN = SOME_WINDOWS_API_VALUE,
  ...
}
I need SOME_WINDOWS_API_VALUE unchanged. But it may be possible to do this with some script, I certainly check the notepad2.

Dňa 12. 10. 2012 22:36 Nick Sabalausky  wrote / napísal(a):
> On Fri, 12 Oct 2012 19:51:02 +0200
> Lubos Pintes <lubos.pintes@gmail.com> wrote:
>
>> Hi,
>> I am still playing with DGUI library. Besides other things, I would
>> like to convert enum names from
>> "THIS_STUPID_NAMING_CONVENTION_WHICH_I_ABSOLUTELY_HATE" to
>> "thisGoodOne". Obviously I could do this by hand but it is a bit time
>> consuming. Any tool / hack to help me with this?
>> Thank
>
> If you're on Windows and know Python, you could download Programmer's
> Notepad 2 <http://www.pnotepad.org/> which supports scripting in
> Python to make custom macros/tools/extensions/etc. Maybe someone
> already made such a PN2 script, I don't know. It does already have a
> built-in keyboard shortcut for "convert to lowercase" (ctrl-u), which
> might at least help. Then you could manually uppercase the letter
> after each _ and then regex search/replace to get rid of the _'s.
>
> IIRC, Visual Studio has a similar scripting feature, but not in Python
> (VBScript maybe? Or C#? I forget), so maybe you could do the same with
> Visual-D.
>
> Or, it would probably be pretty simple to write a little script in D
> that just does a regex search for say, `[A-Z_][A-Z_]+` and then
> converts each instance.
>
> Unfortunately I don't know offhand of a tool that would do it all
> automatically without code needing to be written. :(
>

October 13, 2012
On 10/13/12, Lubos Pintes <lubos.pintes@gmail.com> wrote:
> Although I thought about refactoring, which I know is not available yet, this was very interesting example (for me as newbye).

Ah ok. Well it wouldn't be too difficult to write a small D script that does this on source files. You wouldn't need a full-fledged parser just to rename enums.
October 13, 2012
On Fri, 12 Oct 2012 21:43:07 +0200, Andrej Mitrovic <andrej.mitrovich@gmail.com> wrote:

> You mean at compile-time? Try this: http://dpaste.dzfl.pl/06b95c3f
>
> Copied below:
>
> [SNIP]

That's pretty ingenious!