qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v4 06/14] qapi/introspect.py: replace 'extra' dict with 'comm


From: John Snow
Subject: Re: [PATCH v4 06/14] qapi/introspect.py: replace 'extra' dict with 'comment' argument
Date: Wed, 3 Feb 2021 16:21:38 -0500
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.6.0

On 2/3/21 9:23 AM, Markus Armbruster wrote:
John Snow <jsnow@redhat.com> writes:

This is only used to pass in a dictionary with a comment already set, so
skip the runaround and just accept the comment.

This works because _tree_to_qlit() treats 'if': None; 'comment': None
exactly like absent 'if'; 'comment'.

Confusing, because the two paragraphs talk about two different things:

1. Actual arguments for @extra are either None or {'comment': comment}.
    Simplify: replace parameter @extra by parameter @comment.

2. Dumb down the return value to always be of the form

     (obj {'if': ifcond, 'comment': comment})


I think you are drawing attention to the fact that 'if' and 'comment' are now always present in this dict instead of conditionally present.

(else, I have misread you. (I think you are missing a comma.))

I suspect splitting the patch is easier than crafting a clear commit
message for the combined one.


I wouldn't have considered to break out such a small change into two even smaller changes, but as you are in charge here ... Okey Dokey.

(meta-tangent: [1])


Signed-off-by: John Snow <jsnow@redhat.com>
---
  scripts/qapi/introspect.py | 18 ++++++++++--------
  1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/scripts/qapi/introspect.py b/scripts/qapi/introspect.py
index d3fbf694ad2..0aa3b77109f 100644
--- a/scripts/qapi/introspect.py
+++ b/scripts/qapi/introspect.py
@@ -10,6 +10,8 @@
  See the COPYING file in the top-level directory.
  """
+from typing import Optional
+
  from .common import (
      c_name,
      gen_endif,
@@ -24,11 +26,11 @@
  )
-def _make_tree(obj, ifcond, extra=None):
-    if extra is None:
-        extra = {}
-    if ifcond:
-        extra['if'] = ifcond
+def _make_tree(obj, ifcond, comment=None):
+    extra = {
+        'if': ifcond,
+        'comment': comment,
+    }
      return (obj, extra)

Obvious way to do just 1.:

    def _make_tree(obj, ifcond, comment=None):
        extra = {}
        if ifcond:
            extra['if'] = ifcond
        if comment:
            extra['comment'] = comment


OK.

@@ -174,18 +176,18 @@ def _gen_features(features):
          return [_make_tree(f.name, f.ifcond) for f in features]
def _gen_tree(self, name, mtype, obj, ifcond, features):
-        extra = None
+        comment: Optional[str] = None
          if mtype not in ('command', 'event', 'builtin', 'array'):
              if not self._unmask:
                  # Output a comment to make it easy to map masked names
                  # back to the source when reading the generated output.
-                extra = {'comment': '"%s" = %s' % (self._name(name), name)}
+                comment = f'"{self._name(name)}" = {name}'
              name = self._name(name)
          obj['name'] = name
          obj['meta-type'] = mtype
          if features:
              obj['features'] = self._gen_features(features)
-        self._trees.append(_make_tree(obj, ifcond, extra))
+        self._trees.append(_make_tree(obj, ifcond, comment))
def _gen_member(self, member):
          obj = {'name': member.name, 'type': self._use_type(member.type)}


[1] As a matter of process, I sometimes find it cumbersome to intentionally engineer an intermediary state when I jumped straight from A->C in my actual editing.

I will usually keep such intermediary forms when they come about naturally in the course of development, but rarely seek to add them artificially -- it feels like a major bummer to engineer, test, and scrutinize code that's only bound to be deleted immediately after. Sometimes, it feels like a waste of reviewer effort, too.

It's been years and I still don't think I have any real intuitive sense for this, which is ...unfortunate.

--js




reply via email to

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