[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Problematic syntax error format
From: |
Emanuele Torre |
Subject: |
Problematic syntax error format |
Date: |
Mon, 13 Nov 2023 19:38:14 +0100 |
User-agent: |
Mutt/2.2.12 (2023-09-09) |
Hello.
Currently, when GNU awk encounters a syntax error in a script file, it
reports a error message in the following format:
awk: gen_enum_h.awk:7: if {(!ename)
awk: gen_enum_h.awk:7: ^ syntax error
And, similarly, when it encounters a runtime error, it uses this format:
awk: gen_enum_h.awk:82: fatal: attempt to use scalar `enums' as an array
So a line prefixed by ARGV[0] ": " FILENAME ":" FNR ":" basically.
The problem with that is that I am using a awk script in a build step of
one of my programs, and vim's :make command, when building fails, opens
automatically the file specified by the first line on the stdout or
stderr that contains :NUMBER: since that is usually how compilers and
other programs (e.g. grep) report the location of a errors or matches.
But the way it interprets that line is basically just:
* everything up to the first :NUMBER: is the path to the file with the
problem
* NUMBER is the line number
* if there is another NUMBER: after the first :NUMBER:, that is the
column number
When I accidentaly introduce a error in that script when I am modifying
it, since gawk is prefixing ARGV[0]": " to FILENAME":"FNR":", for the
previously mentioned error message, vim opens a new non-existing file
named "awk: gen_enum_h.awk" instead of "gen_enum_h.awk" at line 7. Which
is quite annoying.
I agree that vim is not being very smart here, but I also think gawk
should avoid outputing FILENAME:LINENUMBER with something at the start
of the line since the general convention is to only output that kind of
format from at the start of the line.
Could you please change the output format of those syntax errors to make
them play nicer with vim's :make command?
Either don't use ":"NUMBER":"; and instead say "line NUMBER:" like mawk,
nawk, GNU sed, bash, and others, so it is not recognised as
FILENAME:NUMBER:
mawk: gen_enum_h.awk: line 7: syntax error at or near {
nawk: syntax error at source line 4 source file gen_enum_h.awk
context is
if >>> { <<<
nawk: illegal statement at source line 4 source file gen_enum_h.awk
nawk: illegal statement at source line 4 source file gen_enum_h.awk
missing }
sed: file - line 1: extra characters after command
/dev/stdin: line 2: syntax error: unexpected end of file
Or, even better, continue using FILENAME":"FNR":", but output don't
prefix it with "awk: "; for example:
awk: description of the syntax error or just "syntax error"
gen_enum_h.awk:7: if {(!ename)
gen_enum_h.awk:7: ^ syntax error
awk: description of the syntax error or just "syntax error"
gen_enum_h.awk:7:8: if {(!ename)
gen_enum_h.awk:7:8: ^ syntax error
awk: runtime error
gen_enum_h.awk:82: fatal: attempt to use scalar `enums' as an array
awk: fatal: attempt to use scalar `enums' as an array
gen_enum_h.awk:82: content of the line here if available
Thank you!
o/
emanuele6
- Problematic syntax error format,
Emanuele Torre <=