From 44e098a6424d2cea2f6f15a8e8242b9f0764e96b Mon Sep 17 00:00:00 2001 From: Houssein Djirdeh Date: Wed, 18 Aug 2021 13:07:14 -0400 Subject: [PATCH] handle edge case for no-import-document rule --- .../lib/rules/no-document-import-in-page.js | 15 +++------- .../no-document-import-in-page.unit.test.js | 29 +++++++++++++++---- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/packages/eslint-plugin-next/lib/rules/no-document-import-in-page.js b/packages/eslint-plugin-next/lib/rules/no-document-import-in-page.js index 093a64190aa580b..55eea712a4680c3 100644 --- a/packages/eslint-plugin-next/lib/rules/no-document-import-in-page.js +++ b/packages/eslint-plugin-next/lib/rules/no-document-import-in-page.js @@ -1,5 +1,3 @@ -const path = require('path') - module.exports = { meta: { docs: { @@ -15,15 +13,10 @@ module.exports = { return } - const page = context.getFilename().split('pages')[1] - if (!page) { - return - } - const { name, dir } = path.parse(page) - if ( - name.startsWith('_document') || - (dir === '/_document' && name === 'index') - ) { + const paths = context.getFilename().split('pages') + const page = paths[paths.length - 1] + + if (!page || page.startsWith('/_document')) { return } diff --git a/test/eslint-plugin-next/no-document-import-in-page.unit.test.js b/test/eslint-plugin-next/no-document-import-in-page.unit.test.js index fc8a28ca5c12e85..d78673b2d94c1c6 100644 --- a/test/eslint-plugin-next/no-document-import-in-page.unit.test.js +++ b/test/eslint-plugin-next/no-document-import-in-page.unit.test.js @@ -86,21 +86,40 @@ ruleTester.run('no-document-import-in-page', rule, { `, filename: 'pages/_document/index.tsx', }, + { + code: `import Document from "next/document" + + export default class MyDocument extends Document { + render() { + return ( + + + ); + } + } + `, + filename: 'pagesapp/src/pages/_document.js', + }, + ], + invalid: [ { code: `import Document from "next/document" export const Test = () =>

Test

`, filename: 'components/test.js', + errors: [ + { + message: + 'next/document should not be imported outside of pages/_document.js. See https://nextjs.org/docs/messages/no-document-import-in-page.', + type: 'ImportDeclaration', + }, + ], }, - ], - invalid: [ { code: `import Document from "next/document" - export const Test = () => ( -

Test

- ) + export const Test = () =>

Test

`, filename: 'pages/test.js', errors: [