8000 Updated docs generator to include trait info. by AlexSkrypnyk · Pull Request #389 · drevops/behat-steps · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Updated docs generator to include trait info. #389

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 4, 2025

Conversation

AlexSkrypnyk
Copy link
Member
@AlexSkrypnyk AlexSkrypnyk commented May 4, 2025

Summary by CodeRabbit

  • New Features
    • Enhanced documentation by displaying the full trait description in an expandable "About this trait" section for each trait.
  • Documentation
    • Improved clarity and readability of trait documentation with detailed, collapsible informational sections and better formatting.
  • Tests
    • Updated test cases to verify the presence and formatting of the new expandable trait descriptions in generated documentation.

Copy link
coderabbitai bot commented May 4, 2025

"""

Walkthrough

The updates modify the extraction and rendering of class-level docblock comments in the documentation generator. The extraction logic now preserves the full docblock content with line breaks and stores it in a new variable, which is then included in the method information array. The rendering function is updated to display this full description inside a collapsible HTML <details> block in the generated markdown documentation. Documentation and test files are also updated to reflect and verify the new presentation of trait descriptions, with no changes to step definitions or core logic.

Changes

File(s) Change Summary
docs.php Modified docblock extraction to preserve full descriptions; added class_description_full to method info; updated rendering to include a collapsible <details> block for trait descriptions.
steps.md Added expandable "About this trait" sections for each trait with descriptive content; minor formatting adjustments.
tests/phpunit/src/DocsTest.php Updated test data and expected output to include the new <details> block with full trait descriptions in rendered markdown.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant docs.php
    participant MarkdownOutput

    User->>docs.php: extract_info(class_name, ...)
    docs.php->>docs.php: Extract class-level docblock (preserve full content)
    docs.php->>docs.php: Add class_description_full to method info
    User->>docs.php: render_info(info, ...)
    docs.php->>MarkdownOutput: Render trait section with <details> block for class_description_full
    MarkdownOutput-->>User: Display markdown with collapsible trait descriptions
Loading

Poem

In the warren where docs are spun,
Full trait tales are now begun—
Collapsible secrets, neatly unfurled,
With <details> blocks, their stories twirled.
Tests and docs in harmony sing,
As rabbits hop and markdowns spring!
🐇✨
"""


🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between de533e7 and 7ab7e9d.

📒 Files selected for processing (3)
  • docs.php (4 hunks)
  • steps.md (159 hunks)
  • tests/phpunit/src/DocsTest.php (16 hunks)
🧰 Additional context used
🪛 markdownlint-cli2 (0.17.2)
steps.md

29-29: Inline HTML
Element: details

(MD033, no-inline-html)


29-29: Inline HTML
Element: summary

(MD033, no-inline-html)


29-29: Inline HTML
Element: strong

(MD033, no-inline-html)


29-29: Inline HTML
Element: br

(MD033, no-inline-html)


155-155: Inline HTML
Element: details

(MD033, no-inline-html)


155-155: Inline HTML
Element: summary

(MD033, no-inline-html)


155-155: Inline HTML
Element: strong

(MD033, no-inline-html)


155-155: Inline HTML
Element: br

(MD033, no-inline-html)


207-207: Inline HTML
Element: details

(MD033, no-inline-html)


207-207: Inline HTML
Element: summary

(MD033, no-inline-html)


207-207: Inline HTML
Element: strong

(MD033, no-inline-html)


207-207: Inline HTML
Element: br

(MD033, no-inline-html)


208-208: Inline HTML
Element: br

(MD033, no-inline-html)


288-288: Inline HTML
Element: details

(MD033, no-inline-html)


288-288: Inline HTML
Element: summary

(MD033, no-inline-html)


288-288: Inline HTML
Element: strong

(MD033, no-inline-html)


288-288: Inline HTML
Element: br

(MD033, no-inline-html)


289-289: Inline HTML
Element: br

(MD033, no-inline-html)


416-416: Inline HTML
Element: details

(MD033, no-inline-html)


416-416: Inline HTML
Element: summary

(MD033, no-inline-html)


416-416: Inline HTML
Element: strong

(MD033, no-inline-html)


416-416: Inline HTML
Element: br

(MD033, no-inline-html)


417-417: Inline HTML
Element: br

(MD033, no-inline-html)


437-437: Inline HTML
Element: details

(MD033, no-inline-html)


437-437: Inline HTML
Element: summary

(MD033, no-inline-html)


437-437: Inline HTML
Element: strong

(MD033, no-inline-html)


437-437: Inline HTML
Element: br

(MD033, no-inline-html)


438-438: Inline HTML
Element: br

(MD033, no-inline-html)


490-490: Inline HTML
Element: details

(MD033, no-inline-html)


490-490: Inline HTML
Element: summary

(MD033, no-inline-html)


490-490: Inline HTML
Element: strong

(MD033, no-inline-html)


490-490: Inline HTML
Element: br

(MD033, no-inline-html)


491-491: Inline HTML
Element: br

(MD033, no-inline-html)


658-658: Inline HTML
Element: details

(MD033, no-inline-html)


658-658: Inline HTML
Element: summary

(MD033, no-inline-html)


658-658: Inline HTML
Element: strong

(MD033, no-inline-html)


658-658: Inline HTML
Element: br

(MD033, no-inline-html)


659-659: Inline HTML
Element: br

(MD033, no-inline-html)


910-910: Inline HTML
Element: details

(MD033, no-inline-html)


910-910: Inline HTML
Element: summary

(MD033, no-inline-html)


910-910: Inline HTML
Element: strong

(MD033, no-inline-html)


910-910: Inline HTML
Element: br

(MD033, no-inline-html)


911-911: Inline HTML
Element: br

(MD033, no-inline-html)


1023-1023: Inline HTML
Element: details

(MD033, no-inline-html)


1023-1023: Inline HTML
Element: summary

(MD033, no-inline-html)


1023-1023: Inline HTML
Element: strong

(MD033, no-inline-html)


1023-1023: Inline HTML
Element: br

(MD033, no-inline-html)


1024-1024: Inline HTML
Element: br

(MD033, no-inline-html)


1125-1125: Inline HTML
Element: details

(MD033, no-inline-html)


1125-1125: Inline HTML
Element: summary

(MD033, no-inline-html)


1125-1125: Inline HTML
Element: strong

(MD033, no-inline-html)


1125-1125: Inline HTML
Element: br

(MD033, no-inline-html)


1126-1126: Inline HTML
Element: br

(MD033, no-inline-html)


1223-1223: Inline HTML
Element: details

(MD033, no-inline-html)


1223-1223: Inline HTML
Element: summary

(MD033, no-inline-html)


1223-1223: Inline HTML
Element: strong

(MD033, no-inline-html)


1223-1223: Inline HTML
Element: br

(MD033, no-inline-html)


1272-1272: Inline HTML
Element: details

(MD033, no-inline-html)


1272-1272: Inline HTML
Element: summary

(MD033, no-inline-html)


1272-1272: Inline HTML
Element: strong

(MD033, no-inline-html)


1272-1272: Inline HTML
Element: br

(MD033, no-inline-html)


1273-1273: Inline HTML
Element: br

(MD033, no-inline-html)


1374-1374: Inline HTML
Element: details

(MD033, no-inline-html)


1374-1374: Inline HTML
Element: summary

(MD033, no-inline-html)


1374-1374: Inline HTML
Element: strong

(MD033, no-inline-html)


1374-1374: Inline HTML
Element: br

(MD033, no-inline-html)


1427-1427: Inline HTML
Element: details

(MD033, no-inline-html)


1427-1427: Inline HTML
Element: summary

(MD033, no-inline-html)


1427-1427: Inline HTML
Element: strong

(MD033, no-inline-html)


1427-1427: Inline HTML
Element: br

(MD033, no-inline-html)


1428-1428: Inline HTML
Element: br

(MD033, no-inline-html)


1483-1483: Inline HTML
Element: details

(MD033, no-inline-html)


1483-1483: Inline HTML
Element: summary

(MD033, no-inline-html)


1483-1483: Inline HTML
Element: strong

(MD033, no-inline-html)


1483-1483: Inline HTML
Element: br

(MD033, no-inline-html)


1484-1484: Inline HTML
Element: br

(MD033, no-inline-html)


1505-1505: Inline HTML
Element: details

(MD033, no-inline-html)


1505-1505: Inline HTML
Element: summary

(MD033, no-inline-html)


1505-1505: Inline HTML
Element: strong

(MD033, no-inline-html)


1505-1505: Inline HTML
Element: br

(MD033, no-inline-html)


1506-1506: Inline HTML
Element: br

(MD033, no-inline-html)


1545-1545: Inline HTML
Element: details

(MD033, no-inline-html)


1545-1545: Inline HTML
Element: summary

(MD033, no-inline-html)


1545-1545: Inline HTML
Element: strong

(MD033, no-inline-html)


1545-1545: Inline HTML
Element: br

(MD033, no-inline-html)


1546-1546: Inline HTML
Element: br

(MD033, no-inline-html)


1593-1593: Inline HTML
Element: details

(MD033, no-inline-html)


1593-1593: Inline HTML
Element: summary

(MD033, no-inline-html)


1593-1593: Inline HTML
Element: strong

(MD033, no-inline-html)


1593-1593: Inline HTML
Element: br

(MD033, no-inline-html)


1594-1594: Inline HTML
Element: br

(MD033, no-inline-html)


1622-1622: Inline HTML
Element: details

(MD033, no-inline-html)


1622-1622: Inline HTML
Element: summary

(MD033, no-inline-html)


1622-1622: Inline HTML
Element: strong

(MD033, no-inline-html)


1622-1622: Inline HTML
Element: br

(MD033, no-inline-html)


1623-1623: Inline HTML
Element: br

(MD033, no-inline-html)


1702-1702: Inline HTML
Element: details

(MD033, no-inline-html)


1702-1702: Inline HTML
Element: summary

(MD033, no-inline-html)


1702-1702: Inline HTML
Element: strong

(MD033, no-inline-html)


1702-1702: Inline HTML
Element: br

(MD033, no-inline-html)


1703-1703: Inline HTML
Element: br

(MD033, no-inline-html)


1882-1882: Inline HTML
Element: details

(MD033, no-inline-html)


1882-1882: Inline HTML
Element: summary

(MD033, no-inline-html)


1882-1882: Inline HTML
Element: strong

(MD033, no-inline-html)


1882-1882: Inline HTML
Element: br

(MD033, no-inline-html)


1883-1883: Inline HTML
Element: br

(MD033, no-inline-html)

🔇 Additional comments (11)
docs.php (5)

131-137: Improved handling of docblock lines.

The updated code now properly handles empty lines in docblocks by removing only the first and last empty lines while preserving meaningful line breaks in the documentation. This is a good improvement for maintaining the structure of multi-paragraph documentation.


141-142: Good preprocessing of docblock content.

Trimming each line before storage ensures consistent formatting in the output documentation regardless of the original indentation in the docblocks.


175-175: Good data structure enhancement.

Adding the class_description_full key to the method info array maintains a clean data structure while adding the new functionality. This approach ensures all related information is kept together.


353-354: Thorough type checking.

The use of type checking with empty() and is_string() before manipulating the description is a good defensive programming practice.


355-360: Well-implemented collapsible trait description.

Using a <details> element with a summary is an excellent way to provide detailed information without cluttering the documentation. The conversion of newlines to <br> tags ensures proper HTML formatting of multi-paragraph text.

One thing to note is that this adds HTML within markdown, which works with most markdown renderers but depends on where the documentation will be displayed.

Make sure that the target markdown renderer (GitHub, GitLab, etc.) properly supports HTML <details> elements within markdown.

tests/phpunit/src/DocsTest.php (3)

445-445: Test data properly updated with new property.

The test data provider has been correctly updated to include the new 'class_description_full' property in all relevant test cases, ensuring proper test coverage for the new feature.

Also applies to: 481-481, 492-492, 544-544, 553-553, 598-598


507-508: Complete test coverage of rendering changes.

The expected markdown output in tests has been updated to include the new collapsible details element with trait descriptions, ensuring that the rendering logic changes are properly validated.

Also applies to: 522-523, 567-568


517-517: Improved Gherkin code block formatting.

The blank lines after Gherkin code blocks improve readability in the generated documentation. This is a small but meaningful improvement to the output formatting.

Also applies to: 532-532, 586-586

steps.md (3)

29-30: Well-formatted trait descriptions with appropriate HTML.

The implementation of collapsible "About this trait" sections effectively presents trait documentation in an organized, user-friendly way. The consistent formatting across all traits improves the overall documentation quality.

Also applies to: 155-156, 207-209, 288-290

🧰 Tools
🪛 markdownlint-cli2 (0.17.2)

29-29: Inline HTML
Element: details

(MD033, no-inline-html)


29-29: Inline HTML
Element: summary

(MD033, no-inline-html)


29-29: Inline HTML
Element: strong

(MD033, no-inline-html)


29-29: Inline HTML
Element: br

(MD033, no-inline-html)


44-44: Improved spacing after code blocks.

The added blank lines after Gherkin code blocks in the <details> sections improve readability by visually separating sections of documentation.

Also applies to: 57-57, 67-67


1-1913: Documentation successfully updated with trait information.

The documentation now provides more detailed information about each trait's purpose through the collapsible sections, making it more useful while still maintaining a clean presentation.

Note: The static analysis hints show numerous HTML-related markdown linting errors, but these can be safely ignored as HTML use is intentional here for the collapsible sections.

🧰 Tools
🪛 LanguageTool

[grammar] ~13-~13: Possible typo detected: Did you mean to write ‘from’ instead of ‘form’?
Context: ...ldtrait) | Interacts with and validates form fields. | | [FileDownloadTrait](#filedo...

(TYPO_FORM_FROM)

🪛 markdownlint-cli2 (0.17.2)

26-26: Tables should be surrounded by blank lines
null

(MD058, blanks-around-tables)


27-27: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Above

(MD022, blanks-around-headings)


29-29: Inline HTML
Element: details

(MD033, no-inline-html)


29-29: Inline HTML
Element: summary

(MD033, no-inline-html)


29-29: Inline HTML
Element: strong

(MD033, no-inline-html)


29-29: Inline HTML
Element: br

(MD033, no-inline-html)


34-34: Inline HTML
Element: details

(MD033, no-inline-html)


35-35: Inline HTML
Element: summary

(MD033, no-inline-html)


35-35: Inline HTML
Element: code

(MD033, no-inline-html)


48-48: Inline HTML
Element: details

(MD033, no-inline-html)


49-49: Inline HTML
Element: summary

(MD033, no-inline-html)


49-49: Inline HTML
Element: code

(MD033, no-inline-html)


61-61: Inline HTML
Element: details

(MD033, no-inline-html)


62-62: Inline HTML
Element: summary

(MD033, no-inline-html)


62-62: Inline HTML
Element: code

(MD033, no-inline-html)


71-71: Inline HTML
Element: details

(MD033, no-inline-html)


72-72: Inline HTML
Element: summary

(MD033, no-inline-html)


72-72: Inline HTML
Element: code

(MD033, no-inline-html)


81-81: Inline HTML
Element: details

(MD033, no-inline-html)


82-82: Inline HTML
Element: summary

(MD033, no-inline-html)


82-82: Inline HTML
Element: code

(MD033, no-inline-html)


91-91: Inline HTML
Element: details

(MD033, no-inline-html)


92-92: Inline HTML
Element: summary

(MD033, no-inline-html)


92-92: Inline HTML
Element: code

(MD033, no-inline-html)


103-103: Inline HTML
Element: details

(MD033, no-inline-html)


104-104: Inline HTML
Element: summary

(MD033, no-inline-html)


104-104: Inline HTML
Element: code

(MD033, no-inline-html)


113-113: Inline HTML
Element: details

(MD033, no-inline-html)


114-114: Inline HTML
Element: summary

(MD033, no-inline-html)


114-114: Inline HTML
Element: code

(MD033, no-inline-html)


123-123: Inline HTML
Element: details

(MD033, no-inline-html)


124-124: Inline HTML
Element: summary

(MD033, no-inline-html)


124-124: Inline HTML
Element: code

(MD033, no-inline-html)


133-133: Inline HTML
Element: details

(MD033, no-inline-html)


134-134: Inline HTML
Element: summary

(MD033, no-inline-html)


134-134: Inline HTML
Element: code

(MD033, no-inline-html)


143-143: Inline HTML
Element: details

(MD033, no-inline-html)


144-144: Inline HTML
Element: summary

(MD033, no-inline-html)


144-144: Inline HTML
Element: code

(MD033, no-inline-html)


155-155: Inline HTML
Element: details

(MD033, no-inline-html)


155-155: Inline HTML
Element: summary

(MD033, no-inline-html)


155-155: Inline HTML
Element: strong

(MD033, no-inline-html)


155-155: Inline HTML
Element: br

(MD033, no-inline-html)


160-160: Inline HTML
Element: details

(MD033, no-inline-html)


161-161: Inline HTML
Element: summary

(MD033, no-inline-html)


161-161: Inline HTML
Element: code

(MD033, no-inline-html)


172-172: Inline HTML
Element: details

(MD033, no-inline-html)


173-173: Inline HTML
Element: summary

(MD033, no-inline-html)


173-173: Inline HTML
Element: code

(MD033, no-inline-html)


185-185: Inline HTML
Element: details

(MD033, no-inline-html)


186-186: Inline HTML
Element: summary

(MD033, no-inline-html)


186-186: Inline HTML
Element: code

(MD033, no-inline-html)


195-195: Inline HTML
Element: details

(MD033, no-inline-html)


196-196: Inline HTML
Element: summary

(MD033, no-inline-html)


196-196: Inline HTML
Element: code

(MD033, no-inline-html)


207-207: Inline HTML
Element: details

(MD033, no-inline-html)


207-207: Inline HTML
Element: summary

(MD033, no-inline-html)


207-207: Inline HTML
Element: strong

(MD033, no-inline-html)


207-207: Inline HTML
Element: br

(MD033, no-inline-html)


208-208: Inline HTML
Element: br

(MD033, no-inline-html)


213-213: Inline HTML
Element: details

(MD033, no-inline-html)


214-214: Inline HTML
Element: summary

(MD033, no-inline-html)


214-214: Inline HTML
Element: code

(MD033, no-inline-html)


223-223: Inline HTML
Element: details

(MD033, no-inline-html)


224-224: Inline HTML
Element: summary

(MD033, no-inline-html)


224-224: Inline HTML
Element: code

(MD033, no-inline-html)


236-236: Inline HTML
Element: details

(MD033, no-inline-html)


237-237: Inline HTML
Element: summary

(MD033, no-inline-html)


237-237: Inline HTML
Element: code

(MD033, no-inline-html)


246-246: Inline HTML
Element: details

(MD033, no-inline-html)


247-247: Inline HTML
Element: summary

(MD033, no-inline-html)


247-247: Inline HTML
Element: code

(MD033, no-inline-html)


256-256: Inline HTML
Element: details

(MD033, no-inline-html)


257-257: Inline HTML
Element: summary

(MD033, no-inline-html)


257-257: Inline HTML
Element: code

(MD033, no-inline-html)


266-266: Inline HTML
Element: details

(MD033, no-inline-html)


267-267: Inline HTML
Element: summary

(MD033, no-inline-html)


267-267: Inline HTML
Element: code

(MD033, no-inline-html)


276-276: Inline HTML
Element: details

(MD033, no-inline-html)


277-277: Inline HTML
Element: summary

(MD033, no-inline-html)


277-277: Inline HTML
Element: code

(MD033, no-inline-html)


288-288: Inline HTML
Element: details

(MD033, no-inline-html)


288-288: Inline HTML
Element: summary

(MD033, no-inline-html)


288-288: Inline HTML
Element: strong

(MD033, no-inline-html)


288-288: Inline HTML
Element: br

(MD033, no-inline-html)


289-289: Inline HTML
Element: br

(MD033, no-inline-html)


294-294: Inline HTML
Element: details

(MD033, no-inline-html)


295-295: Inline HTML
Element: summary

(MD033, no-inline-html)


295-295: Inline HTML
Element: code

(MD033, no-inline-html)


304-304: Inline HTML
Element: details

(MD033, no-inline-html)


305-305: Inline HTML
Element: summary

(MD033, no-inline-html)


305-305: Inline HTML
Element: code

(MD033, no-inline-html)


314-314: Inline HTML
Element: details

(MD033, no-inline-html)


315-315: Inline HTML
Element: summary

(MD033, no-inline-html)


315-315: Inline HTML
Element: code

(MD033, no-inline-html)


324-324: Inline HTML
Element: details

(MD033, no-inline-html)


325-325: Inline HTML
Element: summary

(MD033, no-inline-html)


325-325: Inline HTML
Element: code

(MD033, no-inline-html)


334-334: Inline HTML
Element: details

(MD033, no-inline-html)


335-335: Inline HTML
Element: summary

(MD033, no-inline-html)


335-335: Inline HTML
Element: code

(MD033, no-inline-html)


344-344: Inline HTML
Element: details

(MD033, no-inline-html)


345-345: Inline HTML
Element: summary

(MD033, no-inline-html)


345-345: Inline HTML
Element: code

(MD033, no-inline-html)


354-354: Inline HTML
Element: details

(MD033, no-inline-html)


355-355: Inline HTML
Element: summary

(MD033, no-inline-html)


355-355: Inline HTML
Element: code

(MD033, no-inline-html)


364-364: Inline HTML
Element: details

(MD033, no-inline-html)


365-365: Inline HTML
Element: summary

(MD033, no-inline-html)


365-365: Inline HTML
Element: code

(MD033, no-inline-html)


374-374: Inline HTML
Element: details

(MD033, no-inline-html)


375-375: Inline HTML
Element: summary

(MD033, no-inline-html)


375-375: Inline HTML
Element: code

(MD033, no-inline-html)


384-384: Inline HTML
Element: details

(MD033, no-inline-html)


385-385: Inline HTML
Element: summary

(MD033, no-inline-html)


385-385: Inline HTML
Element: code

(MD033, no-inline-html)


394-394: Inline HTML
Element: details

(MD033, no-inline-html)


395-395: Inline HTML
Element: summary

(MD033, no-inline-html)


395-395: Inline HTML
Element: code

(MD033, no-inline-html)


404-404: Inline HTML
Element: details

(MD033, no-inline-html)


405-405: Inline HTML
Element: summary

(MD033, no-inline-html)


405-405: Inline HTML
Element: code

(MD033, no-inline-html)


416-416: Inline HTML
Element: details

(MD033, no-inline-html)


416-416: Inline HTML
Element: summary

(MD033, no-inline-html)


416-416: Inline HTML
Element: strong

(MD033, no-inline-html)


416-416: Inline HTML
Element: br

(MD033, no-inline-html)


417-417: Inline HTML
Element: br

(MD033, no-inline-html)


422-422: Inline HTML
Element: details

(MD033, no-inline-html)


423-423: Inline HTML
Element: summary

(MD033, no-inline-html)


423-423: Inline HTML
Element: code

(MD033, no-inline-html)


437-437: Inline HTML
Element: details

(MD033, no-inline-html)


437-437: Inline HTML
Element: summary

(MD033, no-inline-html)


437-437: Inline HTML
Element: strong

(MD033, no-inline-html)


437-437: Inline HTML
Element: br

(MD033, no-inline-html)


438-438: Inline HTML
Element: br

(MD033, no-inline-html)


443-443: Inline HTML
Element: details

(MD033, no-inline-html)


444-444: Inline HTML
Element: summary

(MD033, no-inline-html)


444-444: Inline HTML
Element: code

(MD033, no-inline-html)


456-456: Inline HTML
Element: details

(MD033, no-inline-html)


457-457: Inline HTML
Element: summary

(MD033, no-inline-html)


457-457: Inline HTML
Element: code

(MD033, no-inline-html)


468-468: Inline HTML
Element: details

(MD033, no-inline-html)


469-469: Inline HTML
Element: summary

(MD033, no-inline-html)


469-469: Inline HTML
Element: code

(MD033, no-inline-html)


478-478: Inline HTML
Element: details

(MD033, no-inline-html)


479-479: Inline HTML
Element: summary

(MD033, no-inline-html)


479-479: Inline HTML
Element: code

(MD033, no-inline-html)


490-490: Inline HTML
Element: details

(MD033, no-inline-html)


490-490: Inline HTML
Element: summary

(MD033, no-inline-html)


490-490: Inline HTML
Element: strong

(MD033, no-inline-html)


490-490: Inline HTML
Element: br

(MD033, no-inline-html)


491-491: Inline HTML
Element: br

(MD033, no-inline-html)


496-496: Inline HTML
Element: details

(MD033, no-inline-html)


497-497: Inline HTML
Element: summary

(MD033, no-inline-html)


497-497: Inline HTML
Element: code

(MD033, no-inline-html)


506-506: Inline HTML
Element: details

(MD033, no-inline-html)


507-507: Inline HTML
Element: summary

(MD033, no-inline-html)


507-507: Inline HTML
Element: code

(MD033, no-inline-html)


516-516: Inline HTML
Element: details

(MD033, no-inline-html)


517-517: Inline HTML
Element: summary

(MD033, no-inline-html)


517-517: Inline HTML
Element: code

(MD033, no-inline-html)


526-526: Inline HTML
Element: details

(MD033, no-inline-html)


527-527: Inline HTML
Element: summary

(MD033, no-inline-html)


527-527: Inline HTML
Element: code

(MD033, no-inline-html)


536-536: Inline HTML
Element: details

(MD033, no-inline-html)


537-537: Inline HTML
Element: summary

(MD033, no-inline-html)


537-537: Inline HTML
Element: code

(MD033, no-inline-html)


546-546: Inline HTML
Element: details

(MD033, no-inline-html)


547-547: Inline HTML
Element: summary

(MD033, no-inline-html)


547-547: Inline HTML
Element: code

(MD033, no-inline-html)


556-556: Inline HTML
Element: details

(MD033, no-inline-html)


557-557: Inline HTML
Element: summary

(MD033, no-inline-html)


557-557: Inline HTML
Element: code

(MD033, no-inline-html)


566-566: Inline HTML
Element: details

(MD033, no-inline-html)


567-567: Inline HTML
Element: summary

(MD033, no-inline-html)


567-567: Inline HTML
Element: code

(MD033, no-inline-html)


576-576: Inline HTML
Element: details

(MD033, no-inline-html)


577-577: Inline HTML
Element: summary

(MD033, no-inline-html)


577-577: Inline HTML
Element: code

(MD033, no-inline-html)


586-586: Inline HTML
Element: details

(MD033, no-inline-html)


587-587: Inline HTML
Element: summary

(MD033, no-inline-html)


587-587: Inline HTML
Element: code

(MD033, no-inline-html)


596-596: Inline HTML
Element: details

(MD033, no-inline-html)


597-597: Inline HTML
Element: summary

(MD033, no-inline-html)


597-597: Inline HTML
Element: code

(MD033, no-inline-html)


606-606: Inline HTML
Element: details

(MD033, no-inline-html)


607-607: Inline HTML
Element: summary

(MD033, no-inline-html)


607-607: Inline HTML
Element: code

(MD033, no-inline-html)


616-616: Inline HTML
Element: details

(MD033, no-inline-html)


617-617: Inline HTML
Element: summary

(MD033, no-inline-html)


617-617: Inline HTML
Element: code

(MD033, no-inline-html)


626-626: Inline HTML
Element: details

(MD033, no-inline-html)


627-627: Inline HTML
Element: summary

(MD033, no-inline-html)


627-627: Inline HTML
Element: code

(MD033, no-inline-html)


636-636: Inline HTML
Element: details

(MD033, no-inline-html)


637-637: Inline HTML
Element: summary

(MD033, no-inline-html)


637-637: Inline HTML
Element: code

(MD033, no-inline-html)


646-646: Inline HTML
Element: details

(MD033, no-inline-html)


647-647: Inline HTML
Element: summary

(MD033, no-inline-html)


647-647: Inline HTML
Element: code

(MD033, no-inline-html)


658-658: Inline HTML
Element: details

(MD033, no-inline-html)


658-658: Inline HTML
Element: summary

(MD033, no-inline-html)


658-658: Inline HTML
Element: strong

(MD033, no-inline-html)


658-658: Inline HTML
Element: br

(MD033, no-inline-html)


659-659: Inline HTML
Element: br

(MD033, no-inline-html)


664-664: Inline HTML
Element: details

(MD033, no-inline-html)


665-665: Inline HTML
Element: summary

(MD033, no-inline-html)


665-665: Inline HTML
Element: code

(MD033, no-inline-html)


674-674: Inline HTML
Element: details

(MD033, no-inline-html)


675-675: Inline HTML
Element: summary

(MD033, no-inline-html)


675-675: Inline HTML
Element: code

(MD033, no-inline-html)


684-684: Inline HTML
Element: details

(MD033, no-inline-html)


685-685: Inline HTML
Element: summary

(MD033, no-inline-html)


685-685: Inline HTML
Element: code

(MD033, no-inline-html)


694-694: Inline HTML
Element: details

(MD033, no-inline-html)


695-695: Inline HTML
Element: summary

(MD033, no-inline-html)


695-695: Inline HTML
Element: code

(MD033, no-inline-html)


704-704: Inline HTML
Element: details

(MD033, no-inline-html)


705-705: Inline HTML
Element: summary

(MD033, no-inline-html)


705-705: Inline HTML
Element: code

(MD033, no-inline-html)


714-714: Inline HTML
Element: details

(MD033, no-inline-html)


715-715: Inline HTML
Element: summary

(MD033, no-inline-html)


715-715: Inline HTML
Element: code

(MD033, no-inline-html)


724-724: Inline HTML
Element: details

(MD033, no-inline-html)


725-725: Inline HTML
Element: summary

(MD033, no-inline-html)


725-725: Inline HTML
Element: code

(MD033, no-inline-html)


734-734: Inline HTML
Element: details

(MD033, no-inline-html)


735-735: Inline HTML
Element: summary

(MD033, no-inline-html)


735-735: Inline HTML
Element: code

(MD033, no-inline-html)


744-744: Inline HTML
Element: details

(MD033, no-inline-html)


745-745: Inline HTML
Element: summary

(MD033, no-inline-html)


745-745: Inline HTML
Element: code

(MD033, no-inline-html)


757-757: Inline HTML
Element: details

(MD033, no-inline-html)


758-758: Inline HTML
Element: summary

(MD033, no-inline-html)


758-758: Inline HTML
Element: code

(MD033, no-inline-html)


770-770: Inline HTML
Element: details

(MD033, no-inline-html)


771-771: Inline HTML
Element: summary

(MD033, no-inline-html)


771-771: Inline HTML
Element: code

(MD033, no-inline-html)


784-784: Inline HTML
Element: details

(MD033, no-inline-html)


785-785: Inline HTML
Element: summary

(MD033, no-inline-html)


785-785: Inline HTML
Element: code

(MD033, no-inline-html)


797-797: Inline HTML
Element: details

(MD033, no-inline-html)


798-798: Inline HTML
Element: summary

(MD033, no-inline-html)


798-798: Inline HTML
Element: code

(MD033, no-inline-html)


810-810: Inline HTML
Element: details

(MD033, no-inline-html)


811-811: Inline HTML
Element: summary

(MD033, no-inline-html)


811-811: Inline HTML
Element: code

(MD033, no-inline-html)


823-823: Inline HTML
Element: details

(MD033, no-inline-html)


824-824: Inline HTML
Element: summary

(MD033, no-inline-html)


824-824: Inline HTML
Element: code

(MD033, no-inline-html)


836-836: Inline HTML
Element: details

(MD033, no-inline-html)


837-837: Inline HTML
Element: summary

(MD033, no-inline-html)


837-837: Inline HTML
Element: code

(MD033, no-inline-html)


849-849: Inline HTML
Element: details

(MD033, no-inline-html)


850-850: Inline HTML
Element: summary

(MD033, no-inline-html)


850-850: Inline HTML
Element: code

(MD033, no-inline-html)


862-862: Inline HTML
Element: details

(MD033, no-inline-html)


863-863: Inline HTML
Element: summary

(MD033, no-inline-html)


863-863: Inline HTML
Element: code

(MD033, no-inline-html)


875-875: Inline HTML
Element: details

(MD033, no-inline-html)


876-876: Inline HTML
Element: summary

(MD033, no-inline-html)


876-876: Inline HTML
Element: code

(MD033, no-inline-html)


888-888: Inline HTML
Element: details

(MD033, no-inline-html)


889-889: Inline HTML
Element: summary

(MD033, no-inline-html)


889-889: Inline HTML
Element: code

(MD033, no-inline-html)


898-898: Inline HTML
Element: details

(MD033, no-inline-html)


899-899: Inline HTML
Element: summary

(MD033, no-inline-html)


899-899: Inline HTML
Element: code

(MD033, no-inline-html)


910-910: Inline HTML
Element: details

(MD033, no-inline-html)


910-910: Inline HTML
Element: summary

(MD033, no-inline-html)


910-910: Inline HTML
Element: strong

(MD033, no-inline-html)


910-910: Inline HTML
Element: br

(MD033, no-inline-html)


911-911: Inline HTML
Element: br

(MD033, no-inline-html)


916-916: Inline HTML
Element: details

(MD033, no-inline-html)


917-917: Inline HTML
Element: summary

(MD033, no-inline-html)


917-917: Inline HTML
Element: code

(MD033, no-inline-html)


926-926: Inline HTML
Element: details

(MD033, no-inline-html)


927-927: Inline HTML
Element: summary

(MD033, no-inline-html)


927-927: Inline HTML
Element: code

(MD033, no-inline-html)


936-936: Inline HTML
Element: details

(MD033, no-inline-html)


937-937: Inline HTML
Element: summary

(MD033, no-inline-html)


937-937: Inline HTML
Element: code

(MD033, no-inline-html)


947-947: Inline HTML
Element: details

(MD033, no-inline-html)


948-948: Inline HTML
Element: summary

(MD033, no-inline-html)


948-948: Inline HTML
Element: code

(MD033, no-inline-html)


958-958: Inline HTML
Element: details

(MD033, no-inline-html)


959-959: Inline HTML
Element: summary

(MD033, no-inline-html)


959-959: Inline HTML
Element: code

(MD033, no-inline-html)


971-971: Inline HTML
Element: details

(MD033, no-inline-html)


972-972: Inline HTML
Element: summary

(MD033, no-inline-html)


972-972: Inline HTML
Element: code

(MD033, no-inline-html)


981-981: Inline HTML
Element: details

(MD033, no-inline-html)


982-982: Inline HTML
Element: summary

(MD033, no-inline-html)


982-982: Inline HTML
Element: code

(MD033, no-inline-html)


991-991: Inline HTML
Element: details

(MD033, no-inline-html)


992-992: Inline HTML
Element: summary

(MD033, no-inline-html)


992-992: Inline HTML
Element: code

(MD033, no-inline-html)


1001-1001: Inline HTML
Element: details

(MD033, no-inline-html)


1002-1002: Inline HTML
Element: summary

(MD033, no-inline-html)


1002-1002: Inline HTML
Element: code

(MD033, no-inline-html)


1011-1011: Inline HTML
Element: details

(MD033, no-inline-html)


1012-1012: Inline HTML
Element: summary

(MD033, no-inline-html)


1012-1012: Inline HTML
Element: code

(MD033, no-inline-html)


1023-1023: Inline HTML
Element: details

(MD033, no-inline-html)


1023-1023: Inline HTML
Element: summary

(MD033, no-inline-html)


1023-1023: Inline HTML
Element: strong

(MD033, no-inline-html)


1023-1023: Inline HTML
Element: br

(MD033, no-inline-html)


1024-1024: Inline HTML
Element: br

(MD033, no-inline-html)


1029-1029: Inline HTML
Element: details

(MD033, no-inline-html)


1030-1030: Inline HTML
Element: summary

(MD033, no-inline-html)


1030-1030: Inline HTML
Element: code

(MD033, no-inline-html)


1040-1040: Inline HTML
Element: details

(MD033, no-inline-html)


1041-1041: Inline HTML
Element: summary

(MD033, no-inline-html)


1041-1041: Inline HTML
Element: code

(MD033, no-inline-html)


1051-1051: Inline HTML
Element: details

(MD033, no-inline-html)


1052-1052: Inline HTML
Element: summary

(MD033, no-inline-html)


1052-1052: Inline HTML
Element: code

(MD033, no-inline-html)


1064-1064: Inline HTML
Element: details

(MD033, no-inline-html)


1065-1065: Inline HTML
Element: summary

(MD033, no-inline-html)


1065-1065: Inline HTML
Element: code

(MD033, no-inline-html)


1074-1074: Inline HTML
Element: details

(MD033, no-inline-html)


1075-1075: Inline HTML
Element: summary

(MD033, no-inline-html)


1075-1075: Inline HTML
Element: code

(MD033, no-inline-html)


1084-1084: Inline HTML
Element: details

(MD033, no-inline-html)


1085-1085: Inline HTML
Element: summary

(MD033, no-inline-html)


1085-1085: Inline HTML
Element: code

(MD033, no-inline-html)


1097-1097: Inline HTML
Element: details

(MD033, no-inline-html)


1098-1098: Inline HTML
Element: summary

(MD033, no-inline-html)


1098-1098: Inline HTML
Element: code

(MD033, no-inline-html)


1110-1110: Inline HTML
Element: details

(MD033, no-inline-html)


1111-1111: Inline HTML
Element: summary

(MD033, no-inline-html)


1111-1111: Inline HTML
Element: code

(MD033, no-inline-html)


1125-1125: Inline HTML
Element: details

(MD033, no-inline-html)


1125-1125: Inline HTML
Element: summary

(MD033, no-inline-html)


1125-1125: Inline HTML
Element: strong

(MD033, no-inline-html)


1125-1125: Inline HTML
Element: br

(MD033, no-inline-html)


1126-1126: Inline HTML
Element: br

(MD033, no-inline-html)


1131-1131: Inline HTML
Element: details

(MD033, no-inline-html)


1132-1132: Inline HTML
Element: summary

(MD033, no-inline-html)


1132-1132: Inline HTML
Element: code

(MD033, no-inline-html)


1144-1144: Inline HTML
Element: details

(MD033, no-inline-html)


1145-1145: Inline HTML
Element: summary

(MD033, no-inline-html)


1145-1145: Inline HTML
Element: code

(MD033, no-inline-html)


1161-1161: Inline HTML
Element: details

(MD033, no-inline-html)


1162-1162: Inline HTML
Element: summary

(MD033, no-inline-html)


1162-1162: Inline HTML
Element: code

(MD033, no-inline-html)


1171-1171: Inline HTML
Element: details

(MD033, no-inline-html)


1172-1172: Inline HTML
Element: summary

(MD033, no-inline-html)


1172-1172: Inline HTML
Element: code

(MD033, no-inline-html)


1181-1181: Inline HTML
Element: details

(MD033, no-inline-html)


1182-1182: Inline HTML
Element: summary

(MD033, no-inline-html)


1182-1182: Inline HTML
Element: code

(MD033, no-inline-html)


1191-1191: Inline HTML
Element: details

(MD033, no-inline-html)


1192-1192: Inline HTML
Element: summary

(MD033, no-inline-html)


1192-1192: Inline HTML
Element: code

(MD033, no-inline-html)


1201-1201: Inline HTML
Element: details

(MD033, no-inline-html)


1202-1202: Inline HTML
Element: summary

(MD033, no-inline-html)


1202-1202: Inline HTML
Element: code

(MD033, no-inline-html)


1211-1211: Inline HTML
Element: details

(MD033, no-inline-html)


1212-1212: Inline HTML
Element: summary

(MD033, no-inline-html)


1212-1212: Inline HTML
Element: code

(MD033, no-inline-html)


1223-1223: Inline HTML
Element: details

(MD033, no-inline-html)


1223-1223: Inline HTML
Element: summary

(MD033, no-inline-html)


1223-1223: Inline HTML
Element: strong

(MD033, no-inline-html)


1223-1223: Inline HTML
Element: br

(MD033, no-inline-html)


1228-1228: Inline HTML
Element: details

(MD033, no-inline-html)


1229-1229: Inline HTML
Element: summary

(MD033, no-inline-html)


1229-1229: Inline HTML
Element: code

(MD033, no-inline-html)


1239-1239: Inline HTML
Element: details

(MD033, no-inline-html)


1240-1240: Inline HTML
Element: summary

(MD033, no-inline-html)


1240-1240: Inline HTML
Element: code

(MD033, no-inline-html)


1250-1250: Inline HTML
Element: details

(MD033, no-inline-html)


1251-1251: Inline HTML
Element: summary

(MD033, no-inline-html)


1251-1251: Inline HTML
Element: code

(MD033, no-inline-html)


1260-1260: Inline HTML
Element: details

(MD033, no-inline-html)


1261-1261: Inline HTML
Element: summary

(MD033, no-inline-html)


1261-1261: Inline HTML
Element: code

(MD033, no-inline-html)


1272-1272: Inline HTML
Element: details

(MD033, no-inline-html)


1272-1272: Inline HTML
Element: summary

(MD033, no-inline-html)


1272-1272: Inline HTML
Element: strong

(MD033, no-inline-html)


1272-1272: Inline HTML
Element: br

(MD033, no-inline-html)


1273-1273: Inline HTML
Element: br

(MD033, no-inline-html)


1278-1278: Inline HTML
Element: details

(MD033, no-inline-html)


1279-1279: Inline HTML
Element: summary

(MD033, no-inline-html)


1279-1279: Inline HTML
Element: code

(MD033, no-inline-html)


1288-1288: Inline HTML
Element: details

(MD033, no-inline-html)


1289-1289: Inline HTML
Element: summary

(MD033, no-inline-html)


1289-1289: Inline HTML
Element: code

(MD033, no-inline-html)


1299-1299: Inline HTML
Element: details

(MD033, no-inline-html)


1300-1300: Inline HTML
Element: summary

(MD033, no-inline-html)


1300-1300: Inline HTML
Element: code

(MD033, no-inline-html)


1310-1310: Inline HTML
Element: details

(MD033, no-inline-html)


1311-1311: Inline HTML
Element: summary

(MD033, no-inline-html)


1311-1311: Inline HTML
Element: code

(MD033, no-inline-html)


1321-1321: Inline HTML
Element: details

(MD033, no-inline-html)


1322-1322: Inline HTML
Element: summary

(MD033, no-inline-html)


1322-1322: Inline HTML
Element: code

(MD033, no-inline-html)


1332-1332: Inline HTML
Element: details

(MD033, no-inline-html)


1333-1333: Inline HTML
Element: summary

(MD033, no-inline-html)


1333-1333: Inline HTML
Element: code

(MD033, no-inline-html)


1342-1342: Inline HTML
Element: details

(MD033, no-inline-html)


1343-1343: Inline HTML
Element: summary

(MD033, no-inline-html)


1343-1343: Inline HTML
Element: code

(MD033, no-inline-html)


1352-1352: Inline HTML
Element: details

(MD033, no-inline-html)


1353-1353: Inline HTML
Element: summary

(MD033, no-inline-html)


1353-1353: Inline HTML
Element: code

(MD033, no-inline-html)


1362-1362: Inline HTML
Element: details

(MD033, no-inline-html)


1363-1363: Inline HTML
Element: summary

(MD033, no-inline-html)


1363-1363: Inline HTML
Element: code

(MD033, no-inline-html)


1374-1374: Inline HTML
Element: details

(MD033, no-inline-html)


1374-1374: Inline HTML
Element: summary

(MD033, no-inline-html)


1374-1374: Inline HTML
Element: strong

(MD033, no-inline-html)


1374-1374: Inline HTML
Element: br

(MD033, no-inline-html)


1379-1379: Inline HTML
Element: details

(MD033, no-inline-html)


1380-1380: Inline HTML
Element: summary

(MD033, no-inline-html)


1380-1380: Inline HTML
Element: code

(MD033, no-inline-html)


1389-1389: Inline HTML
Element: details

(MD033, no-inline-html)


1390-1390: Inline HTML
Element: summary

(MD033, no-inline-html)


1390-1390: Inline HTML
Element: code

(MD033, no-inline-html)


1402-1402: Inline HTML
Element: details

(MD033, no-inline-html)


1403-1403: Inline HTML
Element: summary

(MD033, no-inline-html)


1403-1403: Inline HTML
Element: code

(MD033, no-inline-html)


1415-1415: Inline HTML
Element: details

(MD033, no-inline-html)


1416-1416: Inline HTML
Element: summary

(MD033, no-inline-html)


1416-1416: Inline HTML
Element: code

(MD033, no-inline-html)


1427-1427: Inline HTML
Element: details

(MD033, no-inline-html)


1427-1427: Inline HTML
Element: summary

(MD033, no-inline-html)


1427-1427: Inline HTML
Element: strong

(MD033, no-inline-html)


1427-1427: Inline HTML
Element: br

(MD033, no-inline-html)


1428-1428: Inline HTML
Element: br

(MD033, no-inline-html)


1433-1433: Inline HTML
Element: details

(MD033, no-inline-html)


1434-1434: Inline HTML
Element: summary

(MD033, no-inline-html)


1434-1434: Inline HTML
Element: code

(MD033, no-inline-html)


1443-1443: Inline HTML
Element: details

(MD033, no-inline-html)


1444-1444: Inline HTML
Element: summary

(MD033, no-inline-html)


1444-1444: Inline HTML
Element: code

(MD033, no-inline-html)


1456-1456: Inline HTML
Element: details

(MD033, no-inline-html)


1457-1457: Inline HTML
Element: summary

(MD033, no-inline-html)


1457-1457: Inline HTML
Element: code

(MD033, no-inline-html)


1468-1468: Inline HTML
Element: details

(MD033, no-inline-html)


1469-1469: Inline HTML
Element: summary

(MD033, no-inline-html)


1469-1469: Inline HTML
Element: code

(MD033, no-inline-html)


1483-1483: Inline HTML
Element: details

(MD033, no-inline-html)


1483-1483: Inline HTML
Element: summary

(MD033, no-inline-html)


1483-1483: Inline HTML
Element: strong

(MD033, no-inline-html)


1483-1483: Inline HTML
Element: br

(MD033, no-inline-html)


1484-1484: Inline HTML
Element: br

(MD033, no-inline-html)


1489-1489: Inline HTML
Element: details

(MD033, no-inline-html)


1490-1490: Inline HTML
Element: summary

(MD033, no-inline-html)


1490-1490: Inline HTML
Element: code

(MD033, no-inline-html)


1505-1505: Inline HTML
Element: details

(MD033, no-inline-html)


1505-1505: Inline HTML
Element: summary

(MD033, no-inline-html)


1505-1505: Inline HTML
Element: strong

(MD033, no-inline-html)


1505-1505: Inline HTML
Element: br

(MD033, no-inline-html)


1506-1506: Inline HTML
Element: br

(MD033, no-inline-html)


1511-1511: Inline HTML
Element: details

(MD033, no-inline-html)


1512-1512: Inline HTML
Element: summary

(MD033, no-inline-html)


1512-1512: Inline HTML
Element: code

(MD033, no-inline-html)


1521-1521: Inline HTML
Element: details

(MD033, no-inline-html)


1522-1522: Inline HTML
Element: summary

(MD033, no-inline-html)


1522-1522: Inline HTML
Element: code

(MD033, no-inline-html)


1532-1532: Inline HTML
Element: details

(MD033, no-inline-html)


1533-1533: Inline HTML
Element: summary

(MD033, no-inline-html)


1533-1533: Inline HTML
Element: code

(MD033, no-inline-html)


1545-1545: Inline HTML
Element: details

(MD033, no-inline-html)


1545-1545: Inline HTML
Element: summary

(MD033, no-inline-html)


1545-1545: Inline HTML
Element: strong

(MD033, no-inline-html)


1545-1545: Inline HTML
Element: br

(MD033, no-inline-html)


1546-1546: Inline HTML
Element: br

(MD033, no-inline-html)


1551-1551: Inline HTML
Element: details

(MD033, no-inline-html)


1552-1552: Inline HTML
Element: summary

(MD033, no-inline-html)


1552-1552: Inline HTML
Element: code

(MD033, no-inline-html)


1561-1561: Inline HTML
Element: details

(MD033, no-inline-html)


1562-1562: Inline HTML
Element: summary

(MD033, no-inline-html)


1562-1562: Inline HTML
Element: code

(MD033, no-inline-html)


1571-1571: Inline HTML
Element: details

(MD033, no-inline-html)


1572-1572: Inline HTML
Element: summary

(MD033, no-inline-html)


1572-1572: Inline HTML
Element: code

(MD033, no-inline-html)


1581-1581: Inline HTML
Element: details

(MD033, no-inline-html)


1582-1582: Inline HTML
Element: summary

(MD033, no-inline-html)


1582-1582: Inline HTML
Element: code

(MD033, no-inline-html)


1593-1593: Inline HTML
Element: details

(MD033, no-inline-html)


1593-1593: Inline HTML
Element: summary

(MD033, no-inline-html)


1593-1593: Inline HTML
Element: strong

(MD033, no-inline-html)


1593-1593: Inline HTML
Element: br

(MD033, no-inline-html)


1594-1594: Inline HTML
Element: br

(MD033, no-inline-html)


1599-1599: Inline HTML
Element: details

(MD033, no-inline-html)


1600-1600: Inline HTML
Element: summary

(MD033, no-inline-html)


1600-1600: Inline HTML
Element: code

(MD033, no-inline-html)


1609-1609: Inline HTML
Element: details

(MD033, no-inline-html)


1610-1610: Inline HTML
Element: summary

(MD033, no-inline-html)


1610-1610: Inline HTML
Element: code

(MD033, no-inline-html)


1622-1622: Inline HTML
Element: details

(MD033, no-inline-html)


1622-1622: Inline HTML
Element: summary

(MD033, no-inline-html)


1622-1622: Inline HTML
Element: strong

(MD033, no-inline-html)


1622-1622: Inline HTML
Element: br

(MD033, no-inline-html)


1623-1623: Inline HTML
Element: br

(MD033, no-inline-html)


1628-1628: Inline HTML
Element: details

(MD033, no-inline-html)


1629-1629: Inline HTML
Element: summary

(MD033, no-inline-html)


1629-1629: Inline HTML
Element: code

(MD033, no-inline-html)


1640-1640: Inline HTML
Element: details

(MD033, no-inline-html)


1641-1641: Inline HTML
Element: summary

(MD033, no-inline-html)


1641-1641: Inline HTML
Element: code

(MD033, no-inline-html)


1650-1650: Inline HTML
Element: details

(MD033, no-inline-html)


1651-1651: Inline HTML
Element: summary

(MD033, no-inline-html)


1651-1651: Inline HTML
Element: code

(MD033, no-inline-html)


1660-1660: Inline HTML
Element: details

(MD033, no-inline-html)


1661-1661: Inline HTML
8000 Element: summary

(MD033, no-inline-html)


1661-1661: Inline HTML
Element: code

(MD033, no-inline-html)


1670-1670: Inline HTML
Element: details

(MD033, no-inline-html)


1671-1671: Inline HTML
Element: summary

(MD033, no-inline-html)


1671-1671: Inline HTML
Element: code

(MD033, no-inline-html)


1680-1680: Inline HTML
Element: details

(MD033, no-inline-html)


1681-1681: Inline HTML
Element: summary

(MD033, no-inline-html)


1681-1681: Inline HTML
Element: code

(MD033, no-inline-html)


1690-1690: Inline HTML
Element: details

(MD033, no-inline-html)


1691-1691: Inline HTML
Element: summary

(MD033, no-inline-html)


1691-1691: Inline HTML
Element: code

(MD033, no-inline-html)


1702-1702: Inline HTML
Element: details

(MD033, no-inline-html)


1702-1702: Inline HTML
Element: summary

(MD033, no-inline-html)


1702-1702: Inline HTML
Element: strong

(MD033, no-inline-html)


1702-1702: Inline HTML
Element: br

(MD033, no-inline-html)


1703-1703: Inline HTML
Element: br

(MD033, no-inline-html)


1708-1708: Inline HTML
Element: details

(MD033, no-inline-html)


1709-1709: Inline HTML
Element: summary

(MD033, no-inline-html)


1709-1709: Inline HTML
Element: code

(MD033, no-inline-html)


1725-1725: Inline HTML
Element: details

(MD033, no-inline-html)


1726-1726: Inline HTML
Element: summary

(MD033, no-inline-html)


1726-1726: Inline HTML
Element: code

(MD033, no-inline-html)


1735-1735: Inline HTML
Element: details

(MD033, no-inline-html)


1736-1736: Inline HTML
Element: summary

(MD033, no-inline-html)


1736-1736: Inline HTML
Element: code

(MD033, no-inline-html)


1746-1746: Inline HTML
Element: details

(MD033, no-inline-html)


1747-1747: Inline HTML
Element: summary

(MD033, no-inline-html)


1747-1747: Inline HTML
Element: code

(MD033, no-inline-html)


1757-1757: Inline HTML
Element: details

(MD033, no-inline-html)


1758-1758: Inline HTML
Element: summary

(MD033, no-inline-html)


1758-1758: Inline HTML
Element: code

(MD033, no-inline-html)


1767-1767: Inline HTML
Element: details

(MD033, no-inline-html)


1768-1768: Inline HTML
Element: summary

(MD033, no-inline-html)


1768-1768: Inline HTML
Element: code

(MD033, no-inline-html)


1780-1780: Inline HTML
Element: details

(MD033, no-inline-html)


1781-1781: Inline HTML
Element: summary

(MD033, no-inline-html)


1781-1781: Inline HTML
Element: code

(MD033, no-inline-html)


1790-1790: Inline HTML
Element: details

(MD033, no-inline-html)


1791-1791: Inline HTML
Element: summary

(MD033, no-inline-html)


1791-1791: Inline HTML
Element: code

(MD033, no-inline-html)


1800-1800: Inline HTML
Element: details

(MD033, no-inline-html)


1801-1801: Inline HTML
Element: summary

(MD033, no-inline-html)


1801-1801: Inline HTML
Element: code

(MD033, no-inline-html)


1810-1810: Inline HTML
Element: details

(MD033, no-inline-html)


1811-1811: Inline HTML
Element: summary

(MD033, no-inline-html)


1811-1811: Inline HTML
Element: code

(MD033, no-inline-html)


1820-1820: Inline HTML
Element: details

(MD033, no-inline-html)


1821-1821: Inline HTML
Element: summary

(MD033, no-inline-html)


1821-1821: Inline HTML
Element: code

(MD033, no-inline-html)


1830-1830: Inline HTML
Element: details

(MD033, no-inline-html)


1831-1831: Inline HTML
Element: summary

(MD033, no-inline-html)


1831-1831: Inline HTML
Element: code

(MD033, no-inline-html)


1840-1840: Inline HTML
Element: details

(MD033, no-inline-html)


1841-1841: Inline HTML
Element: summary

(MD033, no-inline-html)


1841-1841: Inline HTML
Element: code

(MD033, no-inline-html)


1850-1850: Inline HTML
Element: details

(MD033, no-inline-html)


1851-1851: Inline HTML
Element: summary

(MD033, no-inline-html)


1851-1851: Inline HTML
Element: code

(MD033, no-inline-html)


1860-1860: Inline HTML
Element: details

(MD033, no-inline-html)


1861-1861: Inline HTML
Element: summary

(MD033, no-inline-html)


1861-1861: Inline HTML
Element: code

(MD033, no-inline-html)


1870-1870: Inline HTML
Element: details

(MD033, no-inline-html)


1871-1871: Inline HTML
Element: summary

(MD033, no-inline-html)


1871-1871: Inline HTML
Element: code

(MD033, no-inline-html)


1882-1882: Inline HTML
Element: details

(MD033, no-inline-html)


1882-1882: Inline HTML
Element: summary

(MD033, no-inline-html)


1882-1882: Inline HTML
Element: strong

(MD033, no-inline-html)


1882-1882: Inline HTML
Element: br

(MD033, no-inline-html)


1883-1883: Inline HTML
Element: br

(MD033, no-inline-html)


1888-1888: Inline HTML
Element: details

(MD033, no-inline-html)


1889-1889: Inline HTML
Element: summary

(MD033, no-inline-html)


1889-1889: Inline HTML
Element: code

(MD033, no-inline-html)


1899-1899: Inline HTML
Element: details

(MD033, no-inline-html)


1900-1900: Inline HTML
Element: summary

(MD033, no-inline-html)


1900-1900: Inline HTML
Element: code

(MD033, no-inline-html)


1910-1910: Multiple consecutive blank lines
Expected: 1; Actual: 2

(MD012, no-multiple-blanks)


1911-1911: Multiple consecutive blank lines
Expected: 1; Actual: 3

(MD012, no-multiple-blanks)

Copy link
codecov bot commented May 4, 2025

Codecov Report

Attention: Patch coverage is 25.00000% with 15 lines in your changes missing coverage. Please review.

Project coverage is 79.70%. Comparing base (de533e7) to head (5485adf).
Report is 1 commits behind head on 3.x.

Files with missing lines Patch % Lines
docs.php 25.00% 15 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##              3.x     #389      +/-   ##
==========================================
- Coverage   80.13%   79.70%   -0.44%     
==========================================
  Files          29       29              
  Lines        1888     1902      +14     
==========================================
+ Hits         1513     1516       +3     
- Misses        375      386      +11     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@AlexSkrypnyk AlexSkrypnyk force-pushed the feature/add-info-docs branch from 7ab7e9d to 5485adf Compare May 4, 2025 13:22
Copy link
@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🔭 Outside diff range comments (2)
docs.php (1)

366-370: 🧹 Nitpick (assertive)

Minor: index_rows is populated inside the inner loop

Because the assignment is performed for every method, the same row is rebuilt
multiple times. It works because the value is identical each time, but moving
the assignment into the if (empty($index_rows[$class_name])) guard above
avoids needless overwrites and makes intent clearer.

tests/phpunit/src/DocsTest.php (1)

443-460: 🧹 Nitpick (assertive)

Avoid duplicating class_description_full in every method fixture

The full description is class-level metadata; duplicating it for every single
method bloats the fixtures and risks inconsistencies if one value is edited
and the other forgotten.

Consider computing it inside the test (or the production code) based on the
first element of each trait array:

foreach ($info as $trait => &$methods) {
    $full = $methods[0]['class_description'];
    foreach ($methods as &$m) {
        $m['class_description_full'] = $full;
    }
}

or mock it only once per trait in the provider.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Lite

📥 Commits

Reviewing files that changed from the base of the PR and between 7ab7e9d and 5485adf.

📒 Files selected for processing (3)
  • docs.php (4 hunks)
  • steps.md (159 hunks)
  • tests/phpunit/src/DocsTest.php (16 hunks)

Comment on lines +359 to +365
// Section header.
if (empty($index_rows[$class_name])) {
$output .= sprintf('## %s', $trait) . PHP_EOL . PHP_EOL;
$output .= sprintf('<details><summary><strong>ℹ About this trait</strong></summary>%s</details>', nl2br($class_description_full)) . PHP_EOL . PHP_EOL;
$output .= sprintf('[Source](%s), [Example](%s)', $src_file, $example_file) . PHP_EOL . PHP_EOL;
}

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Escape HTML before injecting into <details> block to prevent XSS

nl2br() is applied to un-escaped doc-block content. Although comments come
from the codebase, a malicious contributor could inject raw HTML/JS that would
be executed in GitHub / local viewers.

-        $output .= sprintf('<details><summary><strong>ℹ About this trait</strong></summary>%s</details>', nl2br($class_description_full)) . PHP_EOL . PHP_EOL;
+        $safe_desc = nl2br(htmlspecialchars($class_description_full, ENT_QUOTES | ENT_SUBSTITUTE));
+        $output   .= sprintf('<details><summary><strong>ℹ About this trait</strong></summary>%s</details>', $safe_desc) . PHP_EOL . PHP_EOL;

Escaping once here keeps documentation readable while eliminating the attack
surface.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
// Section header.
if (empty($index_rows[$class_name])) {
$output .= sprintf('## %s', $trait) . PHP_EOL . PHP_EOL;
$output .= sprintf('<details><summary><strong>ℹ About this trait</strong></summary>%s</details>', nl2br($class_description_full)) . PHP_EOL . PHP_EOL;
$output .= sprintf('[Source](%s), [Example](%s)', $src_file, $example_file) . PHP_EOL . PHP_EOL;
}
// Section header.
if (empty($index_rows[$class_name])) {
$output .= sprintf('## %s', $trait) . PHP_EOL . PHP_EOL;
$safe_desc = nl2br(htmlspecialchars($class_description_full, ENT_QUOTES | ENT_SUBSTITUTE));
$output .= sprintf('<details><summary><strong>ℹ About this trait</strong></summary>%s</details>', $safe_desc) . PHP_EOL . PHP_EOL;
$output .= sprintf('[Source](%s), [Example](%s)', $src_file, $example_file) . PHP_EOL . PHP_EOL;
}

Comment on lines +129 to 138
array_map(static fn($l): string => ltrim($l, " *\t"), explode(PHP_EOL, (string) $clean))
);
// Remove first and last empty lines.
if (count($lines) > 1 && empty($lines[0])) {
array_shift($lines);
}
if (count($lines) > 1 && empty($lines[count($lines) - 1])) {
array_pop($lines);
}
if (empty($lines)) {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Strip empty lines more robustly & avoid side-effects

Manually shifting / popping only the very first and very last empty element will miss cases where a line contains only spaces / tabs. It also mutates the $lines array twice.
Consider filtering once and keep indices intact:

-// Remove first and last empty lines.
-if (count($lines) > 1 && empty($lines[0])) {
-  array_shift($lines);
-}
-if (count($lines) > 1 && empty($lines[count($lines) - 1])) {
-  array_pop($lines);
-}
+// Trim whitespace-only lines at the boundaries.
+while (!empty($lines) && trim((string) $lines[0]) === '') {
+  array_shift($lines);
+}
+while (!empty($lines) && trim((string) $lines[array_key_last($lines)]) === '') {
+  array_pop($lines);
+}

This removes both blank and “whitespace-only” lines without multiple passes.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
array_map(static fn($l): string => ltrim($l, " *\t"), explode(PHP_EOL, (string) $clean))
);
// Remove first and last empty lines.
if (count($lines) > 1 && empty($lines[0])) {
array_shift($lines);
}
if (count($lines) > 1 && empty($lines[count($lines) - 1])) {
array_pop($lines);
}
if (empty($lines)) {
array_map(static fn($l): string => ltrim($l, " *\t"), explode(PHP_EOL, (string) $clean))
);
// Trim whitespace-only lines at the boundaries.
while (!empty($lines) && trim((string) $lines[0]) === '') {
array_shift($lines);
}
while (!empty($lines) && trim((string) $lines[array_key_last($lines)]) === '') {
array_pop($lines);
}
if (empty($lines)) {

Comment on lines +152 to +165
$class_description_full = '';
foreach ($lines as $line) {
if (empty(trim($line))) {
$class_description_full .= PHP_EOL;
}
else {
// Only add space if we already have content.
if (!empty($class_description_full)) {
$class_description_full .= ' ';
}
$class_description_full .= trim($line);
}
}

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛠️ Refactor suggestion

Whitespace handling leaves a leading space after every paragraph break

$class_description_full is built by blindly prefixing a space whenever the
temporary string is not empty. If the previous iteration inserted a line
break (PHP_EOL) you end up with:

Line 1\n␣Line 2

(note the stray space at the beginning of “Line 2”). Rendering with
nl2br() produces "<br> Line 2" which is visible in HTML.

A cleaner build avoids that artefact and is simpler to read:

-$class_description_full = '';
-foreach ($lines as $line) {
-  if (empty(trim($line))) {
-    $class_description_full .= PHP_EOL;
-  }
-  else {
-    // Only add space if we already have content.
-    if (!empty($class_description_full)) {
-      $class_description_full .= ' ';
-    }
-    $class_description_full .= trim($line);
-  }
-}
+$paragraphs = [];
+$buffer     = [];
+foreach ($lines as $line) {
+  if (trim($line) === '') {
+    if ($buffer) {
+      $paragraphs[] = implode(' ', $buffer);
+      $buffer = [];
+    }
+    continue;
+  }
+  $buffer[] = trim($line);
+}
+if ($buffer) {
+  $paragraphs[] = implode(' ', $buffer);
+}
+$class_description_full = implode(PHP_EOL, $paragraphs);

This preserves paragraph separation, removes the leading-space glitch and
avoids repeated trim() calls.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
$class_description_full = '';
foreach ($lines as $line) {
if (empty(trim($line))) {
$class_description_full .= PHP_EOL;
}
else {
// Only add space if we already have content.
if (!empty($class_description_full)) {
$class_description_full .= ' ';
}
$class_description_full .= trim($line);
}
}
$paragraphs = [];
$buffer = [];
foreach ($lines as $line) {
if (trim($line) === '') {
if ($buffer) {
$paragraphs[] = implode(' ', $buffer);
$buffer = [];
}
continue;
}
$buffer[] = trim($line);
}
if ($buffer) {
$paragraphs[] = implode(' ', $buffer);
}
$class_description_full = implode(PHP_EOL, $paragraphs);

Comment on lines +29 to +31
<details><summary><strong>ℹ About this trait</strong></summary>Create, configure, and test block.<br />
This trait enables programmatic management of blocks in the Drupal system, including configuration, placement in regions, visibility settings, and assertions about block state.</details>

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick (assertive)

Consistent <details> sections for trait info
The new collapsible info blocks for each trait are integrated uniformly and convey the "About this trait" descriptions clearly, matching the updated generator logic and tests. They improve documentation discoverability without altering existing step definitions.

Optionally, for enhanced readability and maintainability, you may consider formatting these blocks as multiline HTML with semantic <p> tags and indentation:

-<details><summary><strong>ℹ About this trait</strong></summary>Create, configure, and test block.<br />
- This trait enables programmatic management of blocks ...</details>
+<details>
+  <summary><strong>ℹ About this trait</strong></summary>
+  <p>Create, configure, and test block.</p>
+  <p>This trait enables programmatic management of blocks ...</p>
+</details>

Also applies to: 155-157, 207-209, 289-291, 416-418, 437-439, 490-492, 658-660, 910-912, 1023-1025, 1125-1127, 1223-1224, 1272-1274, 1374-1375, 1427-1429, 1483-1485, 1505-1507, 1545-1547, 1593-1595, 1622-1624, 1702-1704, 1882-1884

@AlexSkrypnyk AlexSkrypnyk merged commit eefd75b into 3.x May 4, 2025
4 of 5 checks passed
@AlexSkrypnyk AlexSkrypnyk deleted the feature/a 7693 dd-info-docs branch May 4, 2025 13:29
This was referenced May 5, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant
0