gajus / eslint-plugin-jsdoc

JSDoc specific linting rules for ESLint.
Other
1.07k stars 155 forks source link

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

Closed runarberg closed 1 week ago

runarberg commented 1 week 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 1 week ago

Sorry, I didn’t mean to close this.

brettz9 commented 1 week 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 1 week 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