Commit 9e53341cd0c for woocommerce
commit 9e53341cd0ca55e6d9a0504f287d8a7a2119d0dc
Author: Vlad Olaru <vlad.olaru@automattic.com>
Date: Tue Oct 20 16:32:48 2026 +0300
Fix linting in generated extension projects (#70023)
* fix(create-woo-extension): Fix generated project lint checks
Full-project lint scans bundled assets and PHPUnit vendor JavaScript,
which can also overflow ESLint's default formatter. The task and SQL
examples have source errors, and task/dashboard imports rely on
undeclared transitive dependencies.
Exclude generated and vendor files, declare direct dependencies, and
correct the translation label and query documentation. Keep source
lint rules enabled; all six generated variants pass with zero warnings.
Refs #50420
* chore(create-woo-extension): Add generated lint fix changelog
Record the generated-project lint fix for the next package release.
Refs #50420
* docs(create-woo-extension): Mark report currency as optional
The formatter also accepts queries without a currency and returns the default configuration in that case.
Refs #50420
* docs(create-woo-extension): Explain add-task dependencies
The add-task template imports these packages directly. Explain why the
scaffold declares them explicitly instead of relying on transitive
dependencies to satisfy dependency linting.
Refs #50420
diff --git a/packages/js/create-woo-extension/changelog/fix-scaffold-generated-project-lint b/packages/js/create-woo-extension/changelog/fix-scaffold-generated-project-lint
new file mode 100644
index 00000000000..9e4690932ea
--- /dev/null
+++ b/packages/js/create-woo-extension/changelog/fix-scaffold-generated-project-lint
@@ -0,0 +1,4 @@
+Significance: patch
+Type: fix
+
+Fix JavaScript linting in generated extension projects.
diff --git a/packages/js/create-woo-extension/index.js b/packages/js/create-woo-extension/index.js
index e6414fc24b8..6bc096c153b 100644
--- a/packages/js/create-woo-extension/index.js
+++ b/packages/js/create-woo-extension/index.js
@@ -88,6 +88,11 @@ module.exports = {
npmDependencies: [
...defaultDependencies,
'@woocommerce/onboarding',
+ // The add-task template imports these directly; declare them to satisfy
+ // import/no-extraneous-dependencies without relying on transitive dependencies.
+ '@woocommerce/data',
+ '@wordpress/data',
+ '@wordpress/plugins',
],
},
'dashboard-section': {
@@ -102,6 +107,12 @@ module.exports = {
'dashboard-section',
'src'
),
+ npmDependencies: [
+ ...defaultDependencies,
+ '@woocommerce/currency',
+ '@wordpress/icons',
+ 'moment',
+ ],
},
'table-column': {
pluginTemplatesPath: join( __dirname, 'variants', 'table-column' ),
diff --git a/packages/js/create-woo-extension/variants/add-report/eslint.config.mjs.mustache b/packages/js/create-woo-extension/variants/add-report/eslint.config.mjs.mustache
index f8c1e5fc44b..7100c8b14bc 100644
--- a/packages/js/create-woo-extension/variants/add-report/eslint.config.mjs.mustache
+++ b/packages/js/create-woo-extension/variants/add-report/eslint.config.mjs.mustache
@@ -1,6 +1,7 @@
import woocommerce from '@woocommerce/eslint-plugin';
export default [
+ { ignores: [ 'build/**', 'vendor/**' ] },
...woocommerce.configs.recommended,
{
rules: {
diff --git a/packages/js/create-woo-extension/variants/add-task/eslint.config.mjs.mustache b/packages/js/create-woo-extension/variants/add-task/eslint.config.mjs.mustache
index f8c1e5fc44b..7100c8b14bc 100644
--- a/packages/js/create-woo-extension/variants/add-task/eslint.config.mjs.mustache
+++ b/packages/js/create-woo-extension/variants/add-task/eslint.config.mjs.mustache
@@ -1,6 +1,7 @@
import woocommerce from '@woocommerce/eslint-plugin';
export default [
+ { ignores: [ 'build/**', 'vendor/**' ] },
...woocommerce.configs.recommended,
{
rules: {
diff --git a/packages/js/create-woo-extension/variants/add-task/src/index.js.mustache b/packages/js/create-woo-extension/variants/add-task/src/index.js.mustache
index af89211e538..df29c9c9d8b 100644
--- a/packages/js/create-woo-extension/variants/add-task/src/index.js.mustache
+++ b/packages/js/create-woo-extension/variants/add-task/src/index.js.mustache
@@ -1,4 +1,3 @@
-/* eslint-disable @wordpress/i18n-text-domain */
/**
* External dependencies
*/
@@ -26,7 +25,7 @@ const TaskContent = ( { onComplete, task } ) => {
) }{ ' ' }
<br />
<br />
- { __( 'Task actioned status: ', '{{textdomain}}' ) }{ ' ' }
+ { __( 'Task actioned status:', '{{textdomain}}' ) }{ ' ' }
{ isActioned ? 'actioned' : 'not actioned' }
<br />
<br />
diff --git a/packages/js/create-woo-extension/variants/dashboard-section/eslint.config.mjs.mustache b/packages/js/create-woo-extension/variants/dashboard-section/eslint.config.mjs.mustache
index f8c1e5fc44b..7100c8b14bc 100644
--- a/packages/js/create-woo-extension/variants/dashboard-section/eslint.config.mjs.mustache
+++ b/packages/js/create-woo-extension/variants/dashboard-section/eslint.config.mjs.mustache
@@ -1,6 +1,7 @@
import woocommerce from '@woocommerce/eslint-plugin';
export default [
+ { ignores: [ 'build/**', 'vendor/**' ] },
...woocommerce.configs.recommended,
{
rules: {
diff --git a/packages/js/create-woo-extension/variants/default/eslint.config.mjs.mustache b/packages/js/create-woo-extension/variants/default/eslint.config.mjs.mustache
index f8c1e5fc44b..7100c8b14bc 100644
--- a/packages/js/create-woo-extension/variants/default/eslint.config.mjs.mustache
+++ b/packages/js/create-woo-extension/variants/default/eslint.config.mjs.mustache
@@ -1,6 +1,7 @@
import woocommerce from '@woocommerce/eslint-plugin';
export default [
+ { ignores: [ 'build/**', 'vendor/**' ] },
...woocommerce.configs.recommended,
{
rules: {
diff --git a/packages/js/create-woo-extension/variants/sql-modification/eslint.config.mjs.mustache b/packages/js/create-woo-extension/variants/sql-modification/eslint.config.mjs.mustache
index f8c1e5fc44b..7100c8b14bc 100644
--- a/packages/js/create-woo-extension/variants/sql-modification/eslint.config.mjs.mustache
+++ b/packages/js/create-woo-extension/variants/sql-modification/eslint.config.mjs.mustache
@@ -1,6 +1,7 @@
import woocommerce from '@woocommerce/eslint-plugin';
export default [
+ { ignores: [ 'build/**', 'vendor/**' ] },
...woocommerce.configs.recommended,
{
rules: {
diff --git a/packages/js/create-woo-extension/variants/sql-modification/src/index.js.mustache b/packages/js/create-woo-extension/variants/sql-modification/src/index.js.mustache
index 35100bb3809..6e548246344 100644
--- a/packages/js/create-woo-extension/variants/sql-modification/src/index.js.mustache
+++ b/packages/js/create-woo-extension/variants/sql-modification/src/index.js.mustache
@@ -156,8 +156,9 @@ const currencies = {
/**
* Update report currency formatting based on selected currency.
*
- * @param {Object} config - Default currency configuration.
- * @param {Object} query - Query parameters including currency.
+ * @param {Object} config - Default currency configuration.
+ * @param {Object} query - Query parameters.
+ * @param {string} [query.currency] - Selected currency code.
* @return {Object} Updated currency configuration.
*/
const updateReportCurrencies = ( config, { currency } ) => {
diff --git a/packages/js/create-woo-extension/variants/table-column/eslint.config.mjs.mustache b/packages/js/create-woo-extension/variants/table-column/eslint.config.mjs.mustache
index f8c1e5fc44b..7100c8b14bc 100644
--- a/packages/js/create-woo-extension/variants/table-column/eslint.config.mjs.mustache
+++ b/packages/js/create-woo-extension/variants/table-column/eslint.config.mjs.mustache
@@ -1,6 +1,7 @@
import woocommerce from '@woocommerce/eslint-plugin';
export default [
+ { ignores: [ 'build/**', 'vendor/**' ] },
...woocommerce.configs.recommended,
{
rules: {