-
Notifications
You must be signed in to change notification settings - Fork 59
Description
Bug Report
- Yes, I reviewed the contribution guidelines.
- Yes, more specifically, I reviewed the guidelines on how to write clear bug reports.
Describe the current, buggy behavior
I am using webpack (in my WordPress boilerplate https://github.com/devowlio/wp-react-starter) and want to extract strings (make-pot) from my bundled .js file. My file contains this code:
Object(_utils__WEBPACK_IMPORTED_MODULE_7__["__"])("Try again"))As long as it looks like this, it works as expected. The coding covers that case:
i18n-command/src/JsFunctionsScanner.php
Lines 212 to 239 in 79d9c75
| // If the callee is a call expression as created by Webpack resolve it. | |
| // For example: Object(u.__)( "translation" ). | |
| if ( | |
| 'CallExpression' === $callee->getType() && | |
| 'Identifier' === $callee->getCallee()->getType() && | |
| 'Object' === $callee->getCallee()->getName() && | |
| [] !== $callee->getArguments() && | |
| 'MemberExpression' === $callee->getArguments()[0]->getType() | |
| ) { | |
| $property = $callee->getArguments()[0]->getProperty(); | |
| // Matches minified webpack statements: Object(u.__)( "translation" ). | |
| if ( 'Identifier' === $property->getType() ) { | |
| return [ | |
| 'name' => $property->getName(), | |
| 'comments' => $callee->getCallee()->getLeadingComments(), | |
| ]; | |
| } | |
| // Matches unminified webpack statements: | |
| // Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__["__"])( "translation" ); | |
| if ( 'Literal' === $property->getType() ) { | |
| return [ | |
| 'name' => $property->getValue(), | |
| 'comments' => $callee->getCallee()->getLeadingComments(), | |
| ]; | |
| } | |
| } |
But, due to the fact I need to rely on webpack's splitChunks and some other optimizations (usedExports and sideEffects) it no longer works because the output looks like this:
Object(_utils__WEBPACK_IMPORTED_MODULE_7__[/* __ */ "a"])("Try again"))You see, it creates an inline comment /* __ */ with the function name (can be also _n or whatever).
Describe how other contributors can replicate this bug
I can not tell you the exact webpack configuration as it is very complicated, but you could do the following:
- I think you have a webpack example project, navigate to it
- Open the bundled
.jsfile - Search for a working
__WEBPACK_IMPORTED_MODULE - Replace
"__"with/* __ */ "a"
Edit: You can also create a test.js file with the following content:
Object(_utils__WEBPACK_IMPORTED_MODULE_6__[/* __*/ "a"])("Try again");
Object(_utils__WEBPACK_IMPORTED_MODULE_6__["__"])("This works");Describe what you would expect as the correct outcome
Should parse the string Try again correctly to .pot file.
Let us know what environment you are running this on
OS: Linux 4.4.0-18362-Microsoft #476-Microsoft Fri Nov 01 16:53:00 PST 2019 x86_64
Shell: /bin/bash
PHP binary: /usr/bin/php7.2
PHP version: 7.2.24-0ubuntu0.18.04.2
php.ini used: /etc/php/7.2/cli/php.ini
WP-CLI root dir: phar://wp-cli.phar/vendor/wp-cli/wp-cli
WP-CLI vendor dir: phar://wp-cli.phar/vendor
WP_CLI phar path: /d/Programme/VSCode Workspace/devowl-wp/plugins/devowl-site
WP-CLI packages dir:
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 2.2.0
Provide a possible solution
I do not exactly know how that works with Peast but perhaps we can check for the inline comment (trimmed).