comp.lang.ada
 help / color / mirror / Atom feed
From: "John G. Volan" <johnvolan@sprintmail.com>
Subject: Re: Ada95 Pretty-Printers
Date: 1997/06/10
Date: 1997-06-10T00:00:00+00:00	[thread overview]
Message-ID: <339DA006.228F@sprintmail.com> (raw)
In-Reply-To: 339D677D.2FAC886C@link.com


Samuel Mize wrote:
> 
> John G. Volan wrote:
> > Are there any pretty-printers out there for Ada95?
> 
> This seems to come up every so often, and the answer so far has
> been "not really."
> 
> I would suppose that one could be built using the AdaMagic front
> end, but that's sheer speculation and I don't know how much it costs.

I've been toying with the thought of doing it using GNAT's front end ...
or maybe this would be a good application for ASIS ... hmm ... what's
the status of ASIS & GNAT?  Gotta look that up ...

> An Ada mode for emacs could be applied in a batch format, if you
> find one that works reliably for what you want.

Is there more than one version? Where can I find alternate versions of
emacs Ada mode?

> I got in the habit of putting an empty comment where I wanted a
> line break.  To use your first example:
> 
>    procedure Operation             --
>      (This  : in     This_Type;    --
>       That  : in     That_Type;    --
>       Other :    out Other_Type);
> 
> will become something like:
> 
>    procedure Operation             --
>      (This  : in This_Type;    --
>       That  : in That_Type;    --
>       Other : out Other_Type);
> 
> (Assuming that Apex doesn't maintain the blanks to line up "in"
> and "out").

Actually, the PRESERVE_WHITESPACE switch will respect the blanks you
manually put into a param list, but here's what Apex does with the
above:

   procedure Operation             --
               (This  : in     This_Type;    --
                That  : in     That_Type;    --
                Other :    out Other_Type);

Folks, is it okay with you if I say this is just plain dumb, or do I
have to hem and haw about it being all a matter of taste? :-)

> I used this mostly to keep expressions broken up the way I wanted.
> I found that, if you could keep the line breaks where you want
> them, you can get fairly readable expression formatting with just
> adding a few extraneous parentheses to direct the formatter to
> indent a sub-expression (I have to do the same thing with emacs).

Yeah, I do that too. I love Emacs, but I've been using it for years so
I'm used to the interface. Our engineers are only going to go for an
editor that adheres to X and/or Windows standards, and unfortunately
Emacs is not very "desktop friendly."

> I got third-hand, supposedly from someone at Rational, that if you
> put two spaces at the end of a line, the reformatter will leave
> that line break.  If you don't want trailing comments in your code,
> you can try it.  I don't know if it's a feature they promise to
> support, or just an artifact of the then-current implementation.

Hmm, that seems to work, but this is what you get:

   procedure Operation  
               (This  : in     This_Type;  
                That  : in     That_Type;  
                Other :    out Other_Type);

I tried this on some control structures, too. If you start with this:

  if Condition  
  then
    Statement;
  elsif Condition
    then  
    Statement;
  else
    Statement;
  end if;

  case Expression is
  when Choice =>
    Statement;
  when Choice =>
    Statement;
  end case;

  Label:
  while Condition  
  loop
    Statement;
  end loop Label;

  Block_Name:
  begin
    Statement;
  exception
  when Exception_Name =>
    Statement;
  end Block_Name;

you wind up with:

  if Condition  
    then
    Statement;
  elsif Condition
    then  
    Statement;
  else
    Statement;
  end if;

  case Expression is
    when Choice =>
      Statement;
    when Choice =>
      Statement;
  end case;

  Loop_Name:
    while Condition  
      loop
      Statement;
    end loop Loop_Name;

  Block_Name:
    begin
      Statement;
    exception
      when Exception_Name =>
        Statement;
    end Block_Name;

(This is with INDENTATION = BREAK_INDENT = 2.)

In other words: (1) If you force a linebreak before a "then" or a
"loop", Apex treats it as a continuation line and indents it by
BREAK_INDENT, rather than lining it up with the "if" or "while". And (2)
you can't prevent "when" clauses and block/loop names from introducing
an extra indent.

Witness what Apex does to an instantiation. Using the
double-space-before-linebreak trick, you can go from this:

  procedure Deallocate is new Ada.Unchecked_Deallocation  
    (Object => Object_Type'Class,
     Name   => Object_Access_Type);

to this:

  procedure Deallocate is new Ada.Unchecked_Deallocation  
                                (Object => Object_Type'Class,
                                 Name   => Object_Access_Type);

If you try this:

  procedure Deallocate is new  
    Ada.Unchecked_Deallocation  
    (Object => Object_Type'Class,
     Name   => Object_Access_Type);

Here's what you get:

  procedure Deallocate is new  
                             Ada.Unchecked_Deallocation  
                             (Object => Object_Type'Class,
                              Name   => Object_Access_Type);

!!!
------------------------------------------------------------------------
Internet.Usenet.Put_Signature 
  (Name       => "John G. Volan",
   Employer   => "Texas Instruments Advanced C3I Systems, San Jose, CA",
   Work_Email => "johnv@ti.com",
   Home_Email => "johnvolan@sprintmail.com",
   Slogan     => "Ada95: World's *FIRST* International-Standard OOPL",
   Disclaimer => "My employer never defined these opinions, so using " & 
                 "them would be totally erroneous...or is that just "  &
                 "nondeterministic behavior now? :-) ");
------------------------------------------------------------------------




  parent reply	other threads:[~1997-06-10  0:00 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <339C58A6.4D5A@sprintmail.com>
1997-06-10  0:00 ` Ada95 Pretty-Printers Samuel Mize
1997-06-10  0:00   ` John G. Volan
1997-06-11  0:00     ` Samuel Mize
1997-06-12  0:00     ` Robert Dewar
1997-06-12  0:00     ` John G. Volan
1997-06-13  0:00       ` Samuel Mize
1997-06-14  0:00         ` Robert Dewar
1997-06-14  0:00           ` Samuel Mize
1997-06-14  0:00             ` Robert Dewar
1997-06-14  0:00         ` Tom Phinney
1997-06-10  0:00   ` stuman
1997-06-10  0:00   ` John G. Volan [this message]
1997-06-10  0:00     ` Spam Hater
1997-06-10  0:00       ` Spam Hater
1997-06-16  0:00     ` Greg Gicca @pulsar
1997-06-10  0:00 ` Anonymous
1997-06-10  0:00   ` John G. Volan
1997-06-11  0:00 ` Rolf Ebert
1997-06-11  0:00   ` John G. Volan
1997-06-11  0:00 ` Matthew Heaney
1997-06-12  0:00 ` Jeff Burns
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox