[PATCH 16/19] scripts/qapi: strip trailing whitespaces

Paolo Bonzini posted 19 patches 4 months ago
Maintainers: Paolo Bonzini <pbonzini@redhat.com>, "Marc-André Lureau" <marcandre.lureau@redhat.com>, "Daniel P. Berrangé" <berrange@redhat.com>, "Philippe Mathieu-Daudé" <philmd@linaro.org>, Markus Armbruster <armbru@redhat.com>, Michael Roth <michael.roth@amd.com>, Manos Pitsidianakis <manos.pitsidianakis@linaro.org>, "Alex Bennée" <alex.bennee@linaro.org>, Thomas Huth <thuth@redhat.com>
There is a newer version of this series
[PATCH 16/19] scripts/qapi: strip trailing whitespaces
Posted by Paolo Bonzini 4 months ago
From: Marc-André Lureau <marcandre.lureau@redhat.com>

This help workaround a rustfmt issue.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Link: https://lore.kernel.org/r/20210907121943.3498701-16-marcandre.lureau@redhat.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 scripts/qapi/gen.py | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/scripts/qapi/gen.py b/scripts/qapi/gen.py
index 0c9b8db3b02..c9721545ea7 100644
--- a/scripts/qapi/gen.py
+++ b/scripts/qapi/gen.py
@@ -58,7 +58,11 @@ def add(self, text: str) -> None:
         self._body += text
 
     def get_content(self) -> str:
-        return self._top() + self._preamble + self._body + self._bottom()
+        content = self._top() + self._preamble + self._body + self._bottom()
+        # delete trailing white-spaces (working around
+        # https://github.com/rust-lang/rustfmt/issues/4248)
+        content = re.sub(r'\s+$', '\n', content, 0, re.M)
+        return content
 
     def _top(self) -> str:
         # pylint: disable=no-self-use
-- 
2.51.0


Re: [PATCH 16/19] scripts/qapi: strip trailing whitespaces
Posted by Markus Armbruster 2 months ago
Paolo Bonzini <pbonzini@redhat.com> writes:

> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> This help workaround a rustfmt issue.

Which one?  Pointer suffices.

>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> Link: https://lore.kernel.org/r/20210907121943.3498701-16-marcandre.lureau@redhat.com
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  scripts/qapi/gen.py | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/scripts/qapi/gen.py b/scripts/qapi/gen.py
> index 0c9b8db3b02..c9721545ea7 100644
> --- a/scripts/qapi/gen.py
> +++ b/scripts/qapi/gen.py
> @@ -58,7 +58,11 @@ def add(self, text: str) -> None:
>          self._body += text
>  
>      def get_content(self) -> str:
> -        return self._top() + self._preamble + self._body + self._bottom()
> +        content = self._top() + self._preamble + self._body + self._bottom()
> +        # delete trailing white-spaces (working around
> +        # https://github.com/rust-lang/rustfmt/issues/4248)
> +        content = re.sub(r'\s+$', '\n', content, 0, re.M)
> +        return content
>  
>      def _top(self) -> str:
>          # pylint: disable=no-self-use

This doesn't just delete trailing whitespace, it also collapses multiple
blank lines into one: \s matches newlines.

We lose the ability to generate multiple blank lines for all generators
based on QAPIGen: C (.c and .h), trace events, Rust.  Hmm.

Is collapsing blank lines necessary for working around the rustfmt
issue?

The generators other than the Rust generator do not emit trailing
whitespace.  Would that be practical for the Rust generator, too?
Re: [PATCH 16/19] scripts/qapi: strip trailing whitespaces
Posted by Paolo Bonzini 2 months ago
On 12/9/25 09:48, Markus Armbruster wrote:
> Paolo Bonzini <pbonzini@redhat.com> writes:
> 
>> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>>
>> This help workaround a rustfmt issue.
> 
> Which one?  Pointer suffices.
> 
>>
>> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
>> Link: https://lore.kernel.org/r/20210907121943.3498701-16-marcandre.lureau@redhat.com
>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>> ---
>>   scripts/qapi/gen.py | 6 +++++-
>>   1 file changed, 5 insertions(+), 1 deletion(-)
>>
>> diff --git a/scripts/qapi/gen.py b/scripts/qapi/gen.py
>> index 0c9b8db3b02..c9721545ea7 100644
>> --- a/scripts/qapi/gen.py
>> +++ b/scripts/qapi/gen.py
>> @@ -58,7 +58,11 @@ def add(self, text: str) -> None:
>>           self._body += text
>>   
>>       def get_content(self) -> str:
>> -        return self._top() + self._preamble + self._body + self._bottom()
>> +        content = self._top() + self._preamble + self._body + self._bottom()
>> +        # delete trailing white-spaces (working around
>> +        # https://github.com/rust-lang/rustfmt/issues/4248)
>> +        content = re.sub(r'\s+$', '\n', content, 0, re.M)
>> +        return content
>>   
>>       def _top(self) -> str:
>>           # pylint: disable=no-self-use
> 
> This doesn't just delete trailing whitespace, it also collapses multiple
> blank lines into one: \s matches newlines.
> 
> We lose the ability to generate multiple blank lines for all generators
> based on QAPIGen: C (.c and .h), trace events, Rust.  Hmm.
> 
> Is collapsing blank lines necessary for working around the rustfmt
> issue?
> 
> The generators other than the Rust generator do not emit trailing
> whitespace.  Would that be practical for the Rust generator, too?

The main source is stuff like %(cfg)s and %(serde_skip_if)s.  Rust's 
syntax makes it more natural to write in this style, compared to C where 
you have "#ifdef"..."#endif", but it results in empty lines.  I'll see 
if there's another way to clean up the output.

Paolo