Skip to content

Commit 9442925

Browse files
handle edge case for no-import-document rule (#28261)
Co-authored-by: JJ Kasper <jj@jjsweb.site>
1 parent 220fa9c commit 9442925

File tree

2 files changed

+28
-16
lines changed

2 files changed

+28
-16
lines changed

packages/eslint-plugin-next/lib/rules/no-document-import-in-page.js

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
const path = require('path')
2-
31
module.exports = {
42
meta: {
53
docs: {
@@ -15,15 +13,10 @@ module.exports = {
1513
return
1614
}
1715

18-
const page = context.getFilename().split('pages')[1]
19-
if (!page) {
20-
return
21-
}
22-
const { name, dir } = path.parse(page)
23-
if (
24-
name.startsWith('_document') ||
25-
(dir === '/_document' && name === 'index')
26-
) {
16+
const paths = context.getFilename().split('pages')
17+
const page = paths[paths.length - 1]
18+
19+
if (!page || page.startsWith('/_document')) {
2720
return
2821
}
2922

test/unit/eslint-plugin-next/no-document-import-in-page.test.ts

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,21 +84,40 @@ ruleTester.run('no-document-import-in-page', rule, {
8484
`,
8585
filename: 'pages/_document/index.tsx',
8686
},
87+
{
88+
code: `import Document from "next/document"
89+
90+
export default class MyDocument extends Document {
91+
render() {
92+
return (
93+
<Html>
94+
</Html>
95+
);
96+
}
97+
}
98+
`,
99+
filename: 'pagesapp/src/pages/_document.js',
100+
},
101+
],
102+
invalid: [
87103
{
88104
code: `import Document from "next/document"
89105
90106
export const Test = () => <p>Test</p>
91107
`,
92108
filename: 'components/test.js',
109+
errors: [
110+
{
111+
message:
112+
'next/document should not be imported outside of pages/_document.js. See https://nextjs.org/docs/messages/no-document-import-in-page.',
113+
type: 'ImportDeclaration',
114+
},
115+
],
93116
},
94-
],
95-
invalid: [
96117
{
97118
code: `import Document from "next/document"
98119
99-
export const Test = () => (
100-
<p>Test</p>
101-
)
120+
export const Test = () => <p>Test</p>
102121
`,
103122
filename: 'pages/test.js',
104123
errors: [

0 commit comments

Comments
 (0)