Skip to content
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

fix(shortcode): replace function should handle empty string callback return #16358

Merged
merged 1 commit into from
Dec 10, 2020

Conversation

dsifford
Copy link
Contributor

Description

Currently, the replace function will not handle a callback that returns an empty string. This PR simply allows for that.

How has this been tested?

Updated unit tests. All pass.

Screenshots

N/A

Types of changes

(depending on the interpreter) either Bug fix or Feature

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.

@@ -102,7 +102,7 @@ export function replace( tag, text, callback ) {

// Make sure to return any of the extra brackets if they weren't used to
// escape the shortcode.
return result ? left + result + right : match;
return typeof result === 'string' ? left + result + right : match;
Copy link
Member

Choose a reason for hiding this comment

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

Hi @dsifford thank you for your contribution. This change fixes the problem, but I noticed that if the callback returned a number previously the replace happened and with this change the replace is not happening. I added a test case for the scenario.
What if we use the condition result || result === ''?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Up to you guys. I'd be more of a fan of making the return type more strict, but I'll concede to the majority. Non-strict return types can lead to some tricky bugs.

Copy link
Member

Choose a reason for hiding this comment

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

I'd be curious what the usage looks like for someone who wants to opt out of the concatenation. In other words, if that usage should expect to provide a return value of undefined or null from the callback, couldn't we form the condition to target those values, which has the benefit of not breaking existing usage with values like numbers, while also type-specific to "empty" (skip) case.

Since I'd not really trust the result of + and potentially-numeric values (could add rather than concatenate?), I'd also not have too much of a problem with saying that the previous behavior was undocumented / unintended / buggy, calling this a "fix".

@gziolo gziolo added [Type] Developer Documentation Documentation for developers [Feature] Shortcodes Related to shortcode functionality and removed [Type] Developer Documentation Documentation for developers labels Aug 27, 2019
@gziolo
Copy link
Member

gziolo commented Nov 28, 2020

@dsifford, can you refresh this PR so we could land it?

Copy link
Member

@gziolo gziolo left a comment

Choose a reason for hiding this comment

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

Based on:

Since I'd not really trust the result of + and potentially-numeric values (could add rather than concatenate?), I'd also not have too much of a problem with saying that the previous behavior was undocumented / unintended / buggy, calling this a "fix".

@dsifford
Copy link
Contributor Author

@gziolo Yes I can get this PR caught up with the main branch. I am forgetting the context now as to why I made this PR, but happy to make it mergeable if you all find this useful.

@dsifford
Copy link
Contributor Author

If by refresh you didn't mean merge and instead you wanted a rebase let me know and I'll do that instead.

@github-actions
Copy link

github-actions bot commented Nov 30, 2020

Size Change: +5 B (0%)

Total Size: 1.21 MB

Filename Size Change
build/shortcode/index.js 1.7 kB +5 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/annotations/index.js 3.81 kB 0 B
build/api-fetch/index.js 3.42 kB 0 B
build/autop/index.js 2.83 kB 0 B
build/blob/index.js 665 B 0 B
build/block-directory/index.js 8.72 kB 0 B
build/block-directory/style-rtl.css 943 B 0 B
build/block-directory/style.css 942 B 0 B
build/block-editor/index.js 128 kB 0 B
build/block-editor/style-rtl.css 11.2 kB 0 B
build/block-editor/style.css 11.2 kB 0 B
build/block-library/editor-rtl.css 9.07 kB 0 B
build/block-library/editor.css 9.07 kB 0 B
build/block-library/index.js 149 kB 0 B
build/block-library/style-rtl.css 8.37 kB 0 B
build/block-library/style.css 8.37 kB 0 B
build/block-library/theme-rtl.css 789 B 0 B
build/block-library/theme.css 790 B 0 B
build/block-serialization-default-parser/index.js 1.88 kB 0 B
build/block-serialization-spec-parser/index.js 3.06 kB 0 B
build/blocks/index.js 48.1 kB 0 B
build/components/index.js 171 kB 0 B
build/components/style-rtl.css 15.4 kB 0 B
build/components/style.css 15.4 kB 0 B
build/compose/index.js 10.6 kB 0 B
build/core-data/index.js 15.4 kB 0 B
build/data-controls/index.js 827 B 0 B
build/data/index.js 8.98 kB 0 B
build/date/index.js 31.8 kB 0 B
build/deprecated/index.js 769 B 0 B
build/dom-ready/index.js 571 B 0 B
build/dom/index.js 4.95 kB 0 B
build/edit-navigation/index.js 11.1 kB 0 B
build/edit-navigation/style-rtl.css 881 B 0 B
build/edit-navigation/style.css 885 B 0 B
build/edit-post/index.js 306 kB 0 B
build/edit-post/style-rtl.css 6.49 kB 0 B
build/edit-post/style.css 6.47 kB 0 B
build/edit-site/index.js 24.7 kB 0 B
build/edit-site/style-rtl.css 3.93 kB 0 B
build/edit-site/style.css 3.93 kB 0 B
build/edit-widgets/index.js 26.3 kB 0 B
build/edit-widgets/style-rtl.css 3.13 kB 0 B
build/edit-widgets/style.css 3.13 kB 0 B
build/editor/editor-styles-rtl.css 476 B 0 B
build/editor/editor-styles.css 478 B 0 B
build/editor/index.js 43.3 kB 0 B
build/editor/style-rtl.css 3.84 kB 0 B
build/editor/style.css 3.84 kB 0 B
build/element/index.js 4.63 kB 0 B
build/escape-html/index.js 735 B 0 B
build/format-library/index.js 6.74 kB 0 B
build/format-library/style-rtl.css 547 B 0 B
build/format-library/style.css 548 B 0 B
build/hooks/index.js 2.27 kB 0 B
build/html-entities/index.js 623 B 0 B
build/i18n/index.js 3.57 kB 0 B
build/is-shallow-equal/index.js 697 B 0 B
build/keyboard-shortcuts/index.js 2.54 kB 0 B
build/keycodes/index.js 1.94 kB 0 B
build/list-reusable-blocks/index.js 3.1 kB 0 B
build/list-reusable-blocks/style-rtl.css 476 B 0 B
build/list-reusable-blocks/style.css 476 B 0 B
build/media-utils/index.js 5.32 kB 0 B
build/notices/index.js 1.85 kB 0 B
build/nux/index.js 3.42 kB 0 B
build/nux/style-rtl.css 671 B 0 B
build/nux/style.css 668 B 0 B
build/plugins/index.js 2.54 kB 0 B
build/primitives/index.js 1.43 kB 0 B
build/priority-queue/index.js 790 B 0 B
build/redux-routine/index.js 2.84 kB 0 B
build/reusable-blocks/index.js 2.92 kB 0 B
build/rich-text/index.js 13.4 kB 0 B
build/server-side-render/index.js 2.77 kB 0 B
build/token-list/index.js 1.27 kB 0 B
build/url/index.js 2.84 kB 0 B
build/viewport/index.js 1.86 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.22 kB 0 B

compressed-size-action

@dsifford
Copy link
Contributor Author

Tests failing.. Shoot. Will look at this more later.

@gziolo
Copy link
Member

gziolo commented Nov 30, 2020

Merge with master is fine, but the failing test is not 😃

Thank you for looking into it 👍

@dsifford
Copy link
Contributor Author

dsifford commented Dec 1, 2020

@gziolo It appears the only failing test is the one test case that was added after the fact in this same PR.

Is that case still desired to be supported? (cc: @jorgefilipecosta)

@jorgefilipecosta jorgefilipecosta force-pushed the fix/shortcode-replace-empty-string branch from 2706007 to d8a6d65 Compare December 10, 2020 17:54
@dsifford
Copy link
Contributor Author

Thanks @jorgefilipecosta! 😄

@jorgefilipecosta jorgefilipecosta force-pushed the fix/shortcode-replace-empty-string branch from d8a6d65 to 9aea630 Compare December 10, 2020 18:14
@jorgefilipecosta jorgefilipecosta merged commit 639b8bc into master Dec 10, 2020
@jorgefilipecosta jorgefilipecosta deleted the fix/shortcode-replace-empty-string branch December 10, 2020 18:42
@github-actions github-actions bot added this to the Gutenberg 9.6 milestone Dec 10, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Shortcodes Related to shortcode functionality
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants