diff --git a/packages/eslint-plugin-next/lib/rules/inline-script-id.js b/packages/eslint-plugin-next/lib/rules/inline-script-id.js index 099b12de8edaede..20322f913c22d47 100644 --- a/packages/eslint-plugin-next/lib/rules/inline-script-id.js +++ b/packages/eslint-plugin-next/lib/rules/inline-script-id.js @@ -27,15 +27,22 @@ module.exports = { return } - const attributes = node.openingElement.attributes + const attributeNames = new Set() + node.openingElement.attributes.forEach((attribute) => { + if (attribute.type === 'JSXAttribute') { + attributeNames.add(attribute.name.name) + } else if (attribute.type === 'JSXSpreadAttribute') { + attribute.argument.properties.forEach((property) => { + attributeNames.add(property.key.name) + }) + } + }) if ( node.children.length > 0 || - attributes.some( - (attribute) => attribute.name.name === 'dangerouslySetInnerHTML' - ) + attributeNames.has('dangerouslySetInnerHTML') ) { - if (!attributes.some((attribute) => attribute.name.name === 'id')) { + if (!attributeNames.has('id')) { context.report({ node, message: diff --git a/test/unit/eslint-plugin-next/inline-script-id.test.ts b/test/unit/eslint-plugin-next/inline-script-id.test.ts index eb59af7744304c6..d584af36402ad75 100644 --- a/test/unit/eslint-plugin-next/inline-script-id.test.ts +++ b/test/unit/eslint-plugin-next/inline-script-id.test.ts @@ -76,6 +76,28 @@ ruleTester.run('inline-script-id', rule, { ) }`, }, + { + code: `import Script from 'next/script'; + + export default function TestPage() { + return ( + + ) + }`, + }, + { + code: `import Script from 'next/script'; + + export default function TestPage() { + return ( + + ) + }`, + }, ], invalid: [ {