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: {