From: "Burakov, Anatoly" <anatoly.burakov@intel.com>
To: Bruce Richardson <bruce.richardson@intel.com>, dev@dpdk.org
Cc: thomas@monjalon.net
Subject: Re: [dpdk-dev] [PATCH v2 1/2] devtools: script to check meson indentation of lists
Date: Mon, 26 Apr 2021 14:40:25 +0100 [thread overview]
Message-ID: <32b16ecf-be20-1ad2-43b1-df0f4864f681@intel.com> (raw)
In-Reply-To: <20210426105403.226004-1-bruce.richardson@intel.com>
On 26-Apr-21 11:54 AM, Bruce Richardson wrote:
> This is a script to fix up minor formatting issues in meson files.
> It scans for, and can optionally fix, indentation issues and missing
> trailing commas in the lists in meson.build files. It also detects,
> and can fix, multi-line lists where more than one entry appears on a
> line.
>
> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> ---
<snip>
> +def split_code_comments(line):
> + 'splits a line into a code part and a comment part, returns (code, comment) tuple'
> + if line.lstrip().startswith('#'):
> + return ('', line)
> + elif '#' in line and '#include' not in line: # catch 99% of cases, not 100% > + idx = line.index('#')
> + while (line[idx - 1].isspace()):
> + idx -= 1
> + return line[:idx], line[idx:]
I think this could be simplified with regex:
# find any occurrences of '#' but only if it's not an '#include'
if not re.search(r'#(?!include)', line)
return line, ''
return line.split('#', maxsplit=1)
> + else:
> + return (line, '')
> +
> +
> +def setline(contents, index, value):
> + 'sets the contents[index] to value. Returns the line, along with code and comments part'
> + line = contents[index] = value
> + code, comments = split_code_comments(line)
> + return line, code, comments
> +
> +
> +def check_indentation(filename, contents):
> + '''check that a list or files() is correctly indented'''
> + infiles = False
> + inlist = False
> + edit_count = 0
> + for lineno, line in enumerate(contents):
> + code, comments = split_code_comments(line)
Nitpicking, but maybe instead of calling strip() all over the place,
just count the number of spaces and strip right at the outset? E.g.
something like:
stripped = code.strip()
line_indent = len(code) - len(stripped)
You can then reason about indent levels by comparing stripped to code
afterwards, and avoid doing this:
> + # skip further subarrays or lists
> + if '[' in code or ']' in code:
> + continue
> + if not code.startswith(indent) or code[len(indent)] == ' ':
Opting to just check the indent size you calculated initially. Unless
i'm missing something :)
You could also increment edit_count if `calculated indent + stripped` is
equal to `code`. Seems easier logic than raw string manipulation you're
going for here...
<snip>
> +def process_file(filename, fix):
> + '''run checks on file "filename"'''
> + if VERBOSE:
> + print(f'Processing {filename}')
> + with open(filename) as f:
> + contents = [ln.rstrip() for ln in f.readlines()]
So any trailing whitespace gets automatically and silently fixed?
> +
> + if check_indentation(filename, contents) > 0 and fix:
> + print(f"Fixing {filename}")
> + with open(filename, 'w') as f:
> + f.writelines([f'{ln}\n' for ln in contents])
Something seems suspect here. So, if `fix` is *not* specified, the
script just opens the file, reads it, and... does nothing else?
--
Thanks,
Anatoly
next prev parent reply other threads:[~2021-04-26 13:40 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-21 22:03 [dpdk-dev] [PATCH] drivers: fix indentation in build files Thomas Monjalon
2021-04-22 8:39 ` Bruce Richardson
2021-04-22 9:20 ` Thomas Monjalon
2021-04-26 10:56 ` Bruce Richardson
2021-04-22 9:02 ` [dpdk-dev] [RFC PATCH] devtools: script to check meson indentation of lists Bruce Richardson
2021-04-22 9:40 ` Burakov, Anatoly
2021-04-22 9:58 ` Bruce Richardson
2021-04-22 10:21 ` Burakov, Anatoly
2021-04-22 10:31 ` Bruce Richardson
2021-04-26 10:54 ` [dpdk-dev] [PATCH v2 1/2] " Bruce Richardson
2021-04-26 10:54 ` [dpdk-dev] [PATCH v2 2/2] build: style fixup on meson files Bruce Richardson
2021-04-26 13:40 ` Burakov, Anatoly [this message]
2021-04-26 14:05 ` [dpdk-dev] [PATCH v2 1/2] devtools: script to check meson indentation of lists Bruce Richardson
2021-04-26 14:48 ` Burakov, Anatoly
2021-05-04 13:05 ` Thomas Monjalon
2021-05-04 13:34 ` David Marchand
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=32b16ecf-be20-1ad2-43b1-df0f4864f681@intel.com \
--to=anatoly.burakov@intel.com \
--cc=bruce.richardson@intel.com \
--cc=dev@dpdk.org \
--cc=thomas@monjalon.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).