vercel / turborepo

Build system optimized for JavaScript and TypeScript, written in Rust
https://turbo.build/repo
MIT License
26.47k stars 1.84k forks source link

Docs: eslint v9 #7909

Closed ramirezj closed 1 day ago

ramirezj commented 7 months ago

What is the improvement or update you wish to see?

Documentation on supporting users who have migrated to the new eslint.config.js config file or who want to continue to use estlintrc but run >= v9 of eslint

Aiming to take a look at this myself, but flagging in case someone has more time to spend on this or a solution already

Is there any context that might help us understand?

With the recent v9 release of eslint, it now uses flat config files by default and support for the deprecated eslintrc config file will be removed entirely in v10

Does the docs page already exist? Please link to it.

https://turbo.build/repo/docs/handbook/linting/eslint

anthonyshew commented 7 months ago

Would definitely appreciate help on this one! I just explored this a little bit and it looks like this will be a net-positive change for Turborepo users, but haven't had time to explore figuring out the new syntax.

ramirezj commented 7 months ago

Digging in between other work, FYI

ch-o-min commented 5 months ago

any change?

MickL commented 5 months ago

Is there any workaround for eslint configs like the one from Turbo that dont have a flat config yet? :)

goosewobbler commented 5 months ago

@MickL ESLint provide some tooling for this:

https://github.com/eslint/eslintrc#usage-esm https://eslint.org/docs/latest/use/configure/migration-guide https://eslint.org/blog/2024/05/eslint-configuration-migrator

ChurroC commented 4 months ago

I recently created my own solution that works pretty well. I just created a new project and just ported over the eslint in this repo: https://github.com/ChurroC/EslintV9-with-TurboPack. This works for me but it is pretty sketch currently.

controversial commented 3 months ago

The following flat config works great for me:

import turboPlugin from 'eslint-plugin-turbo';

export default {
  name: 'eslint-config-turbo (recreated flat)',

  plugins: {
    turbo: { rules: turboPlugin.rules },
  },

  rules: {
    'turbo/no-undeclared-env-vars': 'error',
  },
}
Merieli commented 3 months ago
import turboPlugin from 'eslint-plugin-turbo';

export default {
  name: 'eslint-config-turbo (recreated flat)',

  plugins: {
    turbo: { rules: turboPlugin.rules },
  },

  rules: {
    'turbo/no-undeclared-env-vars': 'error',
  },
}

I'm not sure I understood your configuration @controversial, would this export file have to be in the root of the monorepo?

controversial commented 3 months ago

@Merieli The exported object is one configuration object

A minimal standalone eslint.config.js would live at the root of the monorepo and export an array containing this configuration object:

// eslint.config.js

import turboPlugin from 'eslint-plugin-turbo';

export default [
  // ... more configuration objects ...

  {
    name: 'eslint-config-turbo (recreated flat)',
    plugins: {
      turbo: { rules: turboPlugin.rules },
    },
    rules: {
      'turbo/no-undeclared-env-vars': 'error',
    },
  },
];

You’d usually include multiple such configuration objects in the top-level array

Merieli commented 3 months ago

@controversial Okay, understand... But where you installed the dependencie? Has any repository to reproduce? I am obtain erros with this config, because my linter in files do'nt work and the script to lint throw an error as bellow:

npm error Lifecycle script `lint` failed with error:
│ npm error code 1
│ npm error path /home/..../packages/sdk
│ npm error workspace @hub/sdk@0.0.0
│ npm error location /home/.../packages/sdk
│ npm error command failed
│ npm error command sh -c eslint .

Even though eslint runs and finds errors in the files, there is something wrong with my config.

controversial commented 3 months ago

The configuration example I shared depends on having at least eslint@9 and eslint-plugin-turbo@2 installed.

I think your error is likely unrelated to eslint-plugin-turbo and therefore off topic for this issue.

SPAHI4 commented 4 weeks ago

I'm new to turborepo, should I have a single flat config file in the root dir, or a shared config that would be extended in every package like examples for the old config?

anthonyshew commented 4 weeks ago

We still recommend having a configuration file in each package for better cache hit ratios.

appano1 commented 3 weeks ago

https://github.com/vercel/turborepo/blob/3d7509284256f2f12233716dede9a964a03c7c28/packages/eslint-plugin-turbo/lib/configs/recommended.ts#L13-L19

Because of the config.settings above, I did this. It works pretty well.

import turbo from 'eslint-plugin-turbo';
/** @type {import('eslint').Linter.Config} */
export default {
  plugins: {
    turbo,
  },
  rules: {
    ...turbo.configs.recommended.rules,
  },
  settings: {
    ...turbo.configs.recommended.settings,
  },
};
rinart73 commented 6 days ago

So.. in the end is there a working Turborepo starter with flat ESLint config that uses multiple files (as recommended by Turborepo team) instead of root global config? Or it's just not possible? I'd like to do everything properly if possible.

ChurroC commented 5 days ago

So.. in the end is there a working Turborepo starter with flat ESLint config that uses multiple files (as recommended by Turborepo team) instead of root global config? Or it's just not possible? I'd like to do everything properly if possible.

Above I had a template for flat eslint setup that uses multiple files. This was my eslint package folder: https://github.com/ChurroC/EslintV9-with-TurboPack/tree/main/packages/eslint-config.

anthonyshew commented 4 days ago

Just want to update quick:

Thanks for the patience everyone!

anthonyshew commented 1 day ago

https://github.com/vercel/turborepo/pull/9515 updates READMEs and docs!

Thanks, everyone!