Skip to content
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

[ESLint] add no-typos rule to eslint #26650

Merged
merged 5 commits into from
Jul 25, 2021
Merged

Conversation

kaykdm
Copy link
Contributor

@kaykdm kaykdm commented Jun 27, 2021

closes: #20527

This rule checks whether the declared methods related to Next.js do not contain any typos (casing and misspell)
It makes sure that the following methods have no typos:

getStaticProps
getStaticPaths
getServerSideProps

I am using edit distance to check a typo in given name, and currently setting threshold to 1 which means it will detect a typo when a given name is one operation away from the correct one.

// 0 is the exact match
const THRESHOLD = 1

example (when threshold is set to 1)
⭕ (will detect typos)
getServurSideProps is 1
getServersideProps is 1
getStatisProps is 1
getStatisPaths is 1


getServerSidePropsss is 2
getserversideProps is 2
getstaticprops is 2
getstatisPath is 3

Screen Shot 2021-06-28 at 9 05 48

FYI

Feature

  • Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR.
  • Related issues linked using fixes #number
  • Integration tests added
  • Documentation added
  • Telemetry added. In case of a feature if it's used or not.

@kaykdm kaykdm changed the title add no-typos rule to eslint [ESLint] add no-typos rule to eslint Jun 27, 2021
@ijjk

This comment has been minimized.

Copy link
Member

@leerob leerob left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is awesome!

@ijjk

This comment has been minimized.

Copy link
Collaborator

@housseindjirdeh housseindjirdeh left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is awesome, thank you!

All LGTM 😍

| ✔️ | [next/no-sync-scripts](https://nextjs.org/docs/messages/no-sync-scripts) | Forbid synchronous scripts |
| ✔️ | [next/no-title-in-document-head](https://nextjs.org/docs/messages/no-title-in-document-head) | Disallow using <title> with Head from next/document |
| ✔️ | [next/no-unwanted-polyfillio](https://nextjs.org/docs/messages/no-unwanted-polyfillio) | Prevent duplicate polyfills from Polyfill.io |
| ✔️ | next/no-typos | Ensure no typos were made declaring [Next.js's data fetching function](https://nextjs.org/docs/basic-features/data-fetching) |
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For all the other rules, we've added message pages under https://nextjs.org/docs/messages/, but since this one is pretty self-explanatory we probably don't need one :)

# Conflicts:
#	packages/eslint-plugin-next/lib/index.js
@ijjk
Copy link
Member

ijjk commented Jul 25, 2021

Stats from current PR

Default Build (Increase detected ⚠️)
General Overall decrease ✓
vercel/next.js canary kaykdm/next.js eslint-no-typos-rule Change
buildDuration 14.5s 14.9s ⚠️ +395ms
buildDurationCached 3.4s 3.2s -189ms
nodeModulesSize 49.5 MB 49.5 MB -1 B
Page Load Tests Overall increase ✓
vercel/next.js canary kaykdm/next.js eslint-no-typos-rule Change
/ failed reqs 0 0
/ total time (seconds) 2.508 2.506 0
/ avg req/sec 997.01 997.63 +0.62
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.368 1.36 -0.01
/error-in-render avg req/sec 1828.03 1838.59 +10.56
Client Bundles (main, webpack, commons)
vercel/next.js canary kaykdm/next.js eslint-no-typos-rule Change
359.HASH.js gzip 2.96 kB 2.96 kB
745.HASH.js gzip 180 B 180 B
framework-HASH.js gzip 42.2 kB 42.2 kB
main-HASH.js gzip 21 kB 21 kB
webpack-HASH.js gzip 1.53 kB 1.53 kB
Overall change 67.9 kB 67.9 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary kaykdm/next.js eslint-no-typos-rule Change
polyfills-HASH.js gzip 31.1 kB 31.1 kB
Overall change 31.1 kB 31.1 kB
Client Pages
vercel/next.js canary kaykdm/next.js eslint-no-typos-rule Change
_app-HASH.js gzip 803 B 803 B
_error-HASH.js gzip 3.06 kB 3.06 kB
amp-HASH.js gzip 554 B 554 B
css-HASH.js gzip 329 B 329 B
dynamic-HASH.js gzip 2.52 kB 2.52 kB
head-HASH.js gzip 2.28 kB 2.28 kB
hooks-HASH.js gzip 903 B 903 B
image-HASH.js gzip 5.63 kB 5.63 kB
index-HASH.js gzip 261 B 261 B
link-HASH.js gzip 1.66 kB 1.66 kB
routerDirect..HASH.js gzip 319 B 319 B
script-HASH.js gzip 387 B 387 B
withRouter-HASH.js gzip 320 B 320 B
bb14e60e810b..30f.css gzip 125 B 125 B
Overall change 19.1 kB 19.1 kB
Client Build Manifests
vercel/next.js canary kaykdm/next.js eslint-no-typos-rule Change
_buildManifest.js gzip 489 B 489 B
Overall change 489 B 489 B
Rendered Page Sizes
vercel/next.js canary kaykdm/next.js eslint-no-typos-rule Change
index.html gzip 531 B 531 B
link.html gzip 542 B 542 B
withRouter.html gzip 525 B 525 B
Overall change 1.6 kB 1.6 kB

Webpack 4 Mode (Increase detected ⚠️)
General Overall decrease ✓
vercel/next.js canary kaykdm/next.js eslint-no-typos-rule Change
buildDuration 11.9s 11.7s -188ms
buildDurationCached 4.6s 4.5s -115ms
nodeModulesSize 49.5 MB 49.5 MB -1 B
Page Load Tests Overall increase ✓
vercel/next.js canary kaykdm/next.js eslint-no-typos-rule Change
/ failed reqs 0 0
/ total time (seconds) 2.542 2.39 -0.15
/ avg req/sec 983.4 1046.17 +62.77
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.398 1.338 -0.06
/error-in-render avg req/sec 1788.48 1868.14 +79.66
Client Bundles (main, webpack, commons)
vercel/next.js canary kaykdm/next.js eslint-no-typos-rule Change
17.HASH.js gzip 2.98 kB 2.98 kB
18.HASH.js gzip 185 B 185 B
677f882d2ed8..HASH.js gzip 13.8 kB 13.8 kB
framework.HASH.js gzip 41.9 kB 41.9 kB
main-HASH.js gzip 8.4 kB 8.4 kB
webpack-HASH.js gzip 1.22 kB 1.22 kB
Overall change 68.5 kB 68.5 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary kaykdm/next.js eslint-no-typos-rule Change
polyfills-HASH.js gzip 31.3 kB 31.3 kB
Overall change 31.3 kB 31.3 kB
Client Pages
vercel/next.js canary kaykdm/next.js eslint-no-typos-rule Change
_app-HASH.js gzip 791 B 791 B
_error-HASH.js gzip 3.76 kB 3.76 kB
amp-HASH.js gzip 552 B 552 B
css-HASH.js gzip 333 B 333 B
dynamic-HASH.js gzip 2.71 kB 2.71 kB
head-HASH.js gzip 2.97 kB 2.97 kB
hooks-HASH.js gzip 911 B 911 B
index-HASH.js gzip 231 B 231 B
link-HASH.js gzip 1.64 kB 1.64 kB
routerDirect..HASH.js gzip 298 B 298 B
script-HASH.js gzip 3.02 kB 3.02 kB
withRouter-HASH.js gzip 294 B 294 B
e025d2764813..52f.css gzip 125 B 125 B
Overall change 17.6 kB 17.6 kB
Client Build Manifests
vercel/next.js canary kaykdm/next.js eslint-no-typos-rule Change
_buildManifest.js gzip 500 B 500 B
Overall change 500 B 500 B
Rendered Page Sizes
vercel/next.js canary kaykdm/next.js eslint-no-typos-rule Change
index.html gzip 576 B 576 B
link.html gzip 588 B 588 B
withRouter.html gzip 569 B 569 B
Overall change 1.73 kB 1.73 kB
Commit: eeb486a

Copy link
Member

@ijjk ijjk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added rule and tests look great, we might want to consider increasing the threshold but starting at 1 seems good, thanks for the PR!

@ijjk ijjk merged commit 3b2732b into vercel:canary Jul 25, 2021
flybayer pushed a commit to blitz-js/next.js that referenced this pull request Aug 19, 2021
* add no-typos rule to eslint

* return early when function name is correct

* Handle null decl.type

* update check

Co-authored-by: JJ Kasper <[email protected]>
@vercel vercel locked as resolved and limited conversation to collaborators Jan 28, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Detect typos for GS(S)P
4 participants