-
-
Notifications
You must be signed in to change notification settings - Fork 2.8k
[New] Align no-deprecated
rule with React 18 deprecations
#3548
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -48,9 +48,9 @@ ruleTester.run('no-deprecated', rule, { | |||||||||||||||||||||||
// Not deprecated | ||||||||||||||||||||||||
'var element = React.createElement(\'p\', {}, null);', | ||||||||||||||||||||||||
'var clone = React.cloneElement(element);', | ||||||||||||||||||||||||
'ReactDOM.render(element, container);', | ||||||||||||||||||||||||
'ReactDOM.unmountComponentAtNode(container);', | ||||||||||||||||||||||||
Comment on lines
-51
to
-52
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. we should be able to keep these test cases with the react version set to 17.999.999 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Added one more test to cover this scenario. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I meant, keep the "valid" tests cases, because these remain valid in react < 18. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I meant, keep the "valid" cases, because these remain valid in react < 18. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You cannot leave it where it was before, React version isn't specified there. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. right - i mean, edit the existing rule to add the react version, so that "a passing test for ReactDOM.render" remains There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. React version can be specified using eslint There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @ljharb Is there anything else that prevents the PR from being merged? I believe the requested scenario has been covered: eslint-plugin-react/tests/lib/rules/no-deprecated.js Lines 122 to 132 in 1375bd1
|
||||||||||||||||||||||||
'ReactDOM.cloneElement(child, container);', | ||||||||||||||||||||||||
'ReactDOM.findDOMNode(instance);', | ||||||||||||||||||||||||
'ReactDOM.createPortal(child, container);', | ||||||||||||||||||||||||
'ReactDOMServer.renderToString(element);', | ||||||||||||||||||||||||
'ReactDOMServer.renderToStaticMarkup(element);', | ||||||||||||||||||||||||
{ | ||||||||||||||||||||||||
|
@@ -119,6 +119,40 @@ ruleTester.run('no-deprecated', rule, { | |||||||||||||||||||||||
let { default: defaultReactExport, ...allReactExports } = React; | ||||||||||||||||||||||||
`, | ||||||||||||||||||||||||
}, | ||||||||||||||||||||||||
// React < 18 | ||||||||||||||||||||||||
{ | ||||||||||||||||||||||||
code: ` | ||||||||||||||||||||||||
import { render, hydrate } from 'react-dom'; | ||||||||||||||||||||||||
import { renderToNodeStream } from 'react-dom/server'; | ||||||||||||||||||||||||
ReactDOM.render(element, container); | ||||||||||||||||||||||||
ReactDOM.unmountComponentAtNode(container); | ||||||||||||||||||||||||
ReactDOMServer.renderToNodeStream(element); | ||||||||||||||||||||||||
`, | ||||||||||||||||||||||||
settings: { react: { version: '17.999.999' } }, | ||||||||||||||||||||||||
}, | ||||||||||||||||||||||||
// React 18 API | ||||||||||||||||||||||||
{ | ||||||||||||||||||||||||
code: ` | ||||||||||||||||||||||||
import ReactDOM, { createRoot } from 'react-dom/client'; | ||||||||||||||||||||||||
ReactDOM.createRoot(container); | ||||||||||||||||||||||||
const root = createRoot(container); | ||||||||||||||||||||||||
root.unmount(); | ||||||||||||||||||||||||
`, | ||||||||||||||||||||||||
}, | ||||||||||||||||||||||||
{ | ||||||||||||||||||||||||
code: ` | ||||||||||||||||||||||||
import ReactDOM, { hydrateRoot } from 'react-dom/client'; | ||||||||||||||||||||||||
ReactDOM.hydrateRoot(container, <App/>); | ||||||||||||||||||||||||
hydrateRoot(container, <App/>); | ||||||||||||||||||||||||
`, | ||||||||||||||||||||||||
}, | ||||||||||||||||||||||||
{ | ||||||||||||||||||||||||
code: ` | ||||||||||||||||||||||||
import ReactDOMServer, { renderToPipeableStream } from 'react-dom/server'; | ||||||||||||||||||||||||
ReactDOMServer.renderToPipeableStream(<App />, {}); | ||||||||||||||||||||||||
renderToPipeableStream(<App />, {}); | ||||||||||||||||||||||||
`, | ||||||||||||||||||||||||
}, | ||||||||||||||||||||||||
]), | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
invalid: parsers.all([ | ||||||||||||||||||||||||
|
@@ -454,5 +488,93 @@ ruleTester.run('no-deprecated', rule, { | |||||||||||||||||||||||
), | ||||||||||||||||||||||||
], | ||||||||||||||||||||||||
}, | ||||||||||||||||||||||||
{ | ||||||||||||||||||||||||
code: ` | ||||||||||||||||||||||||
import { render } from 'react-dom'; | ||||||||||||||||||||||||
ReactDOM.render(<div></div>, container); | ||||||||||||||||||||||||
`, | ||||||||||||||||||||||||
errors: [ | ||||||||||||||||||||||||
errorMessage( | ||||||||||||||||||||||||
'ReactDOM.render', | ||||||||||||||||||||||||
'18.0.0', | ||||||||||||||||||||||||
'createRoot', | ||||||||||||||||||||||||
'https://reactjs.org/link/switch-to-createroot', | ||||||||||||||||||||||||
{ type: 'ImportDeclaration', line: 2, column: 9 } | ||||||||||||||||||||||||
), | ||||||||||||||||||||||||
errorMessage( | ||||||||||||||||||||||||
'ReactDOM.render', | ||||||||||||||||||||||||
'18.0.0', | ||||||||||||||||||||||||
'createRoot', | ||||||||||||||||||||||||
'https://reactjs.org/link/switch-to-createroot', | ||||||||||||||||||||||||
{ type: 'MemberExpression', line: 3, column: 9 } | ||||||||||||||||||||||||
), | ||||||||||||||||||||||||
], | ||||||||||||||||||||||||
}, | ||||||||||||||||||||||||
{ | ||||||||||||||||||||||||
code: ` | ||||||||||||||||||||||||
import { hydrate } from 'react-dom'; | ||||||||||||||||||||||||
ReactDOM.hydrate(<div></div>, container); | ||||||||||||||||||||||||
`, | ||||||||||||||||||||||||
errors: [ | ||||||||||||||||||||||||
errorMessage( | ||||||||||||||||||||||||
'ReactDOM.hydrate', | ||||||||||||||||||||||||
'18.0.0', | ||||||||||||||||||||||||
'hydrateRoot', | ||||||||||||||||||||||||
'https://reactjs.org/link/switch-to-createroot', | ||||||||||||||||||||||||
{ type: 'ImportDeclaration', line: 2, column: 9 } | ||||||||||||||||||||||||
), | ||||||||||||||||||||||||
errorMessage( | ||||||||||||||||||||||||
'ReactDOM.hydrate', | ||||||||||||||||||||||||
'18.0.0', | ||||||||||||||||||||||||
'hydrateRoot', | ||||||||||||||||||||||||
'https://reactjs.org/link/switch-to-createroot', | ||||||||||||||||||||||||
{ type: 'MemberExpression', line: 3, column: 9 } | ||||||||||||||||||||||||
), | ||||||||||||||||||||||||
], | ||||||||||||||||||||||||
}, | ||||||||||||||||||||||||
{ | ||||||||||||||||||||||||
code: ` | ||||||||||||||||||||||||
import { unmountComponentAtNode } from 'react-dom'; | ||||||||||||||||||||||||
ReactDOM.unmountComponentAtNode(container); | ||||||||||||||||||||||||
`, | ||||||||||||||||||||||||
errors: [ | ||||||||||||||||||||||||
errorMessage( | ||||||||||||||||||||||||
'ReactDOM.unmountComponentAtNode', | ||||||||||||||||||||||||
'18.0.0', | ||||||||||||||||||||||||
'root.unmount', | ||||||||||||||||||||||||
'https://reactjs.org/link/switch-to-createroot', | ||||||||||||||||||||||||
{ type: 'ImportDeclaration', line: 2, column: 9 } | ||||||||||||||||||||||||
), | ||||||||||||||||||||||||
errorMessage( | ||||||||||||||||||||||||
'ReactDOM.unmountComponentAtNode', | ||||||||||||||||||||||||
'18.0.0', | ||||||||||||||||||||||||
'root.unmount', | ||||||||||||||||||||||||
'https://reactjs.org/link/switch-to-createroot', | ||||||||||||||||||||||||
{ type: 'MemberExpression', line: 3, column: 9 } | ||||||||||||||||||||||||
), | ||||||||||||||||||||||||
], | ||||||||||||||||||||||||
}, | ||||||||||||||||||||||||
{ | ||||||||||||||||||||||||
code: ` | ||||||||||||||||||||||||
import { renderToNodeStream } from 'react-dom/server'; | ||||||||||||||||||||||||
ReactDOMServer.renderToNodeStream(element); | ||||||||||||||||||||||||
`, | ||||||||||||||||||||||||
errors: [ | ||||||||||||||||||||||||
errorMessage( | ||||||||||||||||||||||||
'ReactDOMServer.renderToNodeStream', | ||||||||||||||||||||||||
'18.0.0', | ||||||||||||||||||||||||
'renderToPipeableStream', | ||||||||||||||||||||||||
'https://reactjs.org/docs/react-dom-server.html#rendertonodestream', | ||||||||||||||||||||||||
{ type: 'ImportDeclaration', line: 2, column: 9 } | ||||||||||||||||||||||||
), | ||||||||||||||||||||||||
errorMessage( | ||||||||||||||||||||||||
'ReactDOMServer.renderToNodeStream', | ||||||||||||||||||||||||
'18.0.0', | ||||||||||||||||||||||||
'renderToPipeableStream', | ||||||||||||||||||||||||
'https://reactjs.org/docs/react-dom-server.html#rendertonodestream', | ||||||||||||||||||||||||
{ type: 'MemberExpression', line: 3, column: 9 } | ||||||||||||||||||||||||
), | ||||||||||||||||||||||||
], | ||||||||||||||||||||||||
}, | ||||||||||||||||||||||||
]), | ||||||||||||||||||||||||
}); |
Uh oh!
There was an error while loading. Please reload this page.