typescript-eslint / typescript-eslint

:sparkles: Monorepo for all the tooling which enables ESLint to support TypeScript
https://typescript-eslint.io
Other
14.7k stars 2.65k forks source link

Import Enum => Parsing error: The keyword 'export' is reserved (quasar:eslint) #8066

Closed zN3utr4l closed 5 months ago

zN3utr4l commented 5 months ago

Before You File a Bug Report Please Confirm You Have Done The Following...

Playground Link

quasar proj

Repro Code

// shared/enums.ts
export enum Roles {
  Testa = '1',
  Testb = '2'
}

// src/pages/component.vue

<template>
</template>
<script setup lang="ts">
     import { Roles } from '@shared/enums'
</script>

ESLint Config

module.exports = {
  // https://eslint.org/docs/user-guide/configuring#configuration-cascading-and-hierarchy
  // This option interrupts the configuration hierarchy at this file
  // Remove this if you have an higher level ESLint config file (it usually happens into a monorepos)
  root: true,

  // https://eslint.vuejs.org/user-guide/#how-to-use-a-custom-parser
  // Must use parserOptions instead of "parser" to allow vue-eslint-parser to keep working
  // `parser: 'vue-eslint-parser'` is already included with any 'plugin:vue/**' config and should be omitted
  parserOptions: {
    parser: require.resolve('@typescript-eslint/parser'),
    extraFileExtensions: ['.vue']
  },

  env: {
    browser: true,
    es2021: true,
    node: true,
    'vue/setup-compiler-macros': true
  },

  // Rules order is important, please avoid shuffling them
  extends: [
    // Base ESLint recommended rules
    // 'eslint:recommended',

    // https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin#usage
    // ESLint typescript rules
    'plugin:@typescript-eslint/recommended',

    // Uncomment any of the lines below to choose desired strictness,
    // but leave only one uncommented!
    // See https://eslint.vuejs.org/rules/#available-rules
    'plugin:vue/vue3-essential', // Priority A: Essential (Error Prevention)
    // 'plugin:vue/vue3-strongly-recommended', // Priority B: Strongly Recommended (Improving Readability)
    // 'plugin:vue/vue3-recommended', // Priority C: Recommended (Minimizing Arbitrary Choices and Cognitive Overhead)

    'standard'

  ],

  plugins: [
    // required to apply rules which need type information
    '@typescript-eslint',

    // https://eslint.vuejs.org/user-guide/#why-doesn-t-it-work-on-vue-files
    // required to lint *.vue files
    'vue'

  ],

  globals: {
    ga: 'readonly', // Google Analytics
    cordova: 'readonly',
    __statics: 'readonly',
    __QUASAR_SSR__: 'readonly',
    __QUASAR_SSR_SERVER__: 'readonly',
    __QUASAR_SSR_CLIENT__: 'readonly',
    __QUASAR_SSR_PWA__: 'readonly',
    process: 'readonly',
    Capacitor: 'readonly',
    chrome: 'readonly'
  },

  // add your custom rules here
  rules: {
    camelcase: ['warn', { properties: 'never' }],
    // allow async-await
    'generator-star-spacing': 'off',
    // allow paren-less arrow functions
    'arrow-parens': 'off',
    'one-var': 'off',
    'no-void': 'off',
    'multiline-ternary': 'off',

    'import/first': 'off',
    'import/namespace': 'error',
    'import/default': 'error',
    'import/export': 'error',
    'import/extensions': 'off',
    'import/no-unresolved': 'off',
    'import/no-extraneous-dependencies': 'off',

    // The core 'import/named' rules
    // does not work with type definitions
    'import/named': 'off',

    'prefer-promise-reject-errors': 'off',

    quotes: ['warn', 'single', { avoidEscape: true }],

    // this rule, if on, would require explicit return type on the `render` function
    '@typescript-eslint/explicit-function-return-type': 'off',

    // in plain CommonJS modules, you can't use `import foo = require('foo')` to pass this rule, so it has to be disabled
    '@typescript-eslint/no-var-requires': 'off',

    // The core 'no-unused-vars' rules (in the eslint:recommended ruleset)
    // does not work with type definitions
    'no-unused-vars': 'off',

    // allow debugger during development only
    'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
  }
}

tsconfig

{
  "extends": "@quasar/app-vite/tsconfig-preset",
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@shared/*": [
        "../shared/*"
      ],
      "@boot/*": [
        "src/boot"
      ],
      "@components/*": [
        "src/components/*"
      ],
      "@forms/*": [
        "src/components/forms/*"
      ],
      "@services/*": [
        "src/services/*"
      ],
      "@socket/*": [
        "src/socket/*"
      ],
      "@stores/*": [
        "src/stores/*"
      ],
      "@api/*": [
        "src/api/*"
      ],
      "@utils/*": [
        "src/utils/*"
      ],
      "@layouts": [
        "src/layouts/*"
      ],
      "@pages": [
        "src/pages/*"
      ],
    }
  },
}

Expected Result

no error

Actual Result

App • LINT • Error:

D:\Repository\test\shared\enums.ts 1:1 error Parsing error: The keyword 'export' is reserved

✖ 1 problem (1 error, 0 warnings)

App • LINT • Error:

13:29:26 [vite] Internal server error: D:\Repository\test\shared\enums.ts 1:1 error Parsing error: The keyword 'export' is reserved

✖ 1 problem (1 error, 0 warnings)

Plugin: quasar:eslint File: D:/Repository/test/shared/enums.ts at formatError (D:\Repository\test\client\node_modules\vite\dist\node\chunks\dep-6e2fe41e.js:39080:46) at TransformContext.error (D:\Repository\test\client\node_modules\vite\dist\node\chunks\dep-6e2fe41e.js:39076:19) at TransformContext.transform (D:\Repository\test\client\node_modules\@quasar\app-vite\lib\plugins\vite.eslint.js:44:14) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async Object.transform (D:\Repository\test\client\node_modules\vite\dist\node\chunks\dep-6e2fe41e.js:39317:30) at async doTransform (D:\Repository\test\client\node_modules\vite\dist\node\chunks\dep-6e2fe41e.js:50043:29)

Additional Info

I think I have an error, described in this issue #1464 but not with the same resolution

bradzacher commented 5 months ago
zN3utr4l commented 5 months ago
  • please fill out the title - it's an important part of the issue template
  • please provide an isolated reproduction - ideally in our playground.

    • This is an important step in you debugging your setup - isolating the problem by trimming away other tools and configs.
    • If you can't distill it down into the playground - then please provide an isolated repository that reproduces the error.
  • it looks like you're using vue - we don't support vue so you might be better hopping over to the relevant vue repo to ask them for proper support.

I added the missing things, but in the playground (https://stackblitz.com/edit/quasarframework-8v5duz?file=src%2Fpages%2FIndexPage.vue) the error does not show

bradzacher commented 5 months ago

the error does not show

That implies that it's something with your local setup then, right? You'll need to work backwards from your setup to determine what the problem is. We can't help you if we can't reproduce your issue.