1. 16 3月, 2017 11 次提交
    • M
      qapi2texi: Explain enum value undocumentedness more clearly · 5da19f14
      Markus Armbruster 提交于
      Instead of not saying anything when we have no documentation, say "Not
      documented".
      
      Example change (qemu-qmp-ref.txt):
      
        -- Enum: GuestPanicAction
      
            An enumeration of the actions taken when guest OS panic is detected
      
            Values:
            'pause'
                 system pauses
            'poweroff'
      +          Not documented
      
            Since: 2.1 (poweroff since 2.8)
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Message-Id: <1489582656-31133-23-git-send-email-armbru@redhat.com>
      5da19f14
    • M
      qapi2texi: Present the table of members more clearly · 2a1183ce
      Markus Armbruster 提交于
      The table of members follows the main descriptive text immediately.
      Makes it hard to see what it is about.  Start a new paragraph, and
      lead with a line "Members:" for object and alternate types, "Values:"
      for enumeration types, and "Arguments:" for commands and events.
      
      Example change (qemu-qmp-ref.txt):
      
        -- Command: set_link
      
            Sets the link status of a virtual network adapter.
      +
      +     Arguments:
            'name'
                 the device name of the virtual network adapter
            'up'
                 true to set the link status to be up
      
            Returns: Nothing on success If 'name' is not a valid network
            device, DeviceNotFound
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Message-Id: <1489582656-31133-22-git-send-email-armbru@redhat.com>
      2a1183ce
    • M
      qapi2texi: Plainer enum value and member name formatting · 71d918a1
      Markus Armbruster 提交于
      Use @code{%s} instead of @code{'%s'}.  Impact, using @id as example:
      
      * Texinfo
        -@item @code{'id'}
        +@item @code{id}
      
      * HTML
        -<dt><code>'id'</code></dt>
        +<dt><code>id</code></dt>
      
      * POD (for manual pages):
        -=item C<'id'>
        +=item C<id>
      
      * Formatted manual pages:
        -'id'
        +"id"
      
      * Plain text:
        -     ''id''
        +     'id'
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Message-Id: <1489582656-31133-21-git-send-email-armbru@redhat.com>
      71d918a1
    • M
      qapi: Prefer single-quoted strings more consistently · ef801a9b
      Markus Armbruster 提交于
      PEP 8 advises:
      
          In Python, single-quoted strings and double-quoted strings are the
          same.  This PEP does not make a recommendation for this.  Pick a
          rule and stick to it.  When a string contains single or double
          quote characters, however, use the other one to avoid backslashes
          in the string.  It improves readability.
      
      The QAPI generators succeed at picking a rule, but fail at sticking to
      it.  Convert a bunch of double-quoted strings to single-quoted ones.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Message-Id: <1489582656-31133-20-git-send-email-armbru@redhat.com>
      ef801a9b
    • M
      qapi: The #optional tag is redundant, drop · 1d8bda12
      Markus Armbruster 提交于
      We traditionally mark optional members #optional in the doc comment.
      Before commit 3313b612, this was entirely manual.
      
      Commit 3313b612 added some automation because its qapi2texi.py relied
      on #optional to determine whether a member is optional.  This is no
      longer the case since the previous commit: the only thing qapi2texi.py
      still does with #optional is stripping it out.  We still reject bogus
      qapi-schema.json and six places for qga/qapi-schema.json.
      
      Thus, you can't actually rely on #optional to see whether something is
      optional.  Yet we still make people add it manually.  That's just
      busy-work.
      
      Drop the code to check, fix up and strip out #optional, along with all
      instances of #optional.  To keep it out, add code to reject it, to be
      dropped again once the dust settles.
      
      No change to generated documentation.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Message-Id: <1489582656-31133-18-git-send-email-armbru@redhat.com>
      1d8bda12
    • M
      qapi2texi: Convert to QAPISchemaVisitor · aa964b7f
      Markus Armbruster 提交于
      qapi2texi works with schema expression trees.  Such a tight coupling
      to schema language syntax is not a good idea.  Convert it to the visitor
      interface the other generators use.
      
      No change to generated documentation.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Message-Id: <1489582656-31133-17-git-send-email-armbru@redhat.com>
      aa964b7f
    • M
      qapi: Conjure up QAPIDoc.ArgSection for undocumented members · 860e8778
      Markus Armbruster 提交于
      qapi2texi.py already conjures up ArgSections for undocumented
      enumeration values, in texi_enum.  Drop that, and conjure them up for
      all kinds of "arguments" (enumeration values, object and alternate
      type members) in qapi.py instead.
      
      Take care to keep generated documentation exactly the same for now.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NEric Blake <eblake@redhat.com>
      Message-Id: <1489582656-31133-16-git-send-email-armbru@redhat.com>
      860e8778
    • M
      qapi: Avoid unwanted blank lines in QAPIDoc · b116fd8e
      Markus Armbruster 提交于
      We silently fix missing #optional tags for QAPIDoc by appending a line
      "#optional" to the section's .content.  However, this interferes with
      .__repr__ stripping trailing blank lines from .content.
      
      Use new ArgSection instance variable .optional instead, and leave
      .content alone.
      
      To permit testing .optional in texi_body(), clean up texi_enum()'s
      hack to add empty documentation for undocumented enum values: add an
      ArgSection instead of ''.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NMarc-André Lureau <marcandre.lureau@redhat.com>
      Message-Id: <1489582656-31133-12-git-send-email-armbru@redhat.com>
      b116fd8e
    • M
      qapi2texi: Fix up output around #optional · 42bebcc1
      Markus Armbruster 提交于
      We use tag #optional to mark optional members, like this:
      
          # @name: #optional The name of the guest
      
      texi_body() strips #optional, but not whitespace around it.  For the
      above, we get in qemu-qmp-qapi.texi
      
          @item @code{'name'} (optional)
           The name of the guest
          @end table
      
      The extra space can lead to artifacts in output, e.g in
      qemu-qmp-ref.7.pod
      
          =item C<'name'> (optional)
      
           The name of the guest
      
      and then in qemu-qmp-ref.7
      
          .IX Item "name (optional)"
          .Vb 1
          \& The name of the guest
          .Ve
      
      instead of intended plain
      
          .IX Item "name (optional)"
          The name of the guest
      
      Get rid of these artifacts by removing whitespace around #optional
      along with it.
      
      This turns three minus signs in qapi-schema.json into markup, because
      they're now at the beginning of the line.  Drop them, they're unwanted
      there.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NMarc-André Lureau <marcandre.lureau@redhat.com>
      Message-Id: <1489582656-31133-11-git-send-email-armbru@redhat.com>
      42bebcc1
    • M
      qapi: Make doc comments optional where we don't need them · bc52d03f
      Markus Armbruster 提交于
      Since we added the documentation generator in commit 3313b612, doc
      comments are mandatory.  That's a very good idea for a schema that
      needs to be documented, but has proven to be annoying for testing.
      
      Make doc comments optional again, but add a new directive
      
          { 'pragma': { 'doc-required': true } }
      
      to let a QAPI schema require them.
      
      Add test cases for the new pragma directive.  While there, plug a
      minor hole in includ directive test coverage.
      
      Require documentation in the schemas we actually want documented:
      qapi-schema.json and qga/qapi-schema.json.
      
      We could probably make qapi2texi.py cope with incomplete
      documentation, but for now, simply make it refuse to run unless the
      schema has 'doc-required': true.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Message-Id: <1489582656-31133-3-git-send-email-armbru@redhat.com>
      [qapi-code-gen.txt wording tweaked]
      Reviewed-by: NEric Blake <eblake@redhat.com>
      bc52d03f
    • M
      qapi2texi: change texi formatters · 597494ab
      Marc-André Lureau 提交于
      STRUCT_FMT is generic enough, rename it to TYPE_FMT, use it for unions.
      
      Rename COMMAND_FMT to MSG_FMT, since it applies to both commands and
      events.
      Signed-off-by: NMarc-André Lureau <marcandre.lureau@redhat.com>
      Message-Id: <20170125130308.16104-2-marcandre.lureau@redhat.com>
      Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      597494ab
  2. 20 2月, 2017 1 次提交
  3. 16 1月, 2017 1 次提交
    • M
      qapi: add qapi2texi script · 3313b612
      Marc-André Lureau 提交于
      As the name suggests, the qapi2texi script converts JSON QAPI
      description into a texi file suitable for different target
      formats (info/man/txt/pdf/html...).
      
      It parses the following kind of blocks:
      
      Free-form:
      
        ##
        # = Section
        # == Subsection
        #
        # Some text foo with *emphasis*
        # 1. with a list
        # 2. like that
        #
        # And some code:
        # | $ echo foo
        # | -> do this
        # | <- get that
        #
        ##
      
      Symbol description:
      
        ##
        # @symbol:
        #
        # Symbol body ditto ergo sum. Foo bar
        # baz ding.
        #
        # @param1: the frob to frobnicate
        # @param2: #optional how hard to frobnicate
        #
        # Returns: the frobnicated frob.
        #          If frob isn't frobnicatable, GenericError.
        #
        # Since: version
        # Notes: notes, comments can have
        #        - itemized list
        #        - like this
        #
        # Example:
        #
        # -> { "execute": "quit" }
        # <- { "return": {} }
        #
        ##
      
      That's roughly following the following EBNF grammar:
      
      api_comment = "##\n" comment "##\n"
      comment = freeform_comment | symbol_comment
      freeform_comment = { "# " text "\n" | "#\n" }
      symbol_comment = "# @" name ":\n" { member | tag_section | freeform_comment }
      member = "# @" name ':' [ text ] "\n" freeform_comment
      tag_section = "# " ( "Returns:", "Since:", "Note:", "Notes:", "Example:", "Examples:" ) [ text ]  "\n" freeform_comment
      text = free text with markup
      
      Note that the grammar is ambiguous: a line "# @foo:\n" can be parsed
      both as freeform_comment and as symbol_comment.  The actual parser
      recognizes symbol_comment.
      
      See docs/qapi-code-gen.txt for more details.
      
      Deficiencies and limitations:
      - the generated QMP documentation includes internal types
      - union type support is lacking
      - type information is lacking in generated documentation
      - doc comment error message positions are imprecise, they point
        to the beginning of the comment.
      - a few minor issues, all marked TODO/FIXME in the code
      Signed-off-by: NMarc-André Lureau <marcandre.lureau@redhat.com>
      Message-Id: <20170113144135.5150-16-marcandre.lureau@redhat.com>
      Reviewed-by: NMarkus Armbruster <armbru@redhat.com>
      [test-qapi.py tweaked to avoid trailing empty lines in .out]
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      3313b612