This repository was archived by the owner on Feb 5, 2026. It is now read-only.

Refactor the usage of $properties param to $args to align with WordPress usage - #59

Merged
gziolo merged 7 commits into
trunkfrom
update/properties-to-args-refactoring
Sep 9, 2025
Merged

Refactor the usage of $properties param to $args to align with WordPress usage#59
gziolo merged 7 commits into
trunkfrom
update/properties-to-args-refactoring

Conversation

@gziolo

@gziologziolo commented Sep 5, 2025

Copy link
Copy Markdown
Member

Follow up for:

More details in this #54 (comment). The most relevant part from @justlevine:

My takeaway from this conversation is that we're good not caring about that last point (between overloading and the filter if someone really, realy thinks shimming a DTO or VO into this api is a good idea, they have ways), so if y'all don't think it's outweighed by the first two (I don't), I'll use prepare_*( array<string,mixed> ): array<valid-shape> and just throw.

This PR refactors the usage of $properties to $args to reflect the conversation. As part of the refactoring, the definition for ability registration was also updated to remove the optionality of $args because to work correctly, there needs to be at least ability_class passed, or more frequently, three fields: label, description, and execute_callback.

Entire codebase was slightly refactored to follow the convention agreed upon.

@gziolo

Copy link
Copy Markdown
MemberAuthor

@justlevine, I cherry-picked your branch and continued refactoring. I'm inclined to go with prepare_properties( array $args ) because the result of that method is used to set class properties. However, it's a minor thing that I wanted to further discuss. Otherwise, I tried to go with args in all other places instead of properties, including unit tests.

@codecov

codecovBot commented Sep 5, 2025

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 50.00000% with 20 lines in your changes missing coverage. Please review.
✅ Project coverage is 84.22%. Comparing base (21af812) to head (79269ed).
⚠️ Report is 1 commits behind head on trunk.

Files with missing linesPatch %Lines
includes/abilities-api/class-wp-ability.php43.75%18 Missing ⚠️
...udes/abilities-api/class-wp-abilities-registry.php83.33%1 Missing ⚠️
includes/bootstrap.php0.00%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## trunk WordPress/abilities-api#59 +/- ##
============================================
- Coverage 84.28% 84.22% -0.07% 
Complexity 96 96 ============================================
Files 8 8 Lines 509 507 -2 ============================================
- Hits 429 427 -2 
Misses 80 80 
FlagCoverage Δ
unit84.22% <50.00%> (-0.07%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ 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.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@gziologziolo added [Status] In Progress Assigned work scheduled [Type] Enhancement New feature or request labels Sep 5, 2025
@justlevine

Copy link
Copy Markdown
Contributor

I'm inclined to go with prepare_properties( array $args ) because the result of that method is used to set class properties.

Semantically, I'm good either way (do you "prepare the args" to be used as class properties or do you "prepare properties" so they can be used?)

Only reason I went with prepare_args() is because I'm assuming we'd want the eventual filter to use args ( e.g. return return apply_filters( 'ability_args', $args, $this->name ), or even ability_prepare_args, or whatever naming semantics ), to keep the developer DX and terminology intuitive.

But filters don't need to match the semantics for direct class overloading, and they also have a much easier core deprecation path if we want to change the name compared to a protected function *, so 🤷

Comment threadincludes/abilities-api/class-wp-abilities-registry.php
Comment threadtests/unit/abilities-api/wpRegisterAbility.php Outdated
@gziologziolo removed the [Status] In Progress Assigned work scheduled label Sep 5, 2025
@gziolo
gziolo marked this pull request as ready for review September 5, 2025 12:12
@github-actions

github-actionsBot commented Sep 5, 2025

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.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: justlevine <justlevine@git.wordpress.org>
Co-authored-by: gziolo <gziolo@git.wordpress.org>
Co-authored-by: emdashcodes <emdashcodes@git.wordpress.org>

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

@gziologziolo changed the title Update/properties to args refactoringRefactor the usage of $properties param to $arg to align with WordPress usageSep 5, 2025
@gziologziolo changed the title Refactor the usage of $properties param to $arg to align with WordPress usageRefactor the usage of $properties param to $args to align with WordPress usageSep 5, 2025
@gziolo

Copy link
Copy Markdown
MemberAuthor

Only reason I went with prepare_args() is because I'm assuming we'd want the eventual filter to use args ( e.g. return return apply_filters( 'ability_args', $args, $this->name ), or even ability_prepare_args, or whatever naming semantics ), to WordPress/ai#40.

Right, both names are fine here in that context. The filter name doesn't need to follow the method name, so we can be flexible.

@gziolo

Copy link
Copy Markdown
MemberAuthor

I verified the changes in the WP core env (WordPress/wordpress-develop#9410), and applied some small tweaks to ensure CI is green there, too.

I also set the version for the plugin and Composer package to v0.2.0 to account for the fact that we slightly modified the public API params – $args are no longer optional, which better reflects the real usage.

@gziolo
gziolo enabled auto-merge (squash) September 8, 2025 12:18
@gziolo
gziolo disabled auto-merge September 8, 2025 12:32
@gziolo

Copy link
Copy Markdown
MemberAuthor

@justlevine or @emdashcodes. It looks like I can no longer merge without approval from someone else. I would appreciate a final check from one of you.

@emdashcodesemdashcodes left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Just had a chance to look. 👍

@gziolo
gziolo merged commit 118c476 into trunkSep 9, 2025
28 of 34 checks passed
@gziolo
gziolo deleted the update/properties-to-args-refactoring branch September 9, 2025 05:29
@justlevine

Copy link
Copy Markdown
Contributor

I also set the version for the plugin and Composer package to v0.2.0

In the future, would we be able to use @since n.e.x.t. and save pre-release versioning for a separate PR / release step?

  1. It prevents us from missing other things that need to be versioned (e.g. the constant, a docs ref too iirc)
  2. It prevents trunk from lying to us or our LLMs. There's no v0.2.0 until we cut it.

@gziolo

Copy link
Copy Markdown
MemberAuthor

In the future, would we be able to use @SInCE n.e.x.t. and save pre-release versioning for a separate PR / release step?

Is it something that could be automated with a GitHub action triggered when a new release is created through GitHub UI?

@justlevine

Copy link
Copy Markdown
Contributor

Yes it is, though if there isn't already FOSSable prior art somewhere, it might not make sense to waste time on a solution for this repo alone over the next six weeks.

@gziologziolo added this to the v0.2.0 milestone Sep 9, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

[Type] EnhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@gziolo@justlevine@emdashcodes
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
This repository was archived by the owner on Feb 5, 2026. It is now read-only.

Refactor the usage of $properties param to $args to align with WordPress usage - #59

Merged
gziolo merged 7 commits into
trunkfrom
update/properties-to-args-refactoring
Sep 9, 2025
Merged

Refactor the usage of $properties param to $args to align with WordPress usage#59
gziolo merged 7 commits into
trunkfrom
update/properties-to-args-refactoring

Conversation

@gziolo

@gziologziolo commented Sep 5, 2025

Copy link
Copy Markdown
Member

Follow up for:

More details in this #54 (comment). The most relevant part from @justlevine:

My takeaway from this conversation is that we're good not caring about that last point (between overloading and the filter if someone really, realy thinks shimming a DTO or VO into this api is a good idea, they have ways), so if y'all don't think it's outweighed by the first two (I don't), I'll use prepare_*( array<string,mixed> ): array<valid-shape> and just throw.

This PR refactors the usage of $properties to $args to reflect the conversation. As part of the refactoring, the definition for ability registration was also updated to remove the optionality of $args because to work correctly, there needs to be at least ability_class passed, or more frequently, three fields: label, description, and execute_callback.

Entire codebase was slightly refactored to follow the convention agreed upon.

@gziolo

Copy link
Copy Markdown
MemberAuthor

@justlevine, I cherry-picked your branch and continued refactoring. I'm inclined to go with prepare_properties( array $args ) because the result of that method is used to set class properties. However, it's a minor thing that I wanted to further discuss. Otherwise, I tried to go with args in all other places instead of properties, including unit tests.

@codecov

codecovBot commented Sep 5, 2025

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 50.00000% with 20 lines in your changes missing coverage. Please review.
✅ Project coverage is 84.22%. Comparing base (21af812) to head (79269ed).
⚠️ Report is 1 commits behind head on trunk.

Files with missing linesPatch %Lines
includes/abilities-api/class-wp-ability.php43.75%18 Missing ⚠️
...udes/abilities-api/class-wp-abilities-registry.php83.33%1 Missing ⚠️
includes/bootstrap.php0.00%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## trunk WordPress/abilities-api#59 +/- ##
============================================
- Coverage 84.28% 84.22% -0.07% 
Complexity 96 96 ============================================
Files 8 8 Lines 509 507 -2 ============================================
- Hits 429 427 -2 
Misses 80 80 
FlagCoverage Δ
unit84.22% <50.00%> (-0.07%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ 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.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@gziologziolo added [Status] In Progress Assigned work scheduled [Type] Enhancement New feature or request labels Sep 5, 2025
@justlevine

Copy link
Copy Markdown
Contributor

I'm inclined to go with prepare_properties( array $args ) because the result of that method is used to set class properties.

Semantically, I'm good either way (do you "prepare the args" to be used as class properties or do you "prepare properties" so they can be used?)

Only reason I went with prepare_args() is because I'm assuming we'd want the eventual filter to use args ( e.g. return return apply_filters( 'ability_args', $args, $this->name ), or even ability_prepare_args, or whatever naming semantics ), to keep the developer DX and terminology intuitive.

But filters don't need to match the semantics for direct class overloading, and they also have a much easier core deprecation path if we want to change the name compared to a protected function *, so 🤷

Comment threadincludes/abilities-api/class-wp-abilities-registry.php
Comment threadtests/unit/abilities-api/wpRegisterAbility.php Outdated
@gziologziolo removed the [Status] In Progress Assigned work scheduled label Sep 5, 2025
@gziolo
gziolo marked this pull request as ready for review September 5, 2025 12:12
@github-actions

github-actionsBot commented Sep 5, 2025

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.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: justlevine <justlevine@git.wordpress.org>
Co-authored-by: gziolo <gziolo@git.wordpress.org>
Co-authored-by: emdashcodes <emdashcodes@git.wordpress.org>

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

@gziologziolo changed the title Update/properties to args refactoringRefactor the usage of $properties param to $arg to align with WordPress usageSep 5, 2025
@gziologziolo changed the title Refactor the usage of $properties param to $arg to align with WordPress usageRefactor the usage of $properties param to $args to align with WordPress usageSep 5, 2025
@gziolo

Copy link
Copy Markdown
MemberAuthor

Only reason I went with prepare_args() is because I'm assuming we'd want the eventual filter to use args ( e.g. return return apply_filters( 'ability_args', $args, $this->name ), or even ability_prepare_args, or whatever naming semantics ), to WordPress/ai#40.

Right, both names are fine here in that context. The filter name doesn't need to follow the method name, so we can be flexible.

@gziolo

Copy link
Copy Markdown
MemberAuthor

I verified the changes in the WP core env (WordPress/wordpress-develop#9410), and applied some small tweaks to ensure CI is green there, too.

I also set the version for the plugin and Composer package to v0.2.0 to account for the fact that we slightly modified the public API params – $args are no longer optional, which better reflects the real usage.

@gziolo
gziolo enabled auto-merge (squash) September 8, 2025 12:18
@gziolo
gziolo disabled auto-merge September 8, 2025 12:32
@gziolo

Copy link
Copy Markdown
MemberAuthor

@justlevine or @emdashcodes. It looks like I can no longer merge without approval from someone else. I would appreciate a final check from one of you.

@emdashcodesemdashcodes left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Just had a chance to look. 👍

@gziolo
gziolo merged commit 118c476 into trunkSep 9, 2025
28 of 34 checks passed
@gziolo
gziolo deleted the update/properties-to-args-refactoring branch September 9, 2025 05:29
@justlevine

Copy link
Copy Markdown
Contributor

I also set the version for the plugin and Composer package to v0.2.0

In the future, would we be able to use @since n.e.x.t. and save pre-release versioning for a separate PR / release step?

  1. It prevents us from missing other things that need to be versioned (e.g. the constant, a docs ref too iirc)
  2. It prevents trunk from lying to us or our LLMs. There's no v0.2.0 until we cut it.

@gziolo

Copy link
Copy Markdown
MemberAuthor

In the future, would we be able to use @SInCE n.e.x.t. and save pre-release versioning for a separate PR / release step?

Is it something that could be automated with a GitHub action triggered when a new release is created through GitHub UI?

@justlevine

Copy link
Copy Markdown
Contributor

Yes it is, though if there isn't already FOSSable prior art somewhere, it might not make sense to waste time on a solution for this repo alone over the next six weeks.

@gziologziolo added this to the v0.2.0 milestone Sep 9, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

[Type] EnhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@gziolo@justlevine@emdashcodes
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Feb 5, 2026. It is now read-only.

Refactor the usage of $properties param to $args to align with WordPress usage - #59

Merged
gziolo merged 7 commits into
trunkfrom
update/properties-to-args-refactoring
Sep 9, 2025
Merged

Refactor the usage of $properties param to $args to align with WordPress usage#59
gziolo merged 7 commits into
trunkfrom
update/properties-to-args-refactoring

Conversation

@gziolo

@gziologziolo commented Sep 5, 2025

Copy link
Copy Markdown
Member

Follow up for:

More details in this #54 (comment). The most relevant part from @justlevine:

My takeaway from this conversation is that we're good not caring about that last point (between overloading and the filter if someone really, realy thinks shimming a DTO or VO into this api is a good idea, they have ways), so if y'all don't think it's outweighed by the first two (I don't), I'll use prepare_*( array<string,mixed> ): array<valid-shape> and just throw.

This PR refactors the usage of $properties to $args to reflect the conversation. As part of the refactoring, the definition for ability registration was also updated to remove the optionality of $args because to work correctly, there needs to be at least ability_class passed, or more frequently, three fields: label, description, and execute_callback.

Entire codebase was slightly refactored to follow the convention agreed upon.

@gziolo

Copy link
Copy Markdown
MemberAuthor

@justlevine, I cherry-picked your branch and continued refactoring. I'm inclined to go with prepare_properties( array $args ) because the result of that method is used to set class properties. However, it's a minor thing that I wanted to further discuss. Otherwise, I tried to go with args in all other places instead of properties, including unit tests.

@codecov

codecovBot commented Sep 5, 2025

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 50.00000% with 20 lines in your changes missing coverage. Please review.
✅ Project coverage is 84.22%. Comparing base (21af812) to head (79269ed).
⚠️ Report is 1 commits behind head on trunk.

Files with missing linesPatch %Lines
includes/abilities-api/class-wp-ability.php43.75%18 Missing ⚠️
...udes/abilities-api/class-wp-abilities-registry.php83.33%1 Missing ⚠️
includes/bootstrap.php0.00%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## trunk WordPress/abilities-api#59 +/- ##
============================================
- Coverage 84.28% 84.22% -0.07% 
Complexity 96 96 ============================================
Files 8 8 Lines 509 507 -2 ============================================
- Hits 429 427 -2 
Misses 80 80 
FlagCoverage Δ
unit84.22% <50.00%> (-0.07%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ 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.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@gziologziolo added [Status] In Progress Assigned work scheduled [Type] Enhancement New feature or request labels Sep 5, 2025
@justlevine

Copy link
Copy Markdown
Contributor

I'm inclined to go with prepare_properties( array $args ) because the result of that method is used to set class properties.

Semantically, I'm good either way (do you "prepare the args" to be used as class properties or do you "prepare properties" so they can be used?)

Only reason I went with prepare_args() is because I'm assuming we'd want the eventual filter to use args ( e.g. return return apply_filters( 'ability_args', $args, $this->name ), or even ability_prepare_args, or whatever naming semantics ), to keep the developer DX and terminology intuitive.

But filters don't need to match the semantics for direct class overloading, and they also have a much easier core deprecation path if we want to change the name compared to a protected function *, so 🤷

Comment threadincludes/abilities-api/class-wp-abilities-registry.php
Comment threadtests/unit/abilities-api/wpRegisterAbility.php Outdated
@gziologziolo removed the [Status] In Progress Assigned work scheduled label Sep 5, 2025
@gziolo
gziolo marked this pull request as ready for review September 5, 2025 12:12
@github-actions

github-actionsBot commented Sep 5, 2025

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.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: justlevine <justlevine@git.wordpress.org>
Co-authored-by: gziolo <gziolo@git.wordpress.org>
Co-authored-by: emdashcodes <emdashcodes@git.wordpress.org>

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

@gziologziolo changed the title Update/properties to args refactoringRefactor the usage of $properties param to $arg to align with WordPress usageSep 5, 2025
@gziologziolo changed the title Refactor the usage of $properties param to $arg to align with WordPress usageRefactor the usage of $properties param to $args to align with WordPress usageSep 5, 2025
@gziolo

Copy link
Copy Markdown
MemberAuthor

Only reason I went with prepare_args() is because I'm assuming we'd want the eventual filter to use args ( e.g. return return apply_filters( 'ability_args', $args, $this->name ), or even ability_prepare_args, or whatever naming semantics ), to WordPress/ai#40.

Right, both names are fine here in that context. The filter name doesn't need to follow the method name, so we can be flexible.

@gziolo

Copy link
Copy Markdown
MemberAuthor

I verified the changes in the WP core env (WordPress/wordpress-develop#9410), and applied some small tweaks to ensure CI is green there, too.

I also set the version for the plugin and Composer package to v0.2.0 to account for the fact that we slightly modified the public API params – $args are no longer optional, which better reflects the real usage.

@gziolo
gziolo enabled auto-merge (squash) September 8, 2025 12:18
@gziolo
gziolo disabled auto-merge September 8, 2025 12:32
@gziolo

Copy link
Copy Markdown
MemberAuthor

@justlevine or @emdashcodes. It looks like I can no longer merge without approval from someone else. I would appreciate a final check from one of you.

@emdashcodesemdashcodes left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Just had a chance to look. 👍

@gziolo
gziolo merged commit 118c476 into trunkSep 9, 2025
28 of 34 checks passed
@gziolo
gziolo deleted the update/properties-to-args-refactoring branch September 9, 2025 05:29
@justlevine

Copy link
Copy Markdown
Contributor

I also set the version for the plugin and Composer package to v0.2.0

In the future, would we be able to use @since n.e.x.t. and save pre-release versioning for a separate PR / release step?

  1. It prevents us from missing other things that need to be versioned (e.g. the constant, a docs ref too iirc)
  2. It prevents trunk from lying to us or our LLMs. There's no v0.2.0 until we cut it.

@gziolo

Copy link
Copy Markdown
MemberAuthor

In the future, would we be able to use @SInCE n.e.x.t. and save pre-release versioning for a separate PR / release step?

Is it something that could be automated with a GitHub action triggered when a new release is created through GitHub UI?

@justlevine

Copy link
Copy Markdown
Contributor

Yes it is, though if there isn't already FOSSable prior art somewhere, it might not make sense to waste time on a solution for this repo alone over the next six weeks.

@gziologziolo added this to the v0.2.0 milestone Sep 9, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

[Type] EnhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@gziolo@justlevine@emdashcodes
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Feb 5, 2026. It is now read-only.

Refactor the usage of $properties param to $args to align with WordPress usage - #59

Merged
gziolo merged 7 commits into
trunkfrom
update/properties-to-args-refactoring
Sep 9, 2025
Merged

Refactor the usage of $properties param to $args to align with WordPress usage#59
gziolo merged 7 commits into
trunkfrom
update/properties-to-args-refactoring

Conversation

@gziolo

@gziologziolo commented Sep 5, 2025

Copy link
Copy Markdown
Member

Follow up for:

More details in this #54 (comment). The most relevant part from @justlevine:

My takeaway from this conversation is that we're good not caring about that last point (between overloading and the filter if someone really, realy thinks shimming a DTO or VO into this api is a good idea, they have ways), so if y'all don't think it's outweighed by the first two (I don't), I'll use prepare_*( array<string,mixed> ): array<valid-shape> and just throw.

This PR refactors the usage of $properties to $args to reflect the conversation. As part of the refactoring, the definition for ability registration was also updated to remove the optionality of $args because to work correctly, there needs to be at least ability_class passed, or more frequently, three fields: label, description, and execute_callback.

Entire codebase was slightly refactored to follow the convention agreed upon.

@gziolo

Copy link
Copy Markdown
MemberAuthor

@justlevine, I cherry-picked your branch and continued refactoring. I'm inclined to go with prepare_properties( array $args ) because the result of that method is used to set class properties. However, it's a minor thing that I wanted to further discuss. Otherwise, I tried to go with args in all other places instead of properties, including unit tests.

@codecov

codecovBot commented Sep 5, 2025

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 50.00000% with 20 lines in your changes missing coverage. Please review.
✅ Project coverage is 84.22%. Comparing base (21af812) to head (79269ed).
⚠️ Report is 1 commits behind head on trunk.

Files with missing linesPatch %Lines
includes/abilities-api/class-wp-ability.php43.75%18 Missing ⚠️
...udes/abilities-api/class-wp-abilities-registry.php83.33%1 Missing ⚠️
includes/bootstrap.php0.00%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## trunk WordPress/abilities-api#59 +/- ##
============================================
- Coverage 84.28% 84.22% -0.07% 
Complexity 96 96 ============================================
Files 8 8 Lines 509 507 -2 ============================================
- Hits 429 427 -2 
Misses 80 80 
FlagCoverage Δ
unit84.22% <50.00%> (-0.07%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ 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.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@gziologziolo added [Status] In Progress Assigned work scheduled [Type] Enhancement New feature or request labels Sep 5, 2025
@justlevine

Copy link
Copy Markdown
Contributor

I'm inclined to go with prepare_properties( array $args ) because the result of that method is used to set class properties.

Semantically, I'm good either way (do you "prepare the args" to be used as class properties or do you "prepare properties" so they can be used?)

Only reason I went with prepare_args() is because I'm assuming we'd want the eventual filter to use args ( e.g. return return apply_filters( 'ability_args', $args, $this->name ), or even ability_prepare_args, or whatever naming semantics ), to keep the developer DX and terminology intuitive.

But filters don't need to match the semantics for direct class overloading, and they also have a much easier core deprecation path if we want to change the name compared to a protected function *, so 🤷

Comment threadincludes/abilities-api/class-wp-abilities-registry.php
Comment threadtests/unit/abilities-api/wpRegisterAbility.php Outdated
@gziologziolo removed the [Status] In Progress Assigned work scheduled label Sep 5, 2025
@gziolo
gziolo marked this pull request as ready for review September 5, 2025 12:12
@github-actions

github-actionsBot commented Sep 5, 2025

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.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: justlevine <justlevine@git.wordpress.org>
Co-authored-by: gziolo <gziolo@git.wordpress.org>
Co-authored-by: emdashcodes <emdashcodes@git.wordpress.org>

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

@gziologziolo changed the title Update/properties to args refactoringRefactor the usage of $properties param to $arg to align with WordPress usageSep 5, 2025
@gziologziolo changed the title Refactor the usage of $properties param to $arg to align with WordPress usageRefactor the usage of $properties param to $args to align with WordPress usageSep 5, 2025
@gziolo

Copy link
Copy Markdown
MemberAuthor

Only reason I went with prepare_args() is because I'm assuming we'd want the eventual filter to use args ( e.g. return return apply_filters( 'ability_args', $args, $this->name ), or even ability_prepare_args, or whatever naming semantics ), to WordPress/ai#40.

Right, both names are fine here in that context. The filter name doesn't need to follow the method name, so we can be flexible.

@gziolo

Copy link
Copy Markdown
MemberAuthor

I verified the changes in the WP core env (WordPress/wordpress-develop#9410), and applied some small tweaks to ensure CI is green there, too.

I also set the version for the plugin and Composer package to v0.2.0 to account for the fact that we slightly modified the public API params – $args are no longer optional, which better reflects the real usage.

@gziolo
gziolo enabled auto-merge (squash) September 8, 2025 12:18
@gziolo
gziolo disabled auto-merge September 8, 2025 12:32
@gziolo

Copy link
Copy Markdown
MemberAuthor

@justlevine or @emdashcodes. It looks like I can no longer merge without approval from someone else. I would appreciate a final check from one of you.

@emdashcodesemdashcodes left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Just had a chance to look. 👍

@gziolo
gziolo merged commit 118c476 into trunkSep 9, 2025
28 of 34 checks passed
@gziolo
gziolo deleted the update/properties-to-args-refactoring branch September 9, 2025 05:29
@justlevine

Copy link
Copy Markdown
Contributor

I also set the version for the plugin and Composer package to v0.2.0

In the future, would we be able to use @since n.e.x.t. and save pre-release versioning for a separate PR / release step?

  1. It prevents us from missing other things that need to be versioned (e.g. the constant, a docs ref too iirc)
  2. It prevents trunk from lying to us or our LLMs. There's no v0.2.0 until we cut it.

@gziolo

Copy link
Copy Markdown
MemberAuthor

In the future, would we be able to use @SInCE n.e.x.t. and save pre-release versioning for a separate PR / release step?

Is it something that could be automated with a GitHub action triggered when a new release is created through GitHub UI?

@justlevine

Copy link
Copy Markdown
Contributor

Yes it is, though if there isn't already FOSSable prior art somewhere, it might not make sense to waste time on a solution for this repo alone over the next six weeks.

@gziologziolo added this to the v0.2.0 milestone Sep 9, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

[Type] EnhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@gziolo@justlevine@emdashcodes
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
This repository was archived by the owner on Feb 5, 2026. It is now read-only.

Refactor the usage of $properties param to $args to align with WordPress usage - #59

Merged
gziolo merged 7 commits into
trunkfrom
update/properties-to-args-refactoring
Sep 9, 2025
Merged

Refactor the usage of $properties param to $args to align with WordPress usage#59
gziolo merged 7 commits into
trunkfrom
update/properties-to-args-refactoring

Conversation

@gziolo

@gziologziolo commented Sep 5, 2025

Copy link
Copy Markdown
Member

Follow up for:

More details in this #54 (comment). The most relevant part from @justlevine:

My takeaway from this conversation is that we're good not caring about that last point (between overloading and the filter if someone really, realy thinks shimming a DTO or VO into this api is a good idea, they have ways), so if y'all don't think it's outweighed by the first two (I don't), I'll use prepare_*( array<string,mixed> ): array<valid-shape> and just throw.

This PR refactors the usage of $properties to $args to reflect the conversation. As part of the refactoring, the definition for ability registration was also updated to remove the optionality of $args because to work correctly, there needs to be at least ability_class passed, or more frequently, three fields: label, description, and execute_callback.

Entire codebase was slightly refactored to follow the convention agreed upon.

@gziolo

Copy link
Copy Markdown
MemberAuthor

@justlevine, I cherry-picked your branch and continued refactoring. I'm inclined to go with prepare_properties( array $args ) because the result of that method is used to set class properties. However, it's a minor thing that I wanted to further discuss. Otherwise, I tried to go with args in all other places instead of properties, including unit tests.

@codecov

codecovBot commented Sep 5, 2025

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 50.00000% with 20 lines in your changes missing coverage. Please review.
✅ Project coverage is 84.22%. Comparing base (21af812) to head (79269ed).
⚠️ Report is 1 commits behind head on trunk.

Files with missing linesPatch %Lines
includes/abilities-api/class-wp-ability.php43.75%18 Missing ⚠️
...udes/abilities-api/class-wp-abilities-registry.php83.33%1 Missing ⚠️
includes/bootstrap.php0.00%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## trunk WordPress/abilities-api#59 +/- ##
============================================
- Coverage 84.28% 84.22% -0.07% 
Complexity 96 96 ============================================
Files 8 8 Lines 509 507 -2 ============================================
- Hits 429 427 -2 
Misses 80 80 
FlagCoverage Δ
unit84.22% <50.00%> (-0.07%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ 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.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@gziologziolo added [Status] In Progress Assigned work scheduled [Type] Enhancement New feature or request labels Sep 5, 2025
@justlevine

Copy link
Copy Markdown
Contributor

I'm inclined to go with prepare_properties( array $args ) because the result of that method is used to set class properties.

Semantically, I'm good either way (do you "prepare the args" to be used as class properties or do you "prepare properties" so they can be used?)

Only reason I went with prepare_args() is because I'm assuming we'd want the eventual filter to use args ( e.g. return return apply_filters( 'ability_args', $args, $this->name ), or even ability_prepare_args, or whatever naming semantics ), to keep the developer DX and terminology intuitive.

But filters don't need to match the semantics for direct class overloading, and they also have a much easier core deprecation path if we want to change the name compared to a protected function *, so 🤷

Comment threadincludes/abilities-api/class-wp-abilities-registry.php
Comment threadtests/unit/abilities-api/wpRegisterAbility.php Outdated
@gziologziolo removed the [Status] In Progress Assigned work scheduled label Sep 5, 2025
@gziolo
gziolo marked this pull request as ready for review September 5, 2025 12:12
@github-actions

github-actionsBot commented Sep 5, 2025

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.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: justlevine <justlevine@git.wordpress.org>
Co-authored-by: gziolo <gziolo@git.wordpress.org>
Co-authored-by: emdashcodes <emdashcodes@git.wordpress.org>

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

@gziologziolo changed the title Update/properties to args refactoringRefactor the usage of $properties param to $arg to align with WordPress usageSep 5, 2025
@gziologziolo changed the title Refactor the usage of $properties param to $arg to align with WordPress usageRefactor the usage of $properties param to $args to align with WordPress usageSep 5, 2025
@gziolo

Copy link
Copy Markdown
MemberAuthor

Only reason I went with prepare_args() is because I'm assuming we'd want the eventual filter to use args ( e.g. return return apply_filters( 'ability_args', $args, $this->name ), or even ability_prepare_args, or whatever naming semantics ), to WordPress/ai#40.

Right, both names are fine here in that context. The filter name doesn't need to follow the method name, so we can be flexible.

@gziolo

Copy link
Copy Markdown
MemberAuthor

I verified the changes in the WP core env (WordPress/wordpress-develop#9410), and applied some small tweaks to ensure CI is green there, too.

I also set the version for the plugin and Composer package to v0.2.0 to account for the fact that we slightly modified the public API params – $args are no longer optional, which better reflects the real usage.

@gziolo
gziolo enabled auto-merge (squash) September 8, 2025 12:18
@gziolo
gziolo disabled auto-merge September 8, 2025 12:32
@gziolo

Copy link
Copy Markdown
MemberAuthor

@justlevine or @emdashcodes. It looks like I can no longer merge without approval from someone else. I would appreciate a final check from one of you.

@emdashcodesemdashcodes left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Just had a chance to look. 👍

@gziolo
gziolo merged commit 118c476 into trunkSep 9, 2025
28 of 34 checks passed
@gziolo
gziolo deleted the update/properties-to-args-refactoring branch September 9, 2025 05:29
@justlevine

Copy link
Copy Markdown
Contributor

I also set the version for the plugin and Composer package to v0.2.0

In the future, would we be able to use @since n.e.x.t. and save pre-release versioning for a separate PR / release step?

  1. It prevents us from missing other things that need to be versioned (e.g. the constant, a docs ref too iirc)
  2. It prevents trunk from lying to us or our LLMs. There's no v0.2.0 until we cut it.

@gziolo

Copy link
Copy Markdown
MemberAuthor

In the future, would we be able to use @SInCE n.e.x.t. and save pre-release versioning for a separate PR / release step?

Is it something that could be automated with a GitHub action triggered when a new release is created through GitHub UI?

@justlevine

Copy link
Copy Markdown
Contributor

Yes it is, though if there isn't already FOSSable prior art somewhere, it might not make sense to waste time on a solution for this repo alone over the next six weeks.

@gziologziolo added this to the v0.2.0 milestone Sep 9, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

[Type] EnhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@gziolo@justlevine@emdashcodes
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Feb 5, 2026. It is now read-only.

Refactor the usage of $properties param to $args to align with WordPress usage - #59

Merged
gziolo merged 7 commits into
trunkfrom
update/properties-to-args-refactoring
Sep 9, 2025
Merged

Refactor the usage of $properties param to $args to align with WordPress usage#59
gziolo merged 7 commits into
trunkfrom
update/properties-to-args-refactoring

Conversation

@gziolo

@gziologziolo commented Sep 5, 2025

Copy link
Copy Markdown
Member

Follow up for:

More details in this #54 (comment). The most relevant part from @justlevine:

My takeaway from this conversation is that we're good not caring about that last point (between overloading and the filter if someone really, realy thinks shimming a DTO or VO into this api is a good idea, they have ways), so if y'all don't think it's outweighed by the first two (I don't), I'll use prepare_*( array<string,mixed> ): array<valid-shape> and just throw.

This PR refactors the usage of $properties to $args to reflect the conversation. As part of the refactoring, the definition for ability registration was also updated to remove the optionality of $args because to work correctly, there needs to be at least ability_class passed, or more frequently, three fields: label, description, and execute_callback.

Entire codebase was slightly refactored to follow the convention agreed upon.

@gziolo

Copy link
Copy Markdown
MemberAuthor

@justlevine, I cherry-picked your branch and continued refactoring. I'm inclined to go with prepare_properties( array $args ) because the result of that method is used to set class properties. However, it's a minor thing that I wanted to further discuss. Otherwise, I tried to go with args in all other places instead of properties, including unit tests.

@codecov

codecovBot commented Sep 5, 2025

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 50.00000% with 20 lines in your changes missing coverage. Please review.
✅ Project coverage is 84.22%. Comparing base (21af812) to head (79269ed).
⚠️ Report is 1 commits behind head on trunk.

Files with missing linesPatch %Lines
includes/abilities-api/class-wp-ability.php43.75%18 Missing ⚠️
...udes/abilities-api/class-wp-abilities-registry.php83.33%1 Missing ⚠️
includes/bootstrap.php0.00%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## trunk WordPress/abilities-api#59 +/- ##
============================================
- Coverage 84.28% 84.22% -0.07% 
Complexity 96 96 ============================================
Files 8 8 Lines 509 507 -2 ============================================
- Hits 429 427 -2 
Misses 80 80 
FlagCoverage Δ
unit84.22% <50.00%> (-0.07%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ 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.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@gziologziolo added [Status] In Progress Assigned work scheduled [Type] Enhancement New feature or request labels Sep 5, 2025
@justlevine

Copy link
Copy Markdown
Contributor

I'm inclined to go with prepare_properties( array $args ) because the result of that method is used to set class properties.

Semantically, I'm good either way (do you "prepare the args" to be used as class properties or do you "prepare properties" so they can be used?)

Only reason I went with prepare_args() is because I'm assuming we'd want the eventual filter to use args ( e.g. return return apply_filters( 'ability_args', $args, $this->name ), or even ability_prepare_args, or whatever naming semantics ), to keep the developer DX and terminology intuitive.

But filters don't need to match the semantics for direct class overloading, and they also have a much easier core deprecation path if we want to change the name compared to a protected function *, so 🤷

Comment threadincludes/abilities-api/class-wp-abilities-registry.php
Comment threadtests/unit/abilities-api/wpRegisterAbility.php Outdated
@gziologziolo removed the [Status] In Progress Assigned work scheduled label Sep 5, 2025
@gziolo
gziolo marked this pull request as ready for review September 5, 2025 12:12
@github-actions

github-actionsBot commented Sep 5, 2025

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.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: justlevine <justlevine@git.wordpress.org>
Co-authored-by: gziolo <gziolo@git.wordpress.org>
Co-authored-by: emdashcodes <emdashcodes@git.wordpress.org>

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

@gziologziolo changed the title Update/properties to args refactoringRefactor the usage of $properties param to $arg to align with WordPress usageSep 5, 2025
@gziologziolo changed the title Refactor the usage of $properties param to $arg to align with WordPress usageRefactor the usage of $properties param to $args to align with WordPress usageSep 5, 2025
@gziolo

Copy link
Copy Markdown
MemberAuthor

Only reason I went with prepare_args() is because I'm assuming we'd want the eventual filter to use args ( e.g. return return apply_filters( 'ability_args', $args, $this->name ), or even ability_prepare_args, or whatever naming semantics ), to WordPress/ai#40.

Right, both names are fine here in that context. The filter name doesn't need to follow the method name, so we can be flexible.

@gziolo

Copy link
Copy Markdown
MemberAuthor

I verified the changes in the WP core env (WordPress/wordpress-develop#9410), and applied some small tweaks to ensure CI is green there, too.

I also set the version for the plugin and Composer package to v0.2.0 to account for the fact that we slightly modified the public API params – $args are no longer optional, which better reflects the real usage.

@gziolo
gziolo enabled auto-merge (squash) September 8, 2025 12:18
@gziolo
gziolo disabled auto-merge September 8, 2025 12:32
@gziolo

Copy link
Copy Markdown
MemberAuthor

@justlevine or @emdashcodes. It looks like I can no longer merge without approval from someone else. I would appreciate a final check from one of you.

@emdashcodesemdashcodes left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Just had a chance to look. 👍

@gziolo
gziolo merged commit 118c476 into trunkSep 9, 2025
28 of 34 checks passed
@gziolo
gziolo deleted the update/properties-to-args-refactoring branch September 9, 2025 05:29
@justlevine

Copy link
Copy Markdown
Contributor

I also set the version for the plugin and Composer package to v0.2.0

In the future, would we be able to use @since n.e.x.t. and save pre-release versioning for a separate PR / release step?

  1. It prevents us from missing other things that need to be versioned (e.g. the constant, a docs ref too iirc)
  2. It prevents trunk from lying to us or our LLMs. There's no v0.2.0 until we cut it.

@gziolo

Copy link
Copy Markdown
MemberAuthor

In the future, would we be able to use @SInCE n.e.x.t. and save pre-release versioning for a separate PR / release step?

Is it something that could be automated with a GitHub action triggered when a new release is created through GitHub UI?

@justlevine

Copy link
Copy Markdown
Contributor

Yes it is, though if there isn't already FOSSable prior art somewhere, it might not make sense to waste time on a solution for this repo alone over the next six weeks.

@gziologziolo added this to the v0.2.0 milestone Sep 9, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

[Type] EnhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@gziolo@justlevine@emdashcodes
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Feb 5, 2026. It is now read-only.

Refactor the usage of $properties param to $args to align with WordPress usage - #59

Merged
gziolo merged 7 commits into
trunkfrom
update/properties-to-args-refactoring
Sep 9, 2025
Merged

Refactor the usage of $properties param to $args to align with WordPress usage#59
gziolo merged 7 commits into
trunkfrom
update/properties-to-args-refactoring

Conversation

@gziolo

@gziologziolo commented Sep 5, 2025

Copy link
Copy Markdown
Member

Follow up for:

More details in this #54 (comment). The most relevant part from @justlevine:

My takeaway from this conversation is that we're good not caring about that last point (between overloading and the filter if someone really, realy thinks shimming a DTO or VO into this api is a good idea, they have ways), so if y'all don't think it's outweighed by the first two (I don't), I'll use prepare_*( array<string,mixed> ): array<valid-shape> and just throw.

This PR refactors the usage of $properties to $args to reflect the conversation. As part of the refactoring, the definition for ability registration was also updated to remove the optionality of $args because to work correctly, there needs to be at least ability_class passed, or more frequently, three fields: label, description, and execute_callback.

Entire codebase was slightly refactored to follow the convention agreed upon.

@gziolo

Copy link
Copy Markdown
MemberAuthor

@justlevine, I cherry-picked your branch and continued refactoring. I'm inclined to go with prepare_properties( array $args ) because the result of that method is used to set class properties. However, it's a minor thing that I wanted to further discuss. Otherwise, I tried to go with args in all other places instead of properties, including unit tests.

@codecov

codecovBot commented Sep 5, 2025

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 50.00000% with 20 lines in your changes missing coverage. Please review.
✅ Project coverage is 84.22%. Comparing base (21af812) to head (79269ed).
⚠️ Report is 1 commits behind head on trunk.

Files with missing linesPatch %Lines
includes/abilities-api/class-wp-ability.php43.75%18 Missing ⚠️
...udes/abilities-api/class-wp-abilities-registry.php83.33%1 Missing ⚠️
includes/bootstrap.php0.00%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## trunk WordPress/abilities-api#59 +/- ##
============================================
- Coverage 84.28% 84.22% -0.07% 
Complexity 96 96 ============================================
Files 8 8 Lines 509 507 -2 ============================================
- Hits 429 427 -2 
Misses 80 80 
FlagCoverage Δ
unit84.22% <50.00%> (-0.07%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ 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.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@gziologziolo added [Status] In Progress Assigned work scheduled [Type] Enhancement New feature or request labels Sep 5, 2025
@justlevine

Copy link
Copy Markdown
Contributor

I'm inclined to go with prepare_properties( array $args ) because the result of that method is used to set class properties.

Semantically, I'm good either way (do you "prepare the args" to be used as class properties or do you "prepare properties" so they can be used?)

Only reason I went with prepare_args() is because I'm assuming we'd want the eventual filter to use args ( e.g. return return apply_filters( 'ability_args', $args, $this->name ), or even ability_prepare_args, or whatever naming semantics ), to keep the developer DX and terminology intuitive.

But filters don't need to match the semantics for direct class overloading, and they also have a much easier core deprecation path if we want to change the name compared to a protected function *, so 🤷

Comment threadincludes/abilities-api/class-wp-abilities-registry.php
Comment threadtests/unit/abilities-api/wpRegisterAbility.php Outdated
@gziologziolo removed the [Status] In Progress Assigned work scheduled label Sep 5, 2025
@gziolo
gziolo marked this pull request as ready for review September 5, 2025 12:12
@github-actions

github-actionsBot commented Sep 5, 2025

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.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: justlevine <justlevine@git.wordpress.org>
Co-authored-by: gziolo <gziolo@git.wordpress.org>
Co-authored-by: emdashcodes <emdashcodes@git.wordpress.org>

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

@gziologziolo changed the title Update/properties to args refactoringRefactor the usage of $properties param to $arg to align with WordPress usageSep 5, 2025
@gziologziolo changed the title Refactor the usage of $properties param to $arg to align with WordPress usageRefactor the usage of $properties param to $args to align with WordPress usageSep 5, 2025
@gziolo

Copy link
Copy Markdown
MemberAuthor

Only reason I went with prepare_args() is because I'm assuming we'd want the eventual filter to use args ( e.g. return return apply_filters( 'ability_args', $args, $this->name ), or even ability_prepare_args, or whatever naming semantics ), to WordPress/ai#40.

Right, both names are fine here in that context. The filter name doesn't need to follow the method name, so we can be flexible.

@gziolo

Copy link
Copy Markdown
MemberAuthor

I verified the changes in the WP core env (WordPress/wordpress-develop#9410), and applied some small tweaks to ensure CI is green there, too.

I also set the version for the plugin and Composer package to v0.2.0 to account for the fact that we slightly modified the public API params – $args are no longer optional, which better reflects the real usage.

@gziolo
gziolo enabled auto-merge (squash) September 8, 2025 12:18
@gziolo
gziolo disabled auto-merge September 8, 2025 12:32
@gziolo

Copy link
Copy Markdown
MemberAuthor

@justlevine or @emdashcodes. It looks like I can no longer merge without approval from someone else. I would appreciate a final check from one of you.

@emdashcodesemdashcodes left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Just had a chance to look. 👍

@gziolo
gziolo merged commit 118c476 into trunkSep 9, 2025
28 of 34 checks passed
@gziolo
gziolo deleted the update/properties-to-args-refactoring branch September 9, 2025 05:29
@justlevine

Copy link
Copy Markdown
Contributor

I also set the version for the plugin and Composer package to v0.2.0

In the future, would we be able to use @since n.e.x.t. and save pre-release versioning for a separate PR / release step?

  1. It prevents us from missing other things that need to be versioned (e.g. the constant, a docs ref too iirc)
  2. It prevents trunk from lying to us or our LLMs. There's no v0.2.0 until we cut it.

@gziolo

Copy link
Copy Markdown
MemberAuthor

In the future, would we be able to use @SInCE n.e.x.t. and save pre-release versioning for a separate PR / release step?

Is it something that could be automated with a GitHub action triggered when a new release is created through GitHub UI?

@justlevine

Copy link
Copy Markdown
Contributor

Yes it is, though if there isn't already FOSSable prior art somewhere, it might not make sense to waste time on a solution for this repo alone over the next six weeks.

@gziologziolo added this to the v0.2.0 milestone Sep 9, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

[Type] EnhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@gziolo@justlevine@emdashcodes
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
This repository was archived by the owner on Feb 5, 2026. It is now read-only.

Refactor the usage of $properties param to $args to align with WordPress usage - #59

Merged
gziolo merged 7 commits into
trunkfrom
update/properties-to-args-refactoring
Sep 9, 2025
Merged

Refactor the usage of $properties param to $args to align with WordPress usage#59
gziolo merged 7 commits into
trunkfrom
update/properties-to-args-refactoring

Conversation

@gziolo

@gziologziolo commented Sep 5, 2025

Copy link
Copy Markdown
Member

Follow up for:

More details in this #54 (comment). The most relevant part from @justlevine:

My takeaway from this conversation is that we're good not caring about that last point (between overloading and the filter if someone really, realy thinks shimming a DTO or VO into this api is a good idea, they have ways), so if y'all don't think it's outweighed by the first two (I don't), I'll use prepare_*( array<string,mixed> ): array<valid-shape> and just throw.

This PR refactors the usage of $properties to $args to reflect the conversation. As part of the refactoring, the definition for ability registration was also updated to remove the optionality of $args because to work correctly, there needs to be at least ability_class passed, or more frequently, three fields: label, description, and execute_callback.

Entire codebase was slightly refactored to follow the convention agreed upon.

@gziolo

Copy link
Copy Markdown
MemberAuthor

@justlevine, I cherry-picked your branch and continued refactoring. I'm inclined to go with prepare_properties( array $args ) because the result of that method is used to set class properties. However, it's a minor thing that I wanted to further discuss. Otherwise, I tried to go with args in all other places instead of properties, including unit tests.

@codecov

codecovBot commented Sep 5, 2025

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 50.00000% with 20 lines in your changes missing coverage. Please review.
✅ Project coverage is 84.22%. Comparing base (21af812) to head (79269ed).
⚠️ Report is 1 commits behind head on trunk.

Files with missing linesPatch %Lines
includes/abilities-api/class-wp-ability.php43.75%18 Missing ⚠️
...udes/abilities-api/class-wp-abilities-registry.php83.33%1 Missing ⚠️
includes/bootstrap.php0.00%1 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## trunk WordPress/abilities-api#59 +/- ##
============================================
- Coverage 84.28% 84.22% -0.07% 
Complexity 96 96 ============================================
Files 8 8 Lines 509 507 -2 ============================================
- Hits 429 427 -2 
Misses 80 80 
FlagCoverage Δ
unit84.22% <50.00%> (-0.07%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ 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.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@gziologziolo added [Status] In Progress Assigned work scheduled [Type] Enhancement New feature or request labels Sep 5, 2025
@justlevine

Copy link
Copy Markdown
Contributor

I'm inclined to go with prepare_properties( array $args ) because the result of that method is used to set class properties.

Semantically, I'm good either way (do you "prepare the args" to be used as class properties or do you "prepare properties" so they can be used?)

Only reason I went with prepare_args() is because I'm assuming we'd want the eventual filter to use args ( e.g. return return apply_filters( 'ability_args', $args, $this->name ), or even ability_prepare_args, or whatever naming semantics ), to keep the developer DX and terminology intuitive.

But filters don't need to match the semantics for direct class overloading, and they also have a much easier core deprecation path if we want to change the name compared to a protected function *, so 🤷

Comment threadincludes/abilities-api/class-wp-abilities-registry.php
Comment threadtests/unit/abilities-api/wpRegisterAbility.php Outdated
@gziologziolo removed the [Status] In Progress Assigned work scheduled label Sep 5, 2025
@gziolo
gziolo marked this pull request as ready for review September 5, 2025 12:12
@github-actions

github-actionsBot commented Sep 5, 2025

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.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: justlevine <justlevine@git.wordpress.org>
Co-authored-by: gziolo <gziolo@git.wordpress.org>
Co-authored-by: emdashcodes <emdashcodes@git.wordpress.org>

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

@gziologziolo changed the title Update/properties to args refactoringRefactor the usage of $properties param to $arg to align with WordPress usageSep 5, 2025
@gziologziolo changed the title Refactor the usage of $properties param to $arg to align with WordPress usageRefactor the usage of $properties param to $args to align with WordPress usageSep 5, 2025
@gziolo

Copy link
Copy Markdown
MemberAuthor

Only reason I went with prepare_args() is because I'm assuming we'd want the eventual filter to use args ( e.g. return return apply_filters( 'ability_args', $args, $this->name ), or even ability_prepare_args, or whatever naming semantics ), to WordPress/ai#40.

Right, both names are fine here in that context. The filter name doesn't need to follow the method name, so we can be flexible.

@gziolo

Copy link
Copy Markdown
MemberAuthor

I verified the changes in the WP core env (WordPress/wordpress-develop#9410), and applied some small tweaks to ensure CI is green there, too.

I also set the version for the plugin and Composer package to v0.2.0 to account for the fact that we slightly modified the public API params – $args are no longer optional, which better reflects the real usage.

@gziolo
gziolo enabled auto-merge (squash) September 8, 2025 12:18
@gziolo
gziolo disabled auto-merge September 8, 2025 12:32
@gziolo

Copy link
Copy Markdown
MemberAuthor

@justlevine or @emdashcodes. It looks like I can no longer merge without approval from someone else. I would appreciate a final check from one of you.

@emdashcodesemdashcodes left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Just had a chance to look. 👍

@gziolo
gziolo merged commit 118c476 into trunkSep 9, 2025
28 of 34 checks passed
@gziolo
gziolo deleted the update/properties-to-args-refactoring branch September 9, 2025 05:29
@justlevine

Copy link
Copy Markdown
Contributor

I also set the version for the plugin and Composer package to v0.2.0

In the future, would we be able to use @since n.e.x.t. and save pre-release versioning for a separate PR / release step?

  1. It prevents us from missing other things that need to be versioned (e.g. the constant, a docs ref too iirc)
  2. It prevents trunk from lying to us or our LLMs. There's no v0.2.0 until we cut it.

@gziolo

Copy link
Copy Markdown
MemberAuthor

In the future, would we be able to use @SInCE n.e.x.t. and save pre-release versioning for a separate PR / release step?

Is it something that could be automated with a GitHub action triggered when a new release is created through GitHub UI?

@justlevine

Copy link
Copy Markdown
Contributor

Yes it is, though if there isn't already FOSSable prior art somewhere, it might not make sense to waste time on a solution for this repo alone over the next six weeks.

@gziologziolo added this to the v0.2.0 milestone Sep 9, 2025
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

[Type] EnhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@gziolo@justlevine@emdashcodes