bug-gawk
[Top][All Lists]
Advanced

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

Re: [bug-gawk] lint Option Future


From: M
Subject: Re: [bug-gawk] lint Option Future
Date: Thu, 23 May 2019 10:06:05 +0300

Thank you very much!

I mean that someone else who has chosen GNU AWK as a "glue" language for 
his/her script tasks could also use --lint in such a mode.
Sometimes Python/Perl/Ruby/Groovy/etc. are too comlicated for a task you deal 
with.
In my opinion, --lint option is useful even in small programs (or, as Wolfgang 
said, when your information security advocates it).

_______________

Yours respectfully,
Mark Krauze

22.05.2019, 20:55, "address@hidden" <address@hidden>:
> M <address@hidden> wrote:
>
>>  Thank you for a fast feedback!
>>
>>  No, the only thing under consideration is to be able to disable the "foo
>>  is a gawk extension" warnings somehow, keeping the others present. Nothing
>>  more.
>
> Patch is below. It'll be in git shortly.
>
>>  Perhaps, it would be useful for a society too.
>
> Not sure what you mean by that.
>
> Arnold
> ------------------------------------
> diff --git a/ChangeLog b/ChangeLog
> index 29a31b3..0219f79 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,21 @@
> +2019-05-22 Arnold D. Robbins <address@hidden>
> +
> + Add --lint=no-ext. Suggest by Mark Krauze <address@hidden>.
> +
> + * NEWS: Updated.
> + * awk.h (DO_LINT_EXTENSIONS): New enum.
> + (do_lint_extensions): New macro.
> + * awkgram.y (yylex, snode): Use do_lint_extensions instead of
> + do_lint where appropriate.
> + * builtin.c (do_length): Ditto.
> + * eval.c (set_IGNORECASE, set_BINMODE): Ditto.
> + (set_LINT): Revise logic.
> + * field.c (do_split, set_FIELDWIDTHS, chose_fs_function, set_FPAT):
> + Ditto.
> + * io.c (set_RS): Ditto.
> + * main.c (usage): Updated.
> + (parse_args): Revise the code to handle --lint=no-ext.
> +
>  2019-05-10 Arnold D. Robbins <address@hidden>
>
>          * NEWS: Updated.
> diff --git a/NEWS b/NEWS
> index c60f687..26ed3b5 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -17,6 +17,9 @@ Changes from 5.0.0 to 5.0.1
>
>  4. There are many small documentation improvements in the manual.
>
> +5. The new argument "no-ext" to --lint disables ``XXX is a gawk extension''
> + lint warnings.
> +
>  N. A number of bugs, some of them quite significant, have been fixed.
>      See the ChangeLog for details.
>
> diff --git a/awk.h b/awk.h
> index 8d87fc6..363e440 100644
> --- a/awk.h
> +++ b/awk.h
> @@ -1139,21 +1139,22 @@ extern int do_flags;
>  extern SRCFILE *srcfiles; /* source files */
>
>  enum do_flag_values {
> - DO_LINT_INVALID = 0x0001, /* only warn about invalid */
> - DO_LINT_ALL = 0x0002, /* warn about all things */
> - DO_LINT_OLD = 0x0004, /* warn about stuff not in V7 awk */
> - DO_TRADITIONAL = 0x0008, /* no gnu extensions, add traditional weirdnesses 
> */
> - DO_POSIX = 0x0010, /* turn off gnu and unix extensions */
> - DO_INTL = 0x0020, /* dump locale-izable strings to stdout */
> - DO_NON_DEC_DATA = 0x0040, /* allow octal/hex C style DATA. Use with 
> caution! */
> - DO_INTERVALS = 0x0080, /* allow {...,...} in regexps, see resetup() */
> - DO_PRETTY_PRINT = 0x0100, /* pretty print the program */
> - DO_DUMP_VARS = 0x0200, /* dump all global variables at end */
> - DO_TIDY_MEM = 0x0400, /* release vars when done */
> - DO_SANDBOX = 0x0800, /* sandbox mode - disable 'system' function & 
> redirections */
> - DO_PROFILE = 0x1000, /* profile the program */
> - DO_DEBUG = 0x2000, /* debug the program */
> - DO_MPFR = 0x4000 /* arbitrary-precision floating-point math */
> + DO_LINT_INVALID = 0x00001, /* only warn about invalid */
> + DO_LINT_EXTENSIONS = 0x00002, /* warn about gawk extensions */
> + DO_LINT_ALL = 0x00004, /* warn about all things */
> + DO_LINT_OLD = 0x00008, /* warn about stuff not in V7 awk */
> + DO_TRADITIONAL = 0x00010, /* no gnu extensions, add traditional weirdnesses 
> */
> + DO_POSIX = 0x00020, /* turn off gnu and unix extensions */
> + DO_INTL = 0x00040, /* dump locale-izable strings to stdout */
> + DO_NON_DEC_DATA = 0x00080, /* allow octal/hex C style DATA. Use with 
> caution! */
> + DO_INTERVALS = 0x00100, /* allow {...,...} in regexps, see resetup() */
> + DO_PRETTY_PRINT = 0x00200, /* pretty print the program */
> + DO_DUMP_VARS = 0x00400, /* dump all global variables at end */
> + DO_TIDY_MEM = 0x00800, /* release vars when done */
> + DO_SANDBOX = 0x01000, /* sandbox mode - disable 'system' function & 
> redirections */
> + DO_PROFILE = 0x02000, /* profile the program */
> + DO_DEBUG = 0x04000, /* debug the program */
> + DO_MPFR = 0x08000 /* arbitrary-precision floating-point math */
>  };
>
>  #define do_traditional (do_flags & DO_TRADITIONAL)
> @@ -1179,6 +1180,7 @@ extern int exit_val;
>  #else
>  #define do_lint (do_flags & (DO_LINT_INVALID|DO_LINT_ALL))
>  #define do_lint_old (do_flags & DO_LINT_OLD)
> +#define do_lint_extensions (do_flags & DO_LINT_EXTENSIONS)
>  #endif
>  extern int gawk_mb_cur_max;
>
> diff --git a/awkgram.y b/awkgram.y
> index 08bd096..3cbcfd3 100644
> --- a/awkgram.y
> +++ b/awkgram.y
> @@ -4379,7 +4379,7 @@ retry:
>                  }
>
>                  if (do_lint) {
> - if ((tokentab[mid].flags & GAWKX) != 0 && (warntab[mid] & GAWKX) == 0) {
> + if (do_lint_extensions && (tokentab[mid].flags & GAWKX) != 0 && 
> (warntab[mid] & GAWKX) == 0) {
>                                  lintwarn(_("`%s' is a gawk extension"),
>                                          tokentab[mid].operator);
>                                  warntab[mid] |= GAWKX;
> @@ -4702,7 +4702,7 @@ snode(INSTRUCTION *subn, INSTRUCTION *r)
>                  (void) mk_rexp(arg);
>
>                  if (nexp == 3) { /* 3rd argument there */
> - if (do_lint && ! warned) {
> + if (do_lint_extensions && ! warned) {
>                                  warned = true;
>                                  lintwarn(_("match: third argument is a gawk 
> extension"));
>                          }
> @@ -4759,7 +4759,7 @@ snode(INSTRUCTION *subn, INSTRUCTION *r)
>          } else if (r->builtin == do_close) {
>                  static bool warned = false;
>                  if (nexp == 2) {
> - if (do_lint && ! warned) {
> + if (do_lint_extensions && ! warned) {
>                                  warned = true;
>                                  lintwarn(_("close: second argument is a gawk 
> extension"));
>                          }
> diff --git a/builtin.c b/builtin.c
> index 491a96b..bea88b8 100644
> --- a/builtin.c
> +++ b/builtin.c
> @@ -529,7 +529,7 @@ do_length(int nargs)
>
>                  if (do_posix)
>                          fatal(_("length: received array argument"));
> - if (do_lint && ! warned) {
> + if (do_lint_extensions && ! warned) {
>                          warned = true;
>                          lintwarn(_("`length(array)' is a gawk extension"));
>                  }
> diff --git a/doc/ChangeLog b/doc/ChangeLog
> index 6220648..42c44fe 100644
> --- a/doc/ChangeLog
> +++ b/doc/ChangeLog
> @@ -1,3 +1,7 @@
> +2019-05-22 Arnold D. Robbins <address@hidden>
> +
> + * gawk1, gawktexi.in: Document --lint=no-ext.
> +
>  2019-05-06 Arnold D. Robbins <address@hidden>
>
>          * gawktexi.in: Fix some typos. Thanks to Mark Krauze
> diff --git a/doc/gawk.1 b/doc/gawk.1
> index f24e62a..de613aa 100644
> --- a/doc/gawk.1
> +++ b/doc/gawk.1
> @@ -13,7 +13,7 @@
>  . if \w'\(rq' .ds rq "\(rq
>  . \}
>  .\}
> -.TH GAWK 1 "Feb 19 2019" "Free Software Foundation" "Utility Commands"
> +.TH GAWK 1 "May 22 2019" "Free Software Foundation" "Utility Commands"
>  .SH NAME
>  gawk \- pattern scanning and processing language
>  .SH SYNOPSIS
> @@ -354,6 +354,11 @@ With an optional argument of
>  .BR invalid ,
>  only warnings about things that are
>  actually invalid are issued. (This is not fully implemented yet.)
> +With an optional argument of
> +.BR no-ext ,
> +warnings about
> +.I gawk
> +extensions are disabled.
>  .TP
>  .PD 0
>  .B \-M
> diff --git a/doc/gawktexi.in b/doc/gawktexi.in
> index 8065051..850d4e1 100644
> --- a/doc/gawktexi.in
> +++ b/doc/gawktexi.in
> @@ -54,9 +54,9 @@
> address@hidden applies to and all the info about who's publishing this edition
>
> address@hidden These apply across the board.
> address@hidden UPDATE-MONTH March, 2019
> address@hidden UPDATE-MONTH May, 2019
> address@hidden VERSION 5.0
> address@hidden PATCHLEVEL 0
> address@hidden PATCHLEVEL 1
>
> address@hidden GAWKINETTITLE TCP/IP Internetworking with @command{gawk}
> address@hidden FOR_PRINT
> @@ -4025,6 +4025,8 @@ This may be drastic, but its use will certainly 
> encourage the
>  development of cleaner @command{awk} programs.
>  With an optional argument of @samp{invalid}, only warnings about things
>  that are actually invalid are issued. (This is not fully implemented yet.)
> +With an optional argument of @samp{no-ext}, warnings about @command{gawk}
> +extensions are disabled.
>
>  Some warnings are only printed once, even if the dubious constructs they
>  warn about occur multiple times in your @command{awk} program. Thus,
> diff --git a/eval.c b/eval.c
> index 132c850..8acfba0 100644
> --- a/eval.c
> +++ b/eval.c
> @@ -706,7 +706,7 @@ set_IGNORECASE()
>  {
>          static bool warned = false;
>
> - if ((do_lint || do_traditional) && ! warned) {
> + if ((do_lint_extensions || do_traditional) && ! warned) {
>                  warned = true;
>                  lintwarn(_("`IGNORECASE' is a gawk extension"));
>          }
> @@ -727,7 +727,7 @@ set_BINMODE()
>          char *p;
>          NODE *v = fixtype(BINMODE_node->var_value);
>
> - if ((do_lint || do_traditional) && ! warned) {
> + if ((do_lint_extensions || do_traditional) && ! warned) {
>                  warned = true;
>                  lintwarn(_("`BINMODE' is a gawk extension"));
>          }
> @@ -964,6 +964,8 @@ set_LINT()
>                  if (lintlen > 0) {
>                          if (lintlen == 7 && strncmp(lintval, "invalid", 7) 
> == 0)
>                                  do_flags |= DO_LINT_INVALID;
> + else if (lintlen == 6 && strncmp(lintval, "no-ext", 6) == 0)
> + do_flags &= ~DO_LINT_EXTENSIONS;
>                          else {
>                                  do_flags |= DO_LINT_ALL;
>                                  if (lintlen == 5 && strncmp(lintval, 
> "fatal", 5) == 0)
> diff --git a/field.c b/field.c
> index 6502b2f..285376f 100644
> --- a/field.c
> +++ b/field.c
> @@ -978,7 +978,7 @@ do_split(int nargs)
>                  sep_arr = POP_PARAM();
>                  if (sep_arr->type != Node_var_array)
>                          fatal(_("split: fourth argument is not an array"));
> - if ((do_lint || do_lint_old) && ! warned) {
> + if ((do_lint_extensions || do_lint_old) && ! warned) {
>                          warned = true;
>                          lintwarn(_("split: fourth argument is a gawk 
> extension"));
>                  }
> @@ -1144,7 +1144,7 @@ set_FIELDWIDTHS()
>          bool fatal_error = false;
>          NODE *tmp;
>
> - if (do_lint && ! warned) {
> + if (do_lint_extensions && ! warned) {
>                  warned = true;
>                  lintwarn(_("`FIELDWIDTHS' is a gawk extension"));
>          }
> @@ -1307,7 +1307,7 @@ choose_fs_function:
>
>                  set_parser(null_parse_field);
>
> - if (do_lint && ! warned) {
> + if (do_lint_extensions && ! warned) {
>                          warned = true;
>                          lintwarn(_("null string for `FS' is a gawk 
> extension"));
>                  }
> @@ -1438,7 +1438,7 @@ set_FPAT()
>          bool remake_re = true;
>          NODE *fpat;
>
> - if (do_lint && ! warned) {
> + if (do_lint_extensions && ! warned) {
>                  warned = true;
>                  lintwarn(_("`FPAT' is a gawk extension"));
>          }
> diff --git a/io.c b/io.c
> index 3d90e71..c49d128 100644
> --- a/io.c
> +++ b/io.c
> @@ -4075,7 +4075,7 @@ set_RS()
>
>                  matchrec = rsrescan;
>
> - if (do_lint && ! warned) {
> + if (do_lint_extensions && ! warned) {
>                          lintwarn(_("multicharacter value of `RS' is a gawk 
> extension"));
>                          warned = true;
>                  }
> diff --git a/main.c b/main.c
> index 1f23e57..c2e3aa5 100644
> --- a/main.c
> +++ b/main.c
> @@ -605,7 +605,7 @@ usage(int exitval, FILE *fp)
>           * TRANSLATORS: the "fatal" and "invalid" here are literal
>           * values, they should not be translated. Thanks.
>           */
> - fputs(_("\t-L[fatal|invalid]\t--lint[=fatal|invalid]\n"), fp);
> + fputs(_("\t-L[fatal|invalid|no-ext]\t--lint[=fatal|invalid|no-ext]\n"), fp);
>          fputs(_("\t-M\t\t\t--bignum\n"), fp);
>          fputs(_("\t-N\t\t\t--use-lc-numeric\n"), fp);
>          fputs(_("\t-n\t\t\t--non-decimal-data\n"), fp);
> @@ -1622,7 +1622,7 @@ parse_args(int argc, char **argv)
>
>  #ifndef NO_LINT
>                  case 'L':
> - do_flags |= DO_LINT_ALL;
> + do_flags |= (DO_LINT_ALL|DO_LINT_EXTENSIONS);
>                          if (optarg != NULL) {
>                                  if (strcmp(optarg, "fatal") == 0)
>                                          lintfunc = r_fatal;
> @@ -1630,6 +1630,9 @@ parse_args(int argc, char **argv)
>                                          do_flags &= ~DO_LINT_ALL;
>                                          do_flags |= DO_LINT_INVALID;
>                                  }
> + else if (strcmp(optarg, "no-ext") == 0) {
> + do_flags &= ~DO_LINT_EXTENSIONS;
> + }
>                          }
>                          break;
>
> diff --git a/test/ChangeLog b/test/ChangeLog
> index 9032753..8292726 100644
> --- a/test/ChangeLog
> +++ b/test/ChangeLog
> @@ -1,3 +1,7 @@
> +2019-05-22 Arnold D. Robbins <address@hidden>
> +
> + * badargs.ok: Updated after code changes.
> +
>  2019-05-07 Arnold D. Robbins <address@hidden>
>
>          * Gentests: Finish handlinig NEED_SANDBOX.
> diff --git a/test/badargs.ok b/test/badargs.ok
> index 4999873..dfbd1c1 100644
> --- a/test/badargs.ok
> +++ b/test/badargs.ok
> @@ -17,7 +17,7 @@ Short options: GNU long options: (extensions)
>          -h --help
>          -i includefile --include=includefile
>          -l library --load=library
> - -L[fatal|invalid] --lint[=fatal|invalid]
> + -L[fatal|invalid|no-ext] --lint[=fatal|invalid|no-ext]
>          -M --bignum
>          -N --use-lc-numeric
>          -n --non-decimal-data



reply via email to

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