gajus / eslint-plugin-jsdoc

JSDoc specific linting rules for ESLint.
Other
1.1k stars 160 forks source link

flat/recommended-typescript should default "no-types" to "off" in JS files #1253

Closed runarberg closed 4 months ago

runarberg commented 4 months ago

Motivation

I’m writing typescript in JS using JSDoc. When I finished my initial setup and was ready to push I got a syntax error in my jsdoc/valid-types because I was using template literal types. So I switched my mode from jsdoc to typescript like I though I was supposed to and reran the linter. However, I accidentally (out of habit) reran it with --fix which automatically stripped all my type definitions because of the no-types rule.

Current behavior

The jsdoc/no-types rule automatically marks all types as non-passing regardless of whether they are in a .ts or a .js file. This is a dangerous behavior when they are auto-included in the latter case since the @type is the only way to annotate types in .js files

Desired behavior

The flat config for flat/recommended-typescript should have something like a:

{
  files: [**/*.js],
  rules: {
    "jsdoc/no-types": "off",
  },
},

To prevent this rule from destroying all your type definitions.

Alternatives considered

You should at least warn users heavily in the docs what switching modes can do to your code.

runarberg commented 4 months ago

Sorry, I didn’t mean to close this.

brettz9 commented 4 months ago

The behavior recommended by the docs for JavaScript files is to use one of the recommended-typescript-flavor configs (e.g., flat/recommended-typescript-flavor).

There is already a request for a config to combine the file formats and handle them automatically (#1101 ), so I think we can close this issue. Feel free to comment further if not.

runarberg commented 4 months ago

Turns out my problem wasn’t in the mode actually. Template literal types were simply unimplemented: https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser/issues/166