git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Antw: Re: diff support for the Eiffel language?

From
UWUlrich Windl <ulrich.windl@rz.uni-regensburg.de>
Date
Nov 27, 2012, 11:16 UTC
Message-ID
<50B4AF12020000A10000DA1F@gwsmtp1.uni-regensburg.de>
In-Reply-To
<50854B90.50807@viscovery.net>
Hi!

I managed to have some success, although it's not perfect. Unfortunately the Eiffel grammar does not allow a 100% solution. Example:

---
local
  x : BOOLEAN
---
declares a local variable named `x', while
---
  x : BOOLEAN
   do ... end
---

Declares a function named `x'. Formal generic parameters like `x : ARRAY[ARRAY[STRING]]' make things more complicate. Anyway, here's my solution (probably incomplete): --- % git config --local -e [diff "Eiffel"] xfuncname = "!^[[:space:]]*(check|class|[Cc]reate|else|elseif|end|ensure|do|!|feature|from|indexing|inherit|is|local|loop|note|require|then|until)[[:space:]]*\n\ ^[[:space:]]*(class[[:space:]]*[[:alpha:]_][[:alnum:]_]*)\n\ ^[[:space:]]*([[:alpha:]_][[:alnum:]_]*[[:space:]]*\\([^(\")]+:[^(\")]+\\)[[:space:]]*:[[:space:]*[[:alpha:]_][[:alnum:]_]*[[:space:]]*[^[:space:]\"]?[^\"=]*)[[:space:]]*$\n\

^[[:space:]]*([[:alpha:]_][[:alnum:]_]*[[:space:]]*\\([^(\")]+:[^(\")]+\\))[[:space:]]*$\n\

^[[:space:]]*([[:alpha:]_][[:alnum:]_]*[[:space:]]*:[[:space:]*[[:alpha:]_][[:alnum:]_]*[[:space:]]*[^[:space:]\"]?[^\"=]*)[[:space:]]*$\n\ ^[[:space:]]*([[:alpha:]_][[:alnum:]_]*)[[:space:]]*$" % cat .git/info/attributes *.e diff=Eiffel ---

Regards, Ulrich

>>> Johannes Sixt <j.sixt@viscovery.net> schrieb am 22.10.2012 um 15:35 in
Nachricht <50854B90.50807@viscovery.net>:
Show 23 quoted lines
> Am 10/22/2012 15:06, schrieb Ævar Arnfjörð Bjarmason:
> > On Mon, Oct 22, 2012 at 1:58 PM, Ulrich Windl 
> > <Ulrich.Windl@rz.uni-regensburg.de> wrote:
> >> However there's one little thing I noticed with "git diff": The
> >> conte4xt lines (staring with "@@") show the current function (in Perl
> >> and C), but they show the current "feature clause" in Eiffel (as
> >> opposed to the expected current feature). I wonder how hard it is to
> >> fix it (Observed in git 1.7.7 of openSUSE 12.1).
> > 
> > See git.git's e90d065 for an example of adding a new diff pattern.
> 
> It's not necessary to wait until there is built-in support for a new 
> language.
> 
> For example, for Windows resource files, I have
> 
> *.rc    diff=winres
> 
> in .gitattributes or .git/info/attributes and
> 
> [diff "winres"]
>         xfuncname =
>
"!^(BEGIN|END|FONT|CAPTION|STYLE)\n^[a-zA-Z_][a-zA-Z_0-9]*.*\n^[[:space:]]*(
Show 11 quoted lines
> [[:alnum:]_]+,
> *DIALOG.*)"
> 
> in .git/config (the xfuncname is all on a single line). The first part
> beginning at ! up to \n tells to ignore the specified matches. The other
> parts separated by \n tell the things to put in the hunk header. You can
> have "ignore" parts (with exlamation mark) and "take this" parts (without)
> in any order that is convenient, as long as the last one is "take this".
> 
> -- Hannes
> 
Previous: Johannes Sixt
Message 4 of 4 in “diff support for the Eiffel language?”
  1. Ulrich WindlOct 22, 2012
  2. Ævar Arnfjörð BjarmasonOct 22, 2012
  3. Johannes SixtOct 22, 2012
  4. Antw: Re: diff support for the Eiffel language?Ulrich Windl, Nov 27, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.