From: Junio C Hamano <gitster@pobox.com>
To: Ivan Tham <pickfire@riseup.net>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] userdiff: add build-in pattern for shell
Date: Wed, 29 Mar 2017 10:39:08 -0700 [thread overview]
Message-ID: <xmqqzig49e4j.fsf@gitster.mtv.corp.google.com> (raw)
In-Reply-To: <20170329165331.17742-1-pickfire@riseup.net> (Ivan Tham's message of "Thu, 30 Mar 2017 00:53:31 +0800")
Ivan Tham <pickfire@riseup.net> writes:
> Shell are widely used but comes with lots of different patterns. The
> build-in pattern aim for POSIX-compatible shells with some additions:
>
> - Notably ${g//re/s} and ${g#cut}
> - "function" from bash
>
> Signed-off-by: Ivan Tham <pickfire@riseup.net>
> ---
> Documentation/gitattributes.txt | 2 ++
> t/t4034-diff-words.sh | 1 +
> t/t4034/sh/expect | 14 ++++++++++++++
> t/t4034/sh/post | 7 +++++++
> t/t4034/sh/pre | 7 +++++++
> userdiff.c | 5 +++++
> 6 files changed, 36 insertions(+)
> create mode 100644 t/t4034/sh/expect
> create mode 100644 t/t4034/sh/post
> create mode 100644 t/t4034/sh/pre
>
> diff --git a/Documentation/gitattributes.txt b/Documentation/gitattributes.txt
> index a53d093ca..1bad72df2 100644
> --- a/Documentation/gitattributes.txt
> +++ b/Documentation/gitattributes.txt
> @@ -706,6 +706,8 @@ patterns are available:
>
> - `ruby` suitable for source code in the Ruby language.
>
> +- `sh` suitable for source code in POSIX-compatible shells.
The new test you added seems to show that this is not limited to
POSIX shells but also understands bashisms like ${x//x/x}. Perhaps
drop "POSIX-compatible" from here.
> diff --git a/userdiff.c b/userdiff.c
> index 8b732e40b..8d5127fb6 100644
> --- a/userdiff.c
> +++ b/userdiff.c
> @@ -148,6 +148,11 @@ PATTERNS("csharp",
> "[a-zA-Z_][a-zA-Z0-9_]*"
> "|[-+0-9.e]+[fFlL]?|0[xXbB]?[0-9a-fA-F]+[lL]?"
> "|[-+*/<>%&^|=!]=|--|\\+\\+|<<=?|>>=?|&&|\\|\\||::|->"),
> +PATTERNS("sh",
> + "^[ \t]*(function )?[A-Za-z_][A-Za-z_0-9]*[ \t]*()[\t]*\\{?$",
There is something funky going on around parentheses on this line.
The ones around "function " is meant to be syntactic metacharacters
to produce a group in the regexp so that you can apply '?'
(i.e. zero or one occurrence) to it. But I think the second pair of
parentheses that appears later on the line, which enclose nothing,
are meant to be literal? E.g. "hello (){\n\techo world;\n}\n" They
would need some quoting, perhaps like
...[ \t]*\\(\\)[\t]*....
> + /* -- */
> + "(\\$|--?)?([a-zA-Z_][a-zA-Z0-9._]*|[0-9]+|#)|--" /* command/param */
TBH, I have no idea what this line-noise is doing.
$foobar, $4, --foobar, foobar, 123 and -- can be seen easily out of
these patterns. I am not sure what --# would be (perhaps you meant
to only catch $# and --# is included by accident, in which case it
is understandable). It feels a bit strange to see that $# is
supported but not $?; --foo but not --foo=bar; foobar but not "foo
bar" inside a dq-pair.
> + "|\\$[({]|[)}]|[-+*/=!]=?|[\\]&%#/|]{1,2}|[<>]{1,3}|[ \t]#.*"),
And this one is even more dense.
next prev parent reply other threads:[~2017-03-29 17:39 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-29 16:53 [PATCH] userdiff: add build-in pattern for shell Ivan Tham
2017-03-29 17:39 ` Junio C Hamano [this message]
2017-03-30 2:28 ` Pickfire
2017-03-30 6:25 ` Junio C Hamano
2017-03-30 7:20 ` Ivan Tham
2017-03-30 18:08 ` [PATCH v2] " Ivan Tham
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqzig49e4j.fsf@gitster.mtv.corp.google.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=pickfire@riseup.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.