mdx-js / eslint-mdx

ESLint Parser/Plugin for MDX
https://npmjs.org/eslint-plugin-mdx
MIT License
263 stars 32 forks source link

Research Spike: ESLint 9 compatibility #477

Open ChristianMurphy opened 1 year ago

ChristianMurphy commented 1 year ago

Initial checklist

Problem

ESLint 9 is changing the plugin API: https://eslint.org/blog/2023/09/preparing-custom-rules-eslint-v9/ There may be changes needed in ESLint-MDX

Solution

Check to see if any changed/removed APIs are used, migrate if needed.

Alternatives

JounQin commented 10 months ago
image

I don't see how to test eslint@9 at this point.

ChristianMurphy commented 9 months ago

https://github.com/eslint/eslint/releases/tag/v9.0.0-alpha.0

remcohaszing commented 9 months ago

Since the new flat config no longer resolves files, and supports eslint.config.mjs, I think ESLint MDX integrations can switch to ESM.

JounQin commented 9 months ago

Since the new flat config no longer resolves files, and supports eslint.config.mjs, I think ESLint MDX integrations can switch to ESM.

I'd like to keep dual. Legacy .eslintrc configs are still supported.

ChristianMurphy commented 9 months ago

Legacy configuration are deprecated https://eslint.org/blog/2023/12/eslint-v9.0.0-alpha.0-released/

There are far less quirks and hacks packaging as pure ESM, rather than dealing with dual packaging limitations.

JounQin commented 9 months ago

https://github.com/mdx-js/eslint-mdx/issues/496

@ChristianMurphy

worker.mts will bypass all the limitations.

They're deprecated but still supported. I don't want to break anyone's current workflow before they're ready including myself.

For example, compatibility with other plugins.

https://github.com/import-js/eslint-plugin-import/issues/2948#issuecomment-1872563600

tianyingchun commented 4 months ago

What's the plan?

karlhorky commented 2 months ago

If you don't use Markdown, then the current version eslint-plugin-mdx@3.1.5 appears to work in ESLint v9 by copying the flat config which is exported:

eslint.config.js or eslint.config.mjs

import eslintMdx from 'eslint-mdx';
import mdx from 'eslint-plugin-mdx';

/** @type {import('eslint').Linter.FlatConfig} */
const config = [
  {
    files: ['**/*.mdx'],
    languageOptions: {
      sourceType: 'module',
      ecmaVersion: 'latest',
      parser: eslintMdx,
      globals: {
        React: false,
      },
    },
    plugins: {
      mdx,
    },
    rules: {
      'mdx/remark': 'warn',
      'no-unused-expressions': 'error',
      'react/react-in-jsx-scope': 0,
    },
  },
];

export default config;
tianyingchun commented 2 months ago

i have integrating mdx into a plugin it can works fine for eslint V9 https://github.com/hyperse-io/eslint-config-hyperse

tianyingchun commented 1 month ago

what's plan for ESLint V9, i used it in local, it seems that everything works fine except we need to bump eslint-plugin-markdown to latest version (5.1.0) for now it used "eslint-plugin-markdown": "^3.0.1"?

reduckted commented 1 month ago

ESLint v8 is EOL in one month (https://eslint.org/version-support/). Would you consider dropping v8 support to make it easier to migrate this plugin to v9?

If anyone really needs v8 support, they can continue to use the current version of this plugin.

remcohaszing commented 3 weeks ago

@eslint/markdown (formerly eslint-plugin-markdown 6.0.0 is ESM only. I think it’s fair to drop CJS support in other ESLint plugins as well.

tianyingchun commented 2 weeks ago

it's time to drop cjs +1 :)