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

How do you allow PascalCase functions not to be linted by eslint? #1284

Closed
sauldeleon opened this issue Feb 7, 2022 · 4 comments
Closed
Labels
question Further information is requested

Comments

@sauldeleon
Copy link

sauldeleon commented Feb 7, 2022

Hi!

First of all, this is not an issue. Mark as question.

I have cloned your repo and tried to apply the same eslint configuration, which is awesome.

The problem I am facing is my PascalCase functions are being marked as errors by eslint, due to the following rule

      {
        selector: 'variable',
        format: ['camelCase'],
        leadingUnderscore: 'allow',
      },
      {
        selector: ['function'],
        format: ['camelCase'],
      },

So I had to add this in each project configuration:

    "@typescript-eslint/naming-convention": [
      "error",
      {
        "selector": ["function"],
        "format": ["camelCase", "PascalCase"]
      }
    ]

But you dont have anything like this. I was wondering... how did you make this work??

thanks in advance!

@belgattitude
Copy link
Owner

Haha, yes it's unclear for me too.

Basically, on packages and apps I extend from a root base ./eslintrc.base.js. We don't have to, but that's how I felt as a first step.

A bit like this.

.
├── apps
│   └── web-app
│       └── .eslintrc.js   (extends eslint.base: adds react, nextjs, rtl...)
├── .eslint.base.js        (base config to extend: just typescript and jest)
├── .prettierignore        (prettier ignored files)
└── .prettierrc.js         (prettier global configuration)

This base includes generic rules and plugins that are valid for typescript typescript+jest project on which each extended config adds plugins for react, storybook, nextjs.

So you can make the change there.

Note that I added a similar exception for .tsx (I use tsx rather than ts, it allows to disambiguate if it's just plain ts or react).

See here for example:

{
files: ['*.tsx'],
rules: {
'@typescript-eslint/naming-convention': [
'warn',
{
selector: 'variable',
format: ['camelCase', 'PascalCase'],
},
{
selector: ['function'],
format: ['camelCase', 'PascalCase'],
},
{
selector: 'parameter',
format: ['camelCase', 'PascalCase'],
leadingUnderscore: 'allow',
},
],
},
},

The comment is not totally accurate in this file. Just realized :)

You can find some initial doc here about the eslint setup: https://github.com/belgattitude/nextjs-monorepo-example/blob/main/docs/about-linters.md

Let me know if it clears up the weird stuffs :)

@belgattitude belgattitude added the question Further information is requested label Feb 8, 2022
@belgattitude
Copy link
Owner

Just a afterward thought ?

The problem I am facing is my PascalCase functions are being marked as errors by eslint, due to the following rule

You mean react functional components ?

@sauldeleon
Copy link
Author

sauldeleon commented Feb 8, 2022

YEs! that is exactly where I am facing the issues. For example, defining a simple Button component

export const Button = () => <button>Button Text</ button>

Button is marked as error by eslint, because it is not camelCase

I think the problem is the code snippet you places about the .tsx exception, which makes total sense...

I will try again later in my code!

@sauldeleon
Copy link
Author

@belgattitude just in case, I think I can close this as it is fixed and more than solved.

Also, I have an initial configuration for VScode environment, but on a separate repo with a ton of modifications.

I want to clone your last version and add my configuration to check everything is working as expected

Thanks again!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

2 participants