bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] maint.mk: prohibit use of "can not"


From: Jim Meyering
Subject: Re: [PATCH] maint.mk: prohibit use of "can not"
Date: Wed, 11 May 2011 10:11:49 +0200

Eric Blake wrote:

> On 04/09/2011 03:02 PM, Jim Meyering wrote:
>> There was a new use of "can not" in coreutils despite
>> my having performed this transformation before.
>> Autoconf is the same: one current/new violation,
>> in spite of applying the fix before.
>> I noticed that James Youngman recently fixed one in findutils
>> and there are several here in gnulib.
>>
>> With this, new offenses will be less likely.
>>
>>>From 2ba828d7b521d831648a4d0926d7885705cf1d59 Mon Sep 17 00:00:00 2001
>> From: Jim Meyering <address@hidden>
>> Date: Sat, 9 Apr 2011 22:58:06 +0200
>> Subject: [PATCH] maint.mk: prohibit use of "can not"
>>
>> * top/maint.mk (sc_prohibit_can_not): New rule.
>> Writing "can not" (rather than "cannot") is too common.  Prohibit it.
>
> A recent libvirt patch demonstrated that this rule currently misses
> "can\n not"; should sc_prohibit_can_not be rewritten in the same style
> as sc_prohibit_doubled_word to also catch violations that are currently
> hidden by line-wrapping?

Yes, I'd planned to do that.
With the patch below, I've generalized the rule and variable names,
so that if we identify other undesirable sequences of words, this is
where we can add them.

Here's what I've just pushed:

>From 6adb4cdee88c73b0824cc094853737878cd38fd1 Mon Sep 17 00:00:00 2001
From: Jim Meyering <address@hidden>
Date: Wed, 11 May 2011 10:07:32 +0200
Subject: [PATCH] maint.mk: improve "can not" detection and generalize rule
 name

* top/maint.mk (sc_prohibit_misc): Renamed from sc_prohibit_can_not,
since we'll probably add a few more word pairs here.
Use the same technique as in sc_prohibit_doubled_word, so that
we recognize "can not" also when the words are separated by a newline.
Suggested by Eric Blake.
(perl_filename_lineno_text_): Define.  Factored out of...
(prohibit_doubled_word_): ...here.  Use the new definition.
(prohibit_misc_): New var.  Use it here, too.
(prohibit_misc_RE_): New overridable variable.
---
 ChangeLog    |   13 +++++++++++++
 top/maint.mk |   30 ++++++++++++++++++++++--------
 2 files changed, 35 insertions(+), 8 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index c448183..00e42d5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2011-05-11  Jim Meyering  <address@hidden>
+
+       maint.mk: improve "can not" detection and generalize rule name
+       * top/maint.mk (sc_prohibit_misc): Renamed from sc_prohibit_can_not,
+       since we'll probably add a few more word pairs here.
+       Use the same technique as in sc_prohibit_doubled_word, so that
+       we recognize "can not" also when the words are separated by a newline.
+       Suggested by Eric Blake.
+       (perl_filename_lineno_text_): Define.  Factored out of...
+       (prohibit_doubled_word_): ...here.  Use the new definition.
+       (prohibit_misc_): New var.  Use it here, too.
+       (prohibit_misc_RE_): New overridable variable.
+
 2011-05-10  Eric Blake  <address@hidden>

        fclose: avoid double close race when possible
diff --git a/top/maint.mk b/top/maint.mk
index 346fe00..bb4354f 100644
--- a/top/maint.mk
+++ b/top/maint.mk
@@ -840,16 +840,21 @@ sc_prohibit_S_IS_definition:
        halt='do not define S_IS* macros; include <sys/stat.h>'         \
          $(_sc_search_regexp)

-prohibit_doubled_word_RE_ ?= \
-  /\b(then?|[iao]n|i[fst]|but|f?or|at|and|[dt]o)\s+\1\b/gims
-prohibit_doubled_word_ =                                               \
-    -e 'while ($(prohibit_doubled_word_RE_))'                          \
+# Perl block to convert a match to FILE_NAME:LINENO:TEST,
+# that is shared by two definitions below.
+perl_filename_lineno_text_ =                                           \
     -e '  {'                                                           \
     -e '    $$n = ($$` =~ tr/\n/\n/ + 1);'                             \
     -e '    ($$v = $$&) =~ s/\n/\\n/g;'                                        
\
     -e '    print "$$ARGV:$$n:$$v\n";'                                 \
     -e '  }'

+prohibit_doubled_word_RE_ ?= \
+  /\b(then?|[iao]n|i[fst]|but|f?or|at|and|[dt]o)\s+\1\b/gims
+prohibit_doubled_word_ =                                               \
+    -e 'while ($(prohibit_doubled_word_RE_))'                          \
+    $(perl_filename_lineno_text_)
+
 # Define this to a regular expression that matches
 # any filename:dd:match lines you want to ignore.
 # The default is to ignore no matches.
@@ -860,10 +865,19 @@ sc_prohibit_doubled_word:
          | grep -vE '$(ignore_doubled_word_match_RE_)'                 \
          | grep . && { echo '$(ME): doubled words' 1>&2; exit 1; } || :

-sc_prohibit_can_not:
-       @prohibit='\<can[ ]not\>'                                       \
-       halt='use "cannot", not "can'' not"'                            \
-         $(_sc_search_regexp)
+# A regular expression matching undesirable combinations of words like
+# "can not"; this matches them even when the two words appear on different
+# lines, but not when there is an intervening delimiter like "#" or "*".
+prohibit_misc_RE_ ?= \
+  /\bcan\s+not\b/gims
+prohibit_misc_ =                                                       \
+    -e 'while ($(prohibit_misc_RE_))'                                  \
+    $(perl_filename_lineno_text_)
+
+sc_prohibit_misc:
+       @perl -n -0777 $(prohibit_misc_) $$($(VC_LIST_EXCEPT))          \
+         | grep -vE '$(prohibit_misc_RE_)'                             \
+         | grep . && { echo '$(ME): undesirable words' 1>&2; exit 1; } || :

 _ptm1 = use "test C1 && test C2", not "test C1 -''a C2"
 _ptm2 = use "test C1 || test C2", not "test C1 -''o C2"
--
1.7.5.1.354.g761178



reply via email to

[Prev in Thread] Current Thread [Next in Thread]