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

use identifierToKeywordKind when available (TypeScript 5+) #156

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

pmcelhaney
Copy link

As of TypeScript 5.0, node.originalKeywordKind is deprecated.

As of TypeScript 5.2, it has been removed.

This fix uses the suggested alternative, idenifierToKeywordKind(node) when available. So it should work with TypeScript 5 without sacrificing backwards compatibility.

Fixes #155

@pmcelhaney
Copy link
Author

pmcelhaney commented Sep 5, 2023

Here's a work-around until it's fixed: Install patch-package, add "postinstall": "patch-package" to your npm scripts, and copy this code to a file named ./patches/tsutils+3.21.0.patch.

diff --git a/node_modules/tsutils/util/usage.js b/node_modules/tsutils/util/usage.js
index fa24e64..9818b0a 100644
--- a/node_modules/tsutils/util/usage.js
+++ b/node_modules/tsutils/util/usage.js
@@ -25,7 +25,7 @@ function getUsageDomain(node) {
     const parent = node.parent;
     switch (parent.kind) {
         case ts.SyntaxKind.TypeReference:
-            return node.originalKeywordKind !== ts.SyntaxKind.ConstKeyword ? 2 /* Type */ : undefined;
+            return ts.identifierToKeywordKind(node) !== ts.SyntaxKind.ConstKeyword ? 2 /* Type */ : undefined;
         case ts.SyntaxKind.ExpressionWithTypeArguments:
             return parent.parent.token === ts.SyntaxKind.ImplementsKeyword ||
                 parent.parent.parent.kind === ts.SyntaxKind.InterfaceDeclaration
@@ -116,7 +116,7 @@ function getDeclarationDomain(node) {
         case ts.SyntaxKind.ModuleDeclaration:
             return 1 /* Namespace */;
         case ts.SyntaxKind.Parameter:
-            if (node.parent.parent.kind === ts.SyntaxKind.IndexSignature || node.originalKeywordKind === ts.SyntaxKind.ThisKeyword)
+            if (node.parent.parent.kind === ts.SyntaxKind.IndexSignature || ts.identifierToKeywordKind(node) === ts.SyntaxKind.ThisKeyword)
                 return;
         // falls through
         case ts.SyntaxKind.BindingElement:
@@ -525,7 +525,7 @@ class UsageWalker {
                 case ts.SyntaxKind.Parameter:
                     if (node.parent.kind !== ts.SyntaxKind.IndexSignature &&
                         (node.name.kind !== ts.SyntaxKind.Identifier ||
-                            node.name.originalKeywordKind !== ts.SyntaxKind.ThisKeyword))
+                            ts.identifierToKeywordKind(node.name) !== ts.SyntaxKind.ThisKeyword))
                         this._handleBindingName(node.name, false, false);
                     break;
                 case ts.SyntaxKind.EnumMember:
diff --git a/node_modules/tsutils/util/util.js b/node_modules/tsutils/util/util.js
index 0109fea..81aa517 100644
--- a/node_modules/tsutils/util/util.js
+++ b/node_modules/tsutils/util/util.js
@@ -37,7 +37,7 @@ function isKeywordKind(kind) {
 }
 exports.isKeywordKind = isKeywordKind;
 function isThisParameter(parameter) {
-    return parameter.name.kind === ts.SyntaxKind.Identifier && parameter.name.originalKeywordKind === ts.SyntaxKind.ThisKeyword;
+    return parameter.name.kind === ts.SyntaxKind.Identifier && ts.identifierToKeywordKind(parameter.name) === ts.SyntaxKind.ThisKeyword;
 }
 exports.isThisParameter = isThisParameter;
 function getModifier(node, kind) {

@willemmulder
Copy link

willemmulder commented Sep 8, 2023

Good work!

@pmcelhaney For the hotfix I had to use "postinstall" instead of "post-install". Other than that: awesome!

@ajafff Can this be merged? It's preventing many people to upgrade to TS 5.2. Thanks :-)

@Shuunen
Copy link

Shuunen commented Oct 19, 2023

this tsutils project seems to be dead & not maintained anymore 😢 @ajafff could you give access to some maintainers ?

@Shuunen
Copy link

Shuunen commented Oct 19, 2023

another solution would be that @pmcelhaney publish a fixed version on npm like "@pmcelhaney/tsutils" and then make a PR on the needed projects

@tux21b
Copy link

tux21b commented Oct 19, 2023

This project is dead and you are probably not affected. Short summary:

  • I thought I was affected, because "eslint-typescript" was using "tsutils" in our project
  • A quick research showed that the eslint team figured out that "tsutils" is dead a long time ago
  • The eslint team therefore forked the project as "ts-api-utils"
  • Nothing in a modern eslint toolchain should depend on tsutils, they removed everything in February
  • Our project was still using tsutils as dependency of eslint, and I am not sure why. Removing and re-adding eslint resulted in the correct "ts-api-utils" dependency
  • Everything works fine since then :)

@Shuunen
Copy link

Shuunen commented Oct 19, 2023

Thanks @tux21b for these details, so the issue some of us have here is linked to the fact that eslint-plugin-etc is depending on this tsutils instead of this newer package ts-api-utils

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

originalKeywordKind has been deprecated
4 participants