title: Is there something like a linter/formatter/correctness checker for Doxygen blocks for C++?
body: <p>Here are some things that would reduce a lot of repetition day-to-day:</p>
  
  <ul>
  <li>Automatically "flag" or alert me doxygen blocks where the number of <code>param</code> sections does not match the number of arguments in the function declaration below it</li>
  <li>Ideally, tell me if the names of the parameters don't match as well</li>
  <li>Flag/alert me to doxygen blocks whose params are missing <code>[in]</code>, <code>[out]</code> or <code>[in,out]</code>. Ideally, auto-fill anything marked <code>const</code> as <code>[in]</code></li>
  <li>Something to convert between <code>\</code> and <code>@</code> for sections all at once rather than doing it ~4 times with find and replace.</li>
  <li>Something to format the blocks in a pretty way. As an example, here is a simple doxygen block that I consider "unformatted":</li>
  </ul>
  
  <pre><code>  /**
     * \brief Given a position in the grid, this updates the per-code bounds.
     * \param[in] code - The code we are adjusting the bounds of
     * \param[in] position1 - The new lower position
     * \param[in] position2 - The position of the lower cell within the high-level cell, 
     * this has a long description that may wrap over a couple lines.
     * \return How many positions we had to move
     */
    int updateExtents(
        const ObjCode code,
        const Geo::Point&lt;uint8_t&gt;&amp; upperPos,
        const Geo::Point&lt;uint8_t&gt;&amp; lowerPos);
  </code></pre>
  
  <p>And here's what it looks like with a little touch-up:</p>
  
  <pre><code>  /**
     * \brief Given a position in the grid, this updates the per-code bounds.
  
     * \param[in] code       - The code we are adjusting the bounds of
     * \param[in] position1  - The new lower position
     * \param[in] position2  - The position of the lower cell within the high-level cell, 
     *                         this has a long description that may wrap over a 
                               couple lines.
  
     * \return How many positions we had to move
     */
    int updateExtents(
        const ObjCode code,
        const Geo::Point&lt;uint8_t&gt;&amp; upperPos,
        const Geo::Point&lt;uint8_t&gt;&amp; lowerPos);
  </code></pre>
  
  <p>This is highly subjective, but the descriptions of each parameters are now aligned to the nearest tab, and wrap at that point rather than back at the beginning. I find it makes it a lot more readable. </p>