Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork2.8k
feat: treatthis
intypeof this
as aThisExpression
#4382
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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Conversation
nx-cloudbot commentedJan 1, 2022 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
Thanks for the PR,@Zzzen! 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 onhttps://opencollective.com/typescript-eslint. As a thank you, your profile/company logo will be added to our main README which receives thousands of unique visitorsper day. |
netlifybot commentedJan 1, 2022 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
✅ Deploy Preview fortypescript-eslint ready!
To edit notification comments on pull requests, go to yourNetlify site settings. |
codecovbot commentedJan 1, 2022 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
Codecov Report
@@ Coverage Diff @@## main #4382 +/- ##==========================================+ Coverage 91.33% 92.88% +1.55%========================================== Files 132 323 +191 Lines 1488 10241 +8753 Branches 224 2992 +2768 ==========================================+ Hits 1359 9512 +8153- Misses 65 419 +354- Partials 64 310 +246
Flags with carried forward coverage won't be shown.Click here to find out more.
|
@@ -787,6 +788,14 @@ export class Converter { | |||
} | |||
case SyntaxKind.Identifier: { | |||
if (isThisInTypeQuery(node)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Changing the AST feels hacky and is gonna break some plugins. Theno-undef
rule usesglobalScope.through
to check undefined variables. Creating a variable calledthis
for functions should prevent eslint from reporting this.
https://github.com/eslint/eslint/blob/main/lib/rules/no-undef.js#L59L75
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
this looks like an issue in typescript, we should either getSyntaxKind.ThisType
orSyntaxKind.ThisKeyword
playground 4.3.5
playground 4.5.4
classTest{fn(){consta:typeofthis=thisa.fn()constb: this=thisb.fn()}}
const b: this = this
- is correctly reported asThisType
older versions of typescript (<4.4) reportedtypeof this
as errorCannot find name 'this'. (2304)
we should add test cases for parser and visitor
bradzacher commentedJan 3, 2022 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
It's not hacky because it's the correct AST. Defining a global variable for |
Did not notice we have our own definition for all AST nodes... |
Uh oh!
There was an error while loading.Please reload this page.
return id.originalKeywordKind === SyntaxKind.ThisKeyword; | ||
} | ||
export function isThisIdentifier(node: ts.Node | undefined): boolean { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
you should useTSNode
fromts-estree
type and remove casts
bradzacherJan 24, 2022 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
you should use a type predicate so that TS can understand the refinement you're making within the function
exportfunctionisThisIdentifier(node:ts.Node|undefined):boolean{ | |
exportfunctionisThisIdentifier(node:ts.Node|undefined):node ists.ThisKeyword{ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
ts
does not have nodes namedThisKeyword
. The most similar thing isThisExpression
. Probably not what we want.
exportinterfaceThisExpressionextendsPrimaryExpression{readonlykind:SyntaxKind.ThisKeyword;}
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
please add a parser test for this as well.
you can add a fixture somewhere in herepackages/shared-fixtures/fixtures/typescript/types
then run the test with
$cd packages/typescript-estree$ yarn jest ast-fixtures.test
It'll dump a snapshot topackages/typescript-estree/tests/snapshots/typescript/types
); | ||
} | ||
export function isThisInTypeQuery(node: ts.Node): boolean { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
ditto above - use a predicate return type
👋@Zzzen, this PR would be nice to have. Do you still have time to work on it? (no worries if not, just checking!) |
Oh, sure! I almost forgot it. |
We have converted the AST, so it doesn't align with babel. Should we update
|
armano2 commentedMay 14, 2022 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
@Zzzen yes |
@@ -295,6 +295,27 @@ export function preprocessBabylonAST(ast: File): any { | |||
delete node.loc.start.index; | |||
} | |||
}, | |||
TSTypeQuery(node: TSTypeQuery) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
can you add an comment with explanation why we need this and if there is babel ticket please link it here,
(this is necessary to ease maintenance of this file)
typeof this
this
intypeof this
as aThisExpression
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
This PR contains the following updates:| Package | Type | Update | Change ||---|---|---|---|| [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint) | devDependencies | minor | [`5.29.0` -> `5.30.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2feslint-plugin/5.29.0/5.30.0) || [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint) | devDependencies | minor | [`5.29.0` -> `5.30.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/5.29.0/5.30.0) |---### Release Notes<details><summary>typescript-eslint/typescript-eslint (@​typescript-eslint/eslint-plugin)</summary>### [`v5.30.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#​5300-httpsgithubcomtypescript-eslinttypescript-eslintcomparev5290v5300-2022-06-27)[Compare Source](typescript-eslint/typescript-eslint@v5.29.0...v5.30.0)##### Features- **eslint-plugin:** \[no-shadow] add shadowed variable location to the error message ([#​5183](typescript-eslint/typescript-eslint#5183)) ([8ca08e9](typescript-eslint/typescript-eslint@8ca08e9))- treat `this` in `typeof this` as a `ThisExpression` ([#​4382](typescript-eslint/typescript-eslint#4382)) ([b04b2ce](typescript-eslint/typescript-eslint@b04b2ce))</details><details><summary>typescript-eslint/typescript-eslint (@​typescript-eslint/parser)</summary>### [`v5.30.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#​5300-httpsgithubcomtypescript-eslinttypescript-eslintcomparev5290v5300-2022-06-27)[Compare Source](typescript-eslint/typescript-eslint@v5.29.0...v5.30.0)**Note:** Version bump only for package [@​typescript-eslint/parser](https://github.com/typescript-eslint/parser)</details>---### Configuration📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.--- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, click this checkbox.---This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).Co-authored-by: cabr2-bot <cabr2.help@gmail.com>Reviewed-on:https://codeberg.org/Calciumdibromid/CaBr2/pulls/1436Reviewed-by: Epsilon_02 <epsilon_02@noreply.codeberg.org>Co-authored-by: Calciumdibromid Bot <cabr2_bot@noreply.codeberg.org>Co-committed-by: Calciumdibromid Bot <cabr2_bot@noreply.codeberg.org>
PR Checklist
this
intypeof this
is reported as undefined incorrectly #4364Overview