Skip to content

Plugin Directory: Tidy up Block Plugin Checker output and add tests - #2

Closed
obenland wants to merge 1 commit into
trunkfrom
update/block-plugin-checker-output
Closed

obenland wants to merge 1 commit into
trunkfrom
update/block-plugin-checker-output

Conversation

@obenland

Copy link
Copy Markdown
Owner

A cleanup pass over the Block Plugin Checker (the /developers/block-plugin-validator/ tool), plus test coverage.

Changes

  • Consistent output escaping. The checker builds result messages from values read out of the submitted plugin — the readme/header License, block names, namespaces, and file paths. Escape each of those where it's interpolated (esc_html() for text, esc_url() for the Trac/GitHub links), and add a small wp_kses() backstop in Block_Validator so only the markup the checks intentionally emit (<code>, <a>, …) survives rendering.
  • Readme parser consistency. The parser already runs sanitize_text() over name, short_description, and friends; apply it to the License header too (after the URL is split out, so the <https://…> autolink form still works).
  • get_browser_url() now returns an empty string instead of null when there's no repo (e.g. a ZIP upload), avoiding a PHP 8 deprecation from esc_url( null ).
  • Undefined-array-key guard in the results loop, which surfaced when a block.json issue is present with no other fatal errors.
  • Readme validator: one ignored_tags message now escapes its data like its sibling cases.
  • Local env: the plugin-directory after-start.sh page seeding is now idempotent (it was creating a fresh duplicate page set on every wp-env start).

Tests

Adds Block_Plugin_Checker_Test covering the individual checks (license, block tag, block name/namespace, block.json validity, PHP calls, single-parent) and message rendering, and extends Test_Readme_Parser for the license header. Full plugin-directory suite: 149 passing. New/changed files are clean under --standard=WordPress.

🤖 Generated with Claude Code

Escape checker result values (readme/header license, block names,
file paths) consistently at the point they are built into messages,
and add a kses backstop when the block validator renders them. Apply
the readme parser's existing sanitize_text() to the License header so
it matches the other headers.

Also make get_browser_url() return a string when there is no repo,
guard an undefined array key in the results loop, tidy an inconsistent
esc_html() call in the readme validator, and make the local page seed
idempotent.

Adds Block_Plugin_Checker_Test covering the individual checks and
message rendering.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UNnLdnE7etihGNvsWY1qGE
Copilot AI review requested due to automatic review settings July 21, 2026 15:39

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@github-actions

Copy link
Copy Markdown

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

Core Committers: Use this line as a base for the props when committing in SVN:

Props obenland.

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

@obenland

Copy link
Copy Markdown
Owner Author

Retargeting to upstream.

@obenland obenland closed this Jul 21, 2026
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.

2 participants