-
-
Notifications
You must be signed in to change notification settings - Fork 14
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
Conversation
""" WalkthroughThe 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 Changes
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
Poem
🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed 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)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this 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
📒 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()
andis_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)
Codecov ReportAttention: Patch coverage is
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. 🚀 New features to boost your workflow:
|
7ab7e9d
to
5485adf
Compare
There was a problem hiding this 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 loopBecause 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 theif (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 fixtureThe 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
📒 Files selected for processing (3)
docs.php
(4 hunks)steps.md
(159 hunks)tests/phpunit/src/DocsTest.php
(16 hunks)
// 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; | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
// 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; | |
} |
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)) { |
There was a problem hiding this comment.
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.
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)) { |
$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); | ||
} | ||
} | ||
|
There was a problem hiding this comment.
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.
$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); |
<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> | ||
|
There was a problem hiding this comment.
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
Summary by CodeRabbit