Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(eslint-plugin): [consistent-indexed-object-style] do not autofix if interface has extends #3009

Merged
merged 2 commits into from Feb 28, 2021

Conversation

armano2
Copy link
Member

@armano2 armano2 commented Feb 7, 2021

Disable reporting when interface has extends

fixes #3007

@armano2 armano2 added the package: eslint-plugin Issues related to @typescript-eslint/eslint-plugin label Feb 7, 2021
@typescript-eslint
Copy link
Contributor

Thanks for the PR, @armano2!

typescript-eslint is a 100% community driven project, and we are incredibly grateful that you are contributing to that community.

The core maintainers work on this in their personal time, so please understand that it may not be possible for them to review your work immediately.

Thanks again!


🙏 Please, if you or your company is finding typescript-eslint valuable, help us sustain the project by sponsoring it transparently on https://opencollective.com/typescript-eslint. As a thank you, your profile/company logo will be added to our main README which receives thousands of unique visitors per day.

@armano2 armano2 added the bug Something isn't working label Feb 7, 2021
@codecov
Copy link

codecov bot commented Feb 7, 2021

Codecov Report

Merging #3009 (200b97d) into master (5e2a993) will increase coverage by 0.00%.
The diff coverage is 100.00%.

@@           Coverage Diff           @@
##           master    #3009   +/-   ##
=======================================
  Coverage   92.87%   92.87%           
=======================================
  Files         314      314           
  Lines       10670    10673    +3     
  Branches     3026     3028    +2     
=======================================
+ Hits         9910     9913    +3     
  Misses        344      344           
  Partials      416      416           
Flag Coverage Δ
unittest 92.87% <100.00%> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files Coverage Δ
...lugin/src/rules/consistent-indexed-object-style.ts 90.00% <100.00%> (+0.63%) ⬆️

Copy link
Member

@bradzacher bradzacher left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this doesn't just prevent a fix - this also prevents reporting.
I don't think that's correct.

We can still report and leave it to the user to fix.

Or we can just fix it to an intersection type:

interface B extends A { [i: string]: number }
// fix to
type B = A & Record<string, number>;

@bradzacher bradzacher added the awaiting response Issues waiting for a reply from the OP or another party label Feb 8, 2021
@armano2
Copy link
Member Author

armano2 commented Feb 8, 2021

we can't really fix this

interface B extends A { [i: string]: number }
// fix to
type B = A & Record<string, number>;

this is not same code, in many cases it may behave differently


type TypeA = Record<string, null>

interface TypeB extends TypeA {
	[i: string]: number
}

type TypeC = TypeA & Record<string, number>;

TypeB - is going to report error Type 'number' is not assignable to type 'null'.(2430)
TypeC - there is no error reported

https://www.typescriptlang.org/play?#code/C4TwDgpgBAKuEEEoF4oCUIGMD2AnAJgDwDOwuAlgHYDmANFJQK4A2zAfALABQ3VwEuAGYBDTNDiQAQlAgAPfpXzFY8JAG9uASADa5AFxRSFGgF0DTALYAjAdwC+3bqEgrIAYRSvEUAGToseERGVHQMjNYCbADc3EA


i updated PR title

@armano2 armano2 changed the title fix(eslint-plugin): [consistent-indexed-object-style] do not fix if interface has extends fix(eslint-plugin): [consistent-indexed-object-style] do not report if interface has extends Feb 8, 2021
@armano2 armano2 removed the awaiting response Issues waiting for a reply from the OP or another party label Feb 8, 2021
@bradzacher
Copy link
Member

I think we should still report on this and have the user figure out the best way to action.
It's not going to be clear to most people why this case isn't covered, and it'll look like a bug in the rule.

We can document it in the rule docs, but most people don't read those too deeply...

@armano2
Copy link
Member Author

armano2 commented Feb 8, 2021

there is one more case that can cause issues, when interface has more than one extends

interface TypeB extends TypeA, TypeC {
	[i: string]: number
}

@armano2
Copy link
Member Author

armano2 commented Feb 14, 2021

I think we should still report on this and have the user figure out the best way to action.

ok, just changed it

@armano2 armano2 force-pushed the fix/consistent-indexed-object-style-extends branch from 82ba3f9 to d723190 Compare February 14, 2021 18:46
@armano2 armano2 force-pushed the fix/consistent-indexed-object-style-extends branch from d723190 to 200b97d Compare February 27, 2021 17:40
@bradzacher bradzacher changed the title fix(eslint-plugin): [consistent-indexed-object-style] do not report if interface has extends fix(eslint-plugin): [consistent-indexed-object-style] do not autofix if interface has extends Feb 28, 2021
Copy link
Member

@bradzacher bradzacher left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks!

This was referenced Mar 17, 2021
mergify bot pushed a commit to cdklabs/jsii-docgen that referenced this pull request Mar 18, 2021
…#284)

Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 4.15.0 to 4.18.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/typescript-eslint/typescript-eslint/releases"><code>@​typescript-eslint/parser's releases</code></a>.</em></p>
<blockquote>
<h2>v4.18.0</h2>
<h1><a href="https://github.com/typescript-eslint/typescript-eslint/compare/v4.17.0...v4.18.0">4.18.0</a> (2021-03-15)</h1>
<h3>Bug Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [explicit-module-boundary-types] fixes <a href="https://github.com/typescript-eslint/typescript-eslint/issues/2864">#2864</a> related to functions in nested object properties (<a href="https://github.com/typescript-eslint/typescript-eslint/issues/3178">#3178</a>) (<a href="https://github.com/typescript-eslint/typescript-eslint/commit/55e1fbaca985b500cad1cc9ec25717b18cf5a17b">55e1fba</a>)</li>
<li><strong>eslint-plugin:</strong> [no-extran-class] allowWithDecorator should ignore other errors (<a href="https://github.com/typescript-eslint/typescript-eslint/issues/3160">#3160</a>) (<a href="https://github.com/typescript-eslint/typescript-eslint/commit/a1486736d8ef3555832ddfb27fd0980368b363f5">a148673</a>)</li>
</ul>
<h3>Features</h3>
<ul>
<li><strong>eslint-plugin:</strong> add package type declaration (<a href="https://github.com/typescript-eslint/typescript-eslint/issues/3164">#3164</a>) (<a href="https://github.com/typescript-eslint/typescript-eslint/commit/08b058a7a6db3b59c28753bb322717e1fee44d1f">08b058a</a>)</li>
</ul>
<h2>v4.17.0</h2>
<h1><a href="https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.1...v4.17.0">4.17.0</a> (2021-03-08)</h1>
<h3>Bug Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [no-unnecessary-type-assertion] handle assignment (<a href="https://github.com/typescript-eslint/typescript-eslint/issues/3133">#3133</a>) (<a href="https://github.com/typescript-eslint/typescript-eslint/commit/cb2256168c67e0383083673a5afe77076de49da5">cb22561</a>)</li>
</ul>
<h3>Features</h3>
<ul>
<li><strong>eslint-plugin:</strong> [strict-bool-expr] add fixes and suggestions (<a href="https://github.com/typescript-eslint/typescript-eslint/issues/2847">#2847</a>) (<a href="https://github.com/typescript-eslint/typescript-eslint/commit/3f9e9a1e9fc3e507bd01d1913ef642cd129de402">3f9e9a1</a>)</li>
</ul>
<h2>v4.16.1</h2>
<h2><a href="https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.0...v4.16.1">4.16.1</a> (2021-03-01)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><strong>typescript-estree:</strong> update TS version range (<a href="https://github.com/typescript-eslint/typescript-eslint/issues/3127">#3127</a>) (<a href="https://github.com/typescript-eslint/typescript-eslint/commit/0473674c58df5039a2de3c63ad7494fc6be7487e">0473674</a>)</li>
</ul>
<h2>v4.16.0</h2>
<h1><a href="https://github.com/typescript-eslint/typescript-eslint/compare/v4.15.2...v4.16.0">4.16.0</a> (2021-03-01)</h1>
<h3>Bug Fixes</h3>
<ul>
<li><strong>eslint-plugin:</strong> [consistent-indexed-object-style] do not autofix if interface has extends (<a href="https://github.com/typescript-eslint/typescript-eslint/issues/3009">#3009</a>) (<a href="https://github.com/typescript-eslint/typescript-eslint/commit/b0475aff3920d748fa74b5a6d8a7ad5dd731aec4">b0475af</a>)</li>
<li><strong>eslint-plugin:</strong> [no-implied-eval] handle conditional expression (<a href="https://github.com/typescript-eslint/typescript-eslint/issues/3125">#3125</a>) (<a href="https://github.com/typescript-eslint/typescript-eslint/commit/8c65d30a225a3b99e80326961d0cb0c8189b039c">8c65d30</a>)</li>
<li><strong>eslint-plugin:</strong> [no-unused-vars] don't report nested module declaration (<a href="https://github.com/typescript-eslint/typescript-eslint/issues/3119">#3119</a>) (<a href="https://github.com/typescript-eslint/typescript-eslint/commit/4ca58886adf3fc0fe31c263559990c8a534205f9">4ca5888</a>)</li>
<li><strong>eslint-plugin:</strong> [prefer-function-type] apply existing comments to the fixed code (<a href="https://github.com/typescript-eslint/typescript-eslint/issues/3094">#3094</a>) (<a href="https://github.com/typescript-eslint/typescript-eslint/commit/c32f803d4480acf5ffc88e308b4243e5185c4f48">c32f803</a>)</li>
<li><strong>eslint-plugin:</strong> [unbound-method] allow <code>super</code> expressions in <code>this</code> assignments (<a href="https://github.com/typescript-eslint/typescript-eslint/issues/3010">#3010</a>) (<a href="https://github.com/typescript-eslint/typescript-eslint/commit/c65a1391be15bbcf3ae293b1c53686703883d546">c65a139</a>)</li>
<li><strong>scope-manager:</strong> update libs for typescript 4.2 (<a href="https://github.com/typescript-eslint/typescript-eslint/issues/3118">#3118</a>) (<a href="https://github.com/typescript-eslint/typescript-eslint/commit/0336c798c9502fc250d2eaa045661950da55e52f">0336c79</a>)</li>
</ul>
<h3>Features</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/CHANGELOG.md"><code>@​typescript-eslint/parser's changelog</code></a>.</em></p>
<blockquote>
<h1><a href="https://github.com/typescript-eslint/typescript-eslint/compare/v4.17.0...v4.18.0">4.18.0</a> (2021-03-15)</h1>
<p><strong>Note:</strong> Version bump only for package @typescript-eslint/parser</p>
<h1><a href="https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.1...v4.17.0">4.17.0</a> (2021-03-08)</h1>
<p><strong>Note:</strong> Version bump only for package @typescript-eslint/parser</p>
<h2><a href="https://github.com/typescript-eslint/typescript-eslint/compare/v4.16.0...v4.16.1">4.16.1</a> (2021-03-01)</h2>
<p><strong>Note:</strong> Version bump only for package @typescript-eslint/parser</p>
<h1><a href="https://github.com/typescript-eslint/typescript-eslint/compare/v4.15.2...v4.16.0">4.16.0</a> (2021-03-01)</h1>
<p><strong>Note:</strong> Version bump only for package @typescript-eslint/parser</p>
<h2><a href="https://github.com/typescript-eslint/typescript-eslint/compare/v4.15.1...v4.15.2">4.15.2</a> (2021-02-22)</h2>
<p><strong>Note:</strong> Version bump only for package @typescript-eslint/parser</p>
<h2><a href="https://github.com/typescript-eslint/typescript-eslint/compare/v4.15.0...v4.15.1">4.15.1</a> (2021-02-15)</h2>
<p><strong>Note:</strong> Version bump only for package @typescript-eslint/parser</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/typescript-eslint/typescript-eslint/commit/3f4e9be8f89639319b1d97a54d69a5a7c07e1ff5"><code>3f4e9be</code></a> chore: publish v4.18.0</li>
<li><a href="https://github.com/typescript-eslint/typescript-eslint/commit/dd25790a435edef78f6e972ab197b0bd0cfac0f4"><code>dd25790</code></a> chore: publish v4.17.0</li>
<li><a href="https://github.com/typescript-eslint/typescript-eslint/commit/053f6f5d30d3ccde37243db16d689a6e84cc3b91"><code>053f6f5</code></a> chore: publish v4.16.1</li>
<li><a href="https://github.com/typescript-eslint/typescript-eslint/commit/79eb5bce7f1ceb678e583de04a16009647221225"><code>79eb5bc</code></a> chore: publish v4.16.0</li>
<li><a href="https://github.com/typescript-eslint/typescript-eslint/commit/fc774f637782f8815616592d6d18be933224c4a2"><code>fc774f6</code></a> chore: publish v4.15.2</li>
<li><a href="https://github.com/typescript-eslint/typescript-eslint/commit/f9980c25fa383b4c6ec79f1f7635102103ee27e2"><code>f9980c2</code></a> chore: publish v4.15.1</li>
<li><a href="https://github.com/typescript-eslint/typescript-eslint/commit/792623f69ecad94c19f7efac24e58152b4f9ee05"><code>792623f</code></a> test: update ast alignment tests and simplify shared fixtures (<a href="https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser/issues/3045">#3045</a>)</li>
<li>See full diff in <a href="https://github.com/typescript-eslint/typescript-eslint/commits/v4.18.0/packages/parser">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@typescript-eslint/parser&package-manager=npm_and_yarn&previous-version=4.15.0&new-version=4.18.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually


</details>
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Apr 16, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug Something isn't working package: eslint-plugin Issues related to @typescript-eslint/eslint-plugin
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[consistent-indexed-object-style] autofix deletes extended interfaces
2 participants