Repository: i18next/i18next-parser
Pull request #380 (2021-07-27 04:02:07)

Bump commander from 7.2.0 to 8.1.0
Bumps [commander](https://github.com/tj/commander.js) from 7.2.0 to 8.1.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/tj/commander.js/releases">commander's releases</a>.</em></p>
<blockquote>
<h2>v8.1.0</h2>
<h3>Added</h3>
<ul>
<li><code>.copyInheritedSettings()</code> (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1557">#1557</a>)</li>
<li>update Chinese translation updates for Commander v8 (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1570">#1570</a>)</li>
<li><code>Argument</code> methods for <code>.argRequired()</code> and <code>.argOptional()</code> (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1567">#1567</a>)</li>
</ul>
<h2>v8.0.0</h2>
<h3>Added</h3>
<ul>
<li><code>.argument(name, description)</code> for adding command-arguments (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1490">#1490</a>)
<ul>
<li>supports default value for optional command-arguments (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1508">#1508</a>)</li>
<li>supports custom processing function (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1508">#1508</a>)</li>
</ul>
</li>
<li><code>.createArgument()</code> factory method (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1497">#1497</a>)</li>
<li><code>.addArgument()</code> (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1490">#1490</a>)</li>
<li><code>Argument</code> supports <code>.choices()</code> (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1525">#1525</a>)</li>
<li><code>.showHelpAfterError()</code> to display full help or a custom message after an error (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1534">#1534</a>)</li>
<li><code>.hook()</code> with support for <code>'preAction'</code> and <code>'postAction'</code> callbacks (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1514">#1514</a>)</li>
<li>client typing of <code>.opts()</code> return type using TypeScript generics (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1539">#1539</a>)</li>
<li>the number of command-arguments is checked for programs without an action handler (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1502">#1502</a>)</li>
<li><code>.getOptionValue()</code> and <code>.setOptionValue()</code> (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1521">#1521</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li>refactor and simplify TypeScript declarations (with no default export) (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1520">#1520</a>)</li>
<li><code>.parseAsync()</code> is now declared as <code>async</code> (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1513">#1513</a>)</li>
<li><em>Breaking:</em> <code>Help</code> method <code>.visibleArguments()</code> returns array of <code>Argument</code> (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1490">#1490</a>)</li>
<li><em>Breaking:</em> Commander 8 requires Node.js 12 or higher (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1500">#1500</a>)</li>
<li><em>Breaking:</em> <code>CommanderError</code> code <code>commander.invalidOptionArgument</code> renamed <code>commander.invalidArgument</code> (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1508">#1508</a>)</li>
<li><em>Breaking:</em> TypeScript declaration for <code>.addTextHelp()</code> callback no longer allows result of <code>undefined</code>, now just <code>string</code> (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1516">#1516</a>)</li>
<li>refactor <code>index.tab</code> into a file per class (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1522">#1522</a>)</li>
<li>remove help suggestion from &quot;unknown command&quot; error message (see <code>.showHelpAfteError()</code>) (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1534">#1534</a>)</li>
<li><code>Command</code> property <code>.arg</code> initialised to empty array (was previously undefined) (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1529">#1529</a>)</li>
<li>update dependencies</li>
</ul>
<h3>Deprecated</h3>
<ul>
<li>second parameter of <code>cmd.description(desc, argDescriptions)</code> for adding argument descriptions (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1490">#1490</a>)
<ul>
<li>(use new <code>.argument(name, description)</code> instead)</li>
</ul>
</li>
<li><code>InvalidOptionArgumentError</code> (replaced by <code>InvalidArgumentError</code>) (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1508">#1508</a>)</li>
</ul>
<h3>Removed</h3>
<ul>
<li><em>Breaking:</em> TypeScript declaration for default export of global <code>Command</code> object (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1520">#1520</a>)
<ul>
<li>(still available as named <code>program</code> export)</li>
</ul>
</li>
</ul>
<h3>Migration Tips</h3>
<p>If you have a simple program without an action handler, you will now get an error if
there are missing command-arguments.</p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/tj/commander.js/blob/master/CHANGELOG.md">commander's changelog</a>.</em></p>
<blockquote>
<h2>[8.1.0] (2021-07-27)</h2>
<h3>Added</h3>
<ul>
<li><code>.copyInheritedSettings()</code> (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1557">#1557</a>)</li>
<li>update Chinese translation updates for Commander v8 (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1570">#1570</a>)</li>
<li><code>Argument</code> methods for <code>.argRequired()</code> and <code>.argOptional()</code> (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1567">#1567</a>)</li>
</ul>
<h2>[8.0.0] (2021-06-25)</h2>
<h3>Added</h3>
<ul>
<li><code>.argument(name, description)</code> for adding command-arguments (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1490">#1490</a>)
<ul>
<li>supports default value for optional command-arguments (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1508">#1508</a>)</li>
<li>supports custom processing function (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1508">#1508</a>)</li>
</ul>
</li>
<li><code>.createArgument()</code> factory method (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1497">#1497</a>)</li>
<li><code>.addArgument()</code> (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1490">#1490</a>)</li>
<li><code>Argument</code> supports <code>.choices()</code> (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1525">#1525</a>)</li>
<li><code>.showHelpAfterError()</code> to display full help or a custom message after an error (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1534">#1534</a>)</li>
<li><code>.hook()</code> with support for <code>'preAction'</code> and <code>'postAction'</code> callbacks (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1514">#1514</a>)</li>
<li>client typing of <code>.opts()</code> return type using TypeScript generics (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1539">#1539</a>)</li>
<li>the number of command-arguments is checked for programs without an action handler (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1502">#1502</a>)</li>
<li><code>.getOptionValue()</code> and <code>.setOptionValue()</code> (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1521">#1521</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li>refactor and simplify TypeScript declarations (with no default export) (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1520">#1520</a>)</li>
<li><code>.parseAsync()</code> is now declared as <code>async</code> (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1513">#1513</a>)</li>
<li><em>Breaking:</em> <code>Help</code> method <code>.visibleArguments()</code> returns array of <code>Argument</code> (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1490">#1490</a>)</li>
<li><em>Breaking:</em> Commander 8 requires Node.js 12 or higher (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1500">#1500</a>)</li>
<li><em>Breaking:</em> <code>CommanderError</code> code <code>commander.invalidOptionArgument</code> renamed <code>commander.invalidArgument</code> (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1508">#1508</a>)</li>
<li><em>Breaking:</em> TypeScript declaration for <code>.addTextHelp()</code> callback no longer allows result of <code>undefined</code>, now just <code>string</code> (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1516">#1516</a>)</li>
<li>refactor <code>index.tab</code> into a file per class (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1522">#1522</a>)</li>
<li>remove help suggestion from &quot;unknown command&quot; error message (see <code>.showHelpAfteError()</code>) (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1534">#1534</a>)</li>
<li><code>Command</code> property <code>.arg</code> initialised to empty array (was previously undefined) (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1529">#1529</a>)</li>
<li>update dependencies</li>
</ul>
<h3>Deprecated</h3>
<ul>
<li>second parameter of <code>cmd.description(desc, argDescriptions)</code> for adding argument descriptions (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1490">#1490</a>)
<ul>
<li>(use new <code>.argument(name, description)</code> instead)</li>
</ul>
</li>
<li><code>InvalidOptionArgumentError</code> (replaced by <code>InvalidArgumentError</code>) (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1508">#1508</a>)</li>
</ul>
<h3>Removed</h3>
<ul>
<li><em>Breaking:</em> TypeScript declaration for default export of global <code>Command</code> object (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1520">#1520</a>)
<ul>
<li>(still available as named <code>program</code> export)</li>
</ul>
</li>
</ul>
<h3>Migration Tips</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/tj/commander.js/commit/a9c9f17c7eff96b8da8c2b9d01751d41f1eb0ae3"><code>a9c9f17</code></a> Add link for version diff</li>
<li><a href="https://github.com/tj/commander.js/commit/411ca9575266037358df95e7c6158de63d0b5600"><code>411ca95</code></a> Clarify that more than just README</li>
<li><a href="https://github.com/tj/commander.js/commit/a036bde5ccc403f741f30161ed8e789f0f51a73c"><code>a036bde</code></a> Prepare for 8.1</li>
<li><a href="https://github.com/tj/commander.js/commit/e6943c4ee19e9ad6b3529311ac893166d4d45b03"><code>e6943c4</code></a> Update Chinese docs</li>
<li><a href="https://github.com/tj/commander.js/commit/6f51e4a10912f6ac65d1f1335dd3e16f454b5e09"><code>6f51e4a</code></a> Feature/argument arg explicit (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1567">#1567</a>)</li>
<li><a href="https://github.com/tj/commander.js/commit/4be69f17e021eb081634526bfe54888b00318fec"><code>4be69f1</code></a> Use getCommandAndParents for array of parents (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1566">#1566</a>)</li>
<li><a href="https://github.com/tj/commander.js/commit/56c410831f5cfc3bf3a898d5da7379488848ec45"><code>56c4108</code></a> Follow jsdoc and tsdoc more closely, especially <a href="https://github.com/example"><code>@​example</code></a> (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1562">#1562</a>)</li>
<li><a href="https://github.com/tj/commander.js/commit/5517d250a6547d70befce50518d1fc0891ed6d00"><code>5517d25</code></a> Add copyInheritedSettings (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1557">#1557</a>)</li>
<li><a href="https://github.com/tj/commander.js/commit/80054ba3756853c1acf80e168ee7d44b63ad826b"><code>80054ba</code></a> Note Chinese translations are stale (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1550">#1550</a>)</li>
<li><a href="https://github.com/tj/commander.js/commit/51c77ece11350ef087f8594acda3d6a2ab939034"><code>51c77ec</code></a> Prepare for 8.0.0 (<a href="https://github-redirect.dependabot.com/tj/commander.js/issues/1548">#1548</a>)</li>
<li>Additional commits viewable in <a href="https://github.com/tj/commander.js/compare/v7.2.0...v8.1.0">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=commander&package-manager=npm_and_yarn&previous-version=7.2.0&new-version=8.1.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
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>

codecov-commenter: # [Codecov](https://codecov.io/gh/i18next/i18next-parser/pull/380?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=i18next) Report
> Merging [#380](https://codecov.io/gh/i18next/i18next-parser/pull/380?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=i18next) (555bfc4) into [master](https://codecov.io/gh/i18next/i18next-parser/commit/f71086a1ddfcf6540744ca19e34cc35439cf0b39?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=i18next) (f71086a) will **not change** coverage.
> The diff coverage is `n/a`.

[![Impacted file tree graph](https://codecov.io/gh/i18next/i18next-parser/pull/380/graphs/tree.svg?width=650&height=150&src=pr&token=CJ74Vps41L&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=i18next)](https://codecov.io/gh/i18next/i18next-parser/pull/380?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=i18next)

```diff
@@           Coverage Diff           @@
##           master     #380   +/-   ##
=======================================
  Coverage   93.26%   93.26%           
=======================================
  Files           9        9           
  Lines         594      594           
=======================================
  Hits          554      554           
  Misses         40       40           
```



------

[Continue to review full report at Codecov](https://codecov.io/gh/i18next/i18next-parser/pull/380?src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=i18next).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=i18next)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/i18next/i18next-parser/pull/380?src=pr&el=footer&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=i18next). Last update [f71086a...555bfc4](https://codecov.io/gh/i18next/i18next-parser/pull/380?src=pr&el=lastupdated&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=i18next). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=i18next).


Patch:
diff --git a/dist/lexers/javascript-lexer.js b/dist/lexers/javascript-lexer.js
index 4c98bf0..919f9c9 100644
--- a/dist/lexers/javascript-lexer.js
+++ b/dist/lexers/javascript-lexer.js
@@ -57,6 +57,10 @@ JavascriptLexer = /*#__PURE__*/function (_BaseLexer) {(0, _inherits2["default"])
 
         parseCommentNode(keys, node, content);
 
+        if (node.kind === ts.SyntaxKind.TaggedTemplateExpression) {
+          entry = _this4.taggedTemplateExpressionExtractor.call(_this4, node);
+        }
+
         if (node.kind === ts.SyntaxKind.CallExpression) {
           entry = _this4.expressionExtractor.call(_this4, node);
         }
@@ -76,6 +80,30 @@ JavascriptLexer = /*#__PURE__*/function (_BaseLexer) {(0, _inherits2["default"])
       parseTree(sourceFile);
 
       return this.setNamespaces(keys);
+    } }, { key: "taggedTemplateExpressionExtractor", value:
+
+    function taggedTemplateExpressionExtractor(node) {
+      var entry = {};
+
+      var tag = node.tag,template = node.template;
+
+      var isTranslationFunction =
+      tag.text && this.functions.includes(tag.text) ||
+      tag.name && this.functions.includes(tag.name.text);
+
+      if (!isTranslationFunction) return null;
+
+      if (template.kind === ts.SyntaxKind.NoSubstitutionTemplateLiteral) {
+        entry.key = template.text;
+      } else if (template.kind === ts.SyntaxKind.TemplateExpression) {
+        this.emit(
+        'warning',
+        'A key that is a template string must not have any interpolations.');
+
+        return null;
+      }
+
+      return entry;
     } }, { key: "expressionExtractor", value:
 
     function expressionExtractor(node) {
diff --git a/dist/lexers/jsx-lexer.js b/dist/lexers/jsx-lexer.js
index 6fd8fda..56b9973 100644
--- a/dist/lexers/jsx-lexer.js
+++ b/dist/lexers/jsx-lexer.js
@@ -30,6 +30,9 @@ JsxLexer = /*#__PURE__*/function (_JavascriptLexer) {(0, _inherits2["default"])(
           case ts.SyntaxKind.CallExpression:
             entry = _this2.expressionExtractor.call(_this2, node);
             break;
+          case ts.SyntaxKind.TaggedTemplateExpression:
+            entry = _this2.taggedTemplateExpressionExtractor(node);
+            break;
           case ts.SyntaxKind.JsxElement:
             entry = _this2.jsxExtractor.call(_this2, node, content);
             break;
diff --git a/package.json b/package.json
index 152f988..3703e73 100644
--- a/package.json
+++ b/package.json
@@ -29,7 +29,7 @@
     "broccoli-plugin": "^4.0.5",
     "cheerio": "^1.0.0-rc.2",
     "colors": "~1.4.0",
-    "commander": "~7.2.0",
+    "commander": "~8.1.0",
     "concat-stream": "~2.0.0",
     "eol": "^0.9.1",
     "fs-extra": "^10.0.0",
diff --git a/src/lexers/javascript-lexer.js b/src/lexers/javascript-lexer.js
index cfef1f2..480e2de 100644
--- a/src/lexers/javascript-lexer.js
+++ b/src/lexers/javascript-lexer.js
@@ -57,6 +57,10 @@ export default class JavascriptLexer extends BaseLexer {
 
       parseCommentNode(keys, node, content)
 
+      if (node.kind === ts.SyntaxKind.TaggedTemplateExpression) {
+        entry = this.taggedTemplateExpressionExtractor.call(this, node)
+      }
+
       if (node.kind === ts.SyntaxKind.CallExpression) {
         entry = this.expressionExtractor.call(this, node)
       }
@@ -78,6 +82,30 @@ export default class JavascriptLexer extends BaseLexer {
     return this.setNamespaces(keys)
   }
 
+  taggedTemplateExpressionExtractor(node) {
+    const entry = {}
+
+    const { tag, template } = node
+
+    const isTranslationFunction =
+      (tag.text && this.functions.includes(tag.text)) ||
+      (tag.name && this.functions.includes(tag.name.text))
+
+    if (!isTranslationFunction) return null
+
+    if (template.kind === ts.SyntaxKind.NoSubstitutionTemplateLiteral) {
+      entry.key = template.text
+    } else if (template.kind === ts.SyntaxKind.TemplateExpression) {
+      this.emit(
+        'warning',
+        'A key that is a template string must not have any interpolations.'
+      )
+      return null
+    }
+
+    return entry
+  }
+
   expressionExtractor(node) {
     const entry = {}
 
diff --git a/src/lexers/jsx-lexer.js b/src/lexers/jsx-lexer.js
index 9d19ef0..e5c6933 100644
--- a/src/lexers/jsx-lexer.js
+++ b/src/lexers/jsx-lexer.js
@@ -30,6 +30,9 @@ export default class JsxLexer extends JavascriptLexer {
         case ts.SyntaxKind.CallExpression:
           entry = this.expressionExtractor.call(this, node)
           break
+        case ts.SyntaxKind.TaggedTemplateExpression:
+          entry = this.taggedTemplateExpressionExtractor.call(this, node)
+          break
         case ts.SyntaxKind.JsxElement:
           entry = this.jsxExtractor.call(this, node, content)
           break
diff --git a/yarn.lock b/yarn.lock
index 5f33348..1a883c1 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1870,10 +1870,10 @@ commander@~2.20.3:
   resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
   integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
 
-commander@~7.2.0:
-  version "7.2.0"
-  resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
-  integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
+commander@~8.1.0:
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-8.1.0.tgz#db36e3e66edf24ff591d639862c6ab2c52664362"
+  integrity sha512-mf45ldcuHSYShkplHHGKWb4TrmwQadxOn7v4WuhDJy0ZVoY5JFajaRDKD0PNe5qXzBX0rhovjTnP6Kz9LETcuA==
 
 commondir@^1.0.1:
   version "1.0.1"


Test patch:
diff --git a/test/lexers/javascript-lexer.test.js b/test/lexers/javascript-lexer.test.js
index 1f2ec02..057c34f 100644
--- a/test/lexers/javascript-lexer.test.js
+++ b/test/lexers/javascript-lexer.test.js
@@ -259,4 +259,34 @@ describe('JavascriptLexer', () => {
     ])
     assert.strictEqual(warningCount, 2)
   })
+
+  it('extracts non-interpolated tagged templates', () => {
+    const Lexer = new JavascriptLexer()
+    const content = 'i18n.t`some-key`'
+    assert.deepEqual(Lexer.extract(content), [
+      {
+        key: 'some-key',
+      },
+    ])
+  })
+
+  it('emits warnings on interpolated tagged templates', () => {
+    const Lexer = new JavascriptLexer()
+    const content = 'i18n.t`some-key${someVar}keykey`'
+
+    let warningCount = 0
+    Lexer.on('warning', (warning) => {
+      if (
+        warning.indexOf(
+          'A key that is a template string must not have any interpolations.'
+        ) === 0
+      ) {
+        warningCount++
+      }
+    })
+
+    Lexer.extract(content)
+
+    assert.equal(warningCount, 1)
+  })
 })