Repository: elm-tooling/elm-language-server
Pull request #947 (2023-04-24 23:56:35)

Bump eslint from 8.37.0 to 8.39.0
Bumps [eslint](https://github.com/eslint/eslint) from 8.37.0 to 8.39.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/eslint/eslint/releases">eslint's releases</a>.</em></p>
<blockquote>
<h2>v8.39.0</h2>
<h2>Features</h2>
<ul>
<li><a href="https://github.com/eslint/eslint/commit/3f7af9f408625dbc486af914706d34c4b483b5ba"><code>3f7af9f</code></a> feat: Implement <code>SourceCode#markVariableAsUsed()</code> (<a href="https://redirect.github.com/eslint/eslint/issues/17086">#17086</a>) (Nicholas C. Zakas)</li>
</ul>
<h2>Documentation</h2>
<ul>
<li><a href="https://github.com/eslint/eslint/commit/6987dc59e46f4e345d0d6c20c1f2c6846bbd7acc"><code>6987dc5</code></a> docs: Fix formatting in Custom Rules docs (<a href="https://redirect.github.com/eslint/eslint/issues/17097">#17097</a>) (Milos Djermanovic)</li>
<li><a href="https://github.com/eslint/eslint/commit/4ee92e5cbdeba6fea2147901ce926de16946958a"><code>4ee92e5</code></a> docs: Update README (GitHub Actions Bot)</li>
<li><a href="https://github.com/eslint/eslint/commit/d8e9887c2c384d24d586d08ee9ae2ada79bd234c"><code>d8e9887</code></a> docs: Custom Rules cleanup/expansion (<a href="https://redirect.github.com/eslint/eslint/issues/16906">#16906</a>) (Ben Perlmutter)</li>
<li><a href="https://github.com/eslint/eslint/commit/1fea2797801a82a2718814c83dad641dab092bcc"><code>1fea279</code></a> docs: Clarify how to add to tsc agenda (<a href="https://redirect.github.com/eslint/eslint/issues/17084">#17084</a>) (Nicholas C. Zakas)</li>
<li><a href="https://github.com/eslint/eslint/commit/970ef1c868235a58297682513842f1256cdfbd03"><code>970ef1c</code></a> docs: Update triage board location (Nicholas C. Zakas)</li>
<li><a href="https://github.com/eslint/eslint/commit/6d8bffdf45d50e272dc45e6d2d05b4a737514468"><code>6d8bffd</code></a> docs: Update README (GitHub Actions Bot)</li>
</ul>
<h2>Chores</h2>
<ul>
<li><a href="https://github.com/eslint/eslint/commit/60a6f2694deb4aa1c54de2a28d0357cddfd16644"><code>60a6f26</code></a> chore: upgrade <code>@​eslint/js</code><a href="https://github.com/8"><code>@​8</code></a>.39.0 (<a href="https://redirect.github.com/eslint/eslint/issues/17102">#17102</a>) (Milos Djermanovic)</li>
<li><a href="https://github.com/eslint/eslint/commit/d5ba5c0a85e7a10777761f5d46c104ab7f25845b"><code>d5ba5c0</code></a> chore: package.json update for <code>@​eslint/js</code> release (ESLint Jenkins)</li>
<li><a href="https://github.com/eslint/eslint/commit/f57eff20f5789408e95061f1af5354bb9b4f4784"><code>f57eff2</code></a> ci: run tests on Node.js v20 (<a href="https://redirect.github.com/eslint/eslint/issues/17093">#17093</a>) (Nitin Kumar)</li>
<li><a href="https://github.com/eslint/eslint/commit/9d1b8fc60cc31f12618e58c10a2669506b7ce9bf"><code>9d1b8fc</code></a> perf: Binary search in token store <code>utils.search</code> (<a href="https://redirect.github.com/eslint/eslint/issues/17066">#17066</a>) (Francesco Trotta)</li>
<li><a href="https://github.com/eslint/eslint/commit/07a4435a0c08cb63ebf11b71f735bac20318829b"><code>07a4435</code></a> chore: Add request for minimal repro to bug report (<a href="https://redirect.github.com/eslint/eslint/issues/17081">#17081</a>) (Nicholas C. Zakas)</li>
<li><a href="https://github.com/eslint/eslint/commit/eac4943ba2e4edb3dbfea0470e5d4b15a4926c40"><code>eac4943</code></a> refactor: remove unnecessary use of <code>SourceCode#getAncestors</code> in rules (<a href="https://redirect.github.com/eslint/eslint/issues/17075">#17075</a>) (Milos Djermanovic)</li>
<li><a href="https://github.com/eslint/eslint/commit/0a7b60a9d5621dbbc1a8a8adda3b7c2060c779ca"><code>0a7b60a</code></a> chore: update description of <code>SourceCode#getDeclaredVariables</code> (<a href="https://redirect.github.com/eslint/eslint/issues/17072">#17072</a>) (Milos Djermanovic)</li>
<li><a href="https://github.com/eslint/eslint/commit/6e2df71cc390252aaca212abe3dc0467fe397450"><code>6e2df71</code></a> chore: remove unnecessary references to the LICENSE file (<a href="https://redirect.github.com/eslint/eslint/issues/17071">#17071</a>) (Milos Djermanovic)</li>
</ul>
<h2>v8.38.0</h2>
<h2>Features</h2>
<ul>
<li><a href="https://github.com/eslint/eslint/commit/a1d561d18ed653b56bddbfb1bab1ebe957293563"><code>a1d561d</code></a> feat: Move getDeclaredVariables and getAncestors to SourceCode (<a href="https://redirect.github.com/eslint/eslint/issues/17059">#17059</a>) (Nicholas C. Zakas)</li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li><a href="https://github.com/eslint/eslint/commit/1c1ece26d1da61e523b83dda25353ec9379eb6c9"><code>1c1ece2</code></a> fix: do not report on <code>RegExp(...args)</code> in <code>require-unicode-regexp</code> (<a href="https://redirect.github.com/eslint/eslint/issues/17037">#17037</a>) (Francesco Trotta)</li>
</ul>
<h2>Documentation</h2>
<ul>
<li><a href="https://github.com/eslint/eslint/commit/7162d34df9a66c817c3bd4aafd3a03d226b58dd5"><code>7162d34</code></a> docs: Mention new config system is complete (<a href="https://redirect.github.com/eslint/eslint/issues/17068">#17068</a>) (Nicholas C. Zakas)</li>
<li><a href="https://github.com/eslint/eslint/commit/0fd6bb213ad2de77543c936eda21501653182e52"><code>0fd6bb2</code></a> docs: Update README (GitHub Actions Bot)</li>
<li><a href="https://github.com/eslint/eslint/commit/c83531c1a6026675f36aa9e33fef14458043974a"><code>c83531c</code></a> docs: Update/remove external links, eg. point to <code>eslint-community</code> (<a href="https://redirect.github.com/eslint/eslint/issues/17061">#17061</a>) (Pelle Wessman)</li>
<li><a href="https://github.com/eslint/eslint/commit/a3aa6f5f146534ed7999ebf8930c524a4871ec0b"><code>a3aa6f5</code></a> docs: Clarify <code>no-div-regex</code> rule docs (<a href="https://redirect.github.com/eslint/eslint/issues/17051">#17051</a>) (Francesco Trotta)</li>
<li><a href="https://github.com/eslint/eslint/commit/b0f11cf977a4180bf7c3042e7faeaaa067ffafd0"><code>b0f11cf</code></a> docs: Update README (GitHub Actions Bot)</li>
<li><a href="https://github.com/eslint/eslint/commit/da8d52a9d4edd9b2016cd4a15cd78f1ddadf20c7"><code>da8d52a</code></a> docs: Update the second object instance for the &quot;no-new&quot; rule (<a href="https://redirect.github.com/eslint/eslint/issues/17020">#17020</a>) (Ahmadou Waly NDIAYE)</li>
<li><a href="https://github.com/eslint/eslint/commit/518130ae79a16d7bf4d752c211ae88152cc5a6f0"><code>518130a</code></a> docs: switch language based on current path (<a href="https://redirect.github.com/eslint/eslint/issues/16687">#16687</a>) (Percy Ma)</li>
<li><a href="https://github.com/eslint/eslint/commit/24206c49a138d4390f815ae122ee12f564bc604b"><code>24206c4</code></a> docs: Update README (GitHub Actions Bot)</li>
</ul>
<h2>Chores</h2>
<ul>
<li><a href="https://github.com/eslint/eslint/commit/59ed06041d4670781956221086ea0fca6683788d"><code>59ed060</code></a> chore: upgrade <code>@​eslint/js</code><a href="https://github.com/8"><code>@​8</code></a>.38.0 (<a href="https://redirect.github.com/eslint/eslint/issues/17069">#17069</a>) (Milos Djermanovic)</li>
<li><a href="https://github.com/eslint/eslint/commit/88c08984ec259ac22d839397c06beec8ef213120"><code>88c0898</code></a> chore: package.json update for <code>@​eslint/js</code> release (ESLint Jenkins)</li>
<li><a href="https://github.com/eslint/eslint/commit/cf682d249f04a6a304407d5b9ddbbc4a9714dd62"><code>cf682d2</code></a> refactor: simplify new-parens rule schema (<a href="https://redirect.github.com/eslint/eslint/issues/17060">#17060</a>) (MHO)</li>
<li><a href="https://github.com/eslint/eslint/commit/0dde02211268394bcbc2b0beef55ea2409b6f55d"><code>0dde022</code></a> ci: bump actions/add-to-project from 0.4.1 to 0.5.0 (<a href="https://redirect.github.com/eslint/eslint/issues/17055">#17055</a>) (dependabot[bot])</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/eslint/eslint/blob/main/CHANGELOG.md">eslint's changelog</a>.</em></p>
<blockquote>
<p>v8.39.0 - April 21, 2023</p>
<ul>
<li><a href="https://github.com/eslint/eslint/commit/60a6f2694deb4aa1c54de2a28d0357cddfd16644"><code>60a6f26</code></a> chore: upgrade <code>@​eslint/js</code><a href="https://github.com/8"><code>@​8</code></a>.39.0 (<a href="https://redirect.github.com/eslint/eslint/issues/17102">#17102</a>) (Milos Djermanovic)</li>
<li><a href="https://github.com/eslint/eslint/commit/d5ba5c0a85e7a10777761f5d46c104ab7f25845b"><code>d5ba5c0</code></a> chore: package.json update for <code>@​eslint/js</code> release (ESLint Jenkins)</li>
<li><a href="https://github.com/eslint/eslint/commit/6987dc59e46f4e345d0d6c20c1f2c6846bbd7acc"><code>6987dc5</code></a> docs: Fix formatting in Custom Rules docs (<a href="https://redirect.github.com/eslint/eslint/issues/17097">#17097</a>) (Milos Djermanovic)</li>
<li><a href="https://github.com/eslint/eslint/commit/4ee92e5cbdeba6fea2147901ce926de16946958a"><code>4ee92e5</code></a> docs: Update README (GitHub Actions Bot)</li>
<li><a href="https://github.com/eslint/eslint/commit/3f7af9f408625dbc486af914706d34c4b483b5ba"><code>3f7af9f</code></a> feat: Implement <code>SourceCode#markVariableAsUsed()</code> (<a href="https://redirect.github.com/eslint/eslint/issues/17086">#17086</a>) (Nicholas C. Zakas)</li>
<li><a href="https://github.com/eslint/eslint/commit/d8e9887c2c384d24d586d08ee9ae2ada79bd234c"><code>d8e9887</code></a> docs: Custom Rules cleanup/expansion (<a href="https://redirect.github.com/eslint/eslint/issues/16906">#16906</a>) (Ben Perlmutter)</li>
<li><a href="https://github.com/eslint/eslint/commit/f57eff20f5789408e95061f1af5354bb9b4f4784"><code>f57eff2</code></a> ci: run tests on Node.js v20 (<a href="https://redirect.github.com/eslint/eslint/issues/17093">#17093</a>) (Nitin Kumar)</li>
<li><a href="https://github.com/eslint/eslint/commit/1fea2797801a82a2718814c83dad641dab092bcc"><code>1fea279</code></a> docs: Clarify how to add to tsc agenda (<a href="https://redirect.github.com/eslint/eslint/issues/17084">#17084</a>) (Nicholas C. Zakas)</li>
<li><a href="https://github.com/eslint/eslint/commit/970ef1c868235a58297682513842f1256cdfbd03"><code>970ef1c</code></a> docs: Update triage board location (Nicholas C. Zakas)</li>
<li><a href="https://github.com/eslint/eslint/commit/9d1b8fc60cc31f12618e58c10a2669506b7ce9bf"><code>9d1b8fc</code></a> perf: Binary search in token store <code>utils.search</code> (<a href="https://redirect.github.com/eslint/eslint/issues/17066">#17066</a>) (Francesco Trotta)</li>
<li><a href="https://github.com/eslint/eslint/commit/07a4435a0c08cb63ebf11b71f735bac20318829b"><code>07a4435</code></a> chore: Add request for minimal repro to bug report (<a href="https://redirect.github.com/eslint/eslint/issues/17081">#17081</a>) (Nicholas C. Zakas)</li>
<li><a href="https://github.com/eslint/eslint/commit/eac4943ba2e4edb3dbfea0470e5d4b15a4926c40"><code>eac4943</code></a> refactor: remove unnecessary use of <code>SourceCode#getAncestors</code> in rules (<a href="https://redirect.github.com/eslint/eslint/issues/17075">#17075</a>) (Milos Djermanovic)</li>
<li><a href="https://github.com/eslint/eslint/commit/6d8bffdf45d50e272dc45e6d2d05b4a737514468"><code>6d8bffd</code></a> docs: Update README (GitHub Actions Bot)</li>
<li><a href="https://github.com/eslint/eslint/commit/0a7b60a9d5621dbbc1a8a8adda3b7c2060c779ca"><code>0a7b60a</code></a> chore: update description of <code>SourceCode#getDeclaredVariables</code> (<a href="https://redirect.github.com/eslint/eslint/issues/17072">#17072</a>) (Milos Djermanovic)</li>
<li><a href="https://github.com/eslint/eslint/commit/6e2df71cc390252aaca212abe3dc0467fe397450"><code>6e2df71</code></a> chore: remove unnecessary references to the LICENSE file (<a href="https://redirect.github.com/eslint/eslint/issues/17071">#17071</a>) (Milos Djermanovic)</li>
</ul>
<p>v8.38.0 - April 7, 2023</p>
<ul>
<li><a href="https://github.com/eslint/eslint/commit/59ed06041d4670781956221086ea0fca6683788d"><code>59ed060</code></a> chore: upgrade <code>@​eslint/js</code><a href="https://github.com/8"><code>@​8</code></a>.38.0 (<a href="https://redirect.github.com/eslint/eslint/issues/17069">#17069</a>) (Milos Djermanovic)</li>
<li><a href="https://github.com/eslint/eslint/commit/88c08984ec259ac22d839397c06beec8ef213120"><code>88c0898</code></a> chore: package.json update for <code>@​eslint/js</code> release (ESLint Jenkins)</li>
<li><a href="https://github.com/eslint/eslint/commit/7162d34df9a66c817c3bd4aafd3a03d226b58dd5"><code>7162d34</code></a> docs: Mention new config system is complete (<a href="https://redirect.github.com/eslint/eslint/issues/17068">#17068</a>) (Nicholas C. Zakas)</li>
<li><a href="https://github.com/eslint/eslint/commit/a1d561d18ed653b56bddbfb1bab1ebe957293563"><code>a1d561d</code></a> feat: Move getDeclaredVariables and getAncestors to SourceCode (<a href="https://redirect.github.com/eslint/eslint/issues/17059">#17059</a>) (Nicholas C. Zakas)</li>
<li><a href="https://github.com/eslint/eslint/commit/0fd6bb213ad2de77543c936eda21501653182e52"><code>0fd6bb2</code></a> docs: Update README (GitHub Actions Bot)</li>
<li><a href="https://github.com/eslint/eslint/commit/c83531c1a6026675f36aa9e33fef14458043974a"><code>c83531c</code></a> docs: Update/remove external links, eg. point to <code>eslint-community</code> (<a href="https://redirect.github.com/eslint/eslint/issues/17061">#17061</a>) (Pelle Wessman)</li>
<li><a href="https://github.com/eslint/eslint/commit/cf682d249f04a6a304407d5b9ddbbc4a9714dd62"><code>cf682d2</code></a> refactor: simplify new-parens rule schema (<a href="https://redirect.github.com/eslint/eslint/issues/17060">#17060</a>) (MHO)</li>
<li><a href="https://github.com/eslint/eslint/commit/a3aa6f5f146534ed7999ebf8930c524a4871ec0b"><code>a3aa6f5</code></a> docs: Clarify <code>no-div-regex</code> rule docs (<a href="https://redirect.github.com/eslint/eslint/issues/17051">#17051</a>) (Francesco Trotta)</li>
<li><a href="https://github.com/eslint/eslint/commit/0dde02211268394bcbc2b0beef55ea2409b6f55d"><code>0dde022</code></a> ci: bump actions/add-to-project from 0.4.1 to 0.5.0 (<a href="https://redirect.github.com/eslint/eslint/issues/17055">#17055</a>) (dependabot[bot])</li>
<li><a href="https://github.com/eslint/eslint/commit/b0f11cf977a4180bf7c3042e7faeaaa067ffafd0"><code>b0f11cf</code></a> docs: Update README (GitHub Actions Bot)</li>
<li><a href="https://github.com/eslint/eslint/commit/da8d52a9d4edd9b2016cd4a15cd78f1ddadf20c7"><code>da8d52a</code></a> docs: Update the second object instance for the &quot;no-new&quot; rule (<a href="https://redirect.github.com/eslint/eslint/issues/17020">#17020</a>) (Ahmadou Waly NDIAYE)</li>
<li><a href="https://github.com/eslint/eslint/commit/518130ae79a16d7bf4d752c211ae88152cc5a6f0"><code>518130a</code></a> docs: switch language based on current path (<a href="https://redirect.github.com/eslint/eslint/issues/16687">#16687</a>) (Percy Ma)</li>
<li><a href="https://github.com/eslint/eslint/commit/24206c49a138d4390f815ae122ee12f564bc604b"><code>24206c4</code></a> docs: Update README (GitHub Actions Bot)</li>
<li><a href="https://github.com/eslint/eslint/commit/1c1ece26d1da61e523b83dda25353ec9379eb6c9"><code>1c1ece2</code></a> fix: do not report on <code>RegExp(...args)</code> in <code>require-unicode-regexp</code> (<a href="https://redirect.github.com/eslint/eslint/issues/17037">#17037</a>) (Francesco Trotta)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/eslint/eslint/commit/560e812d85d1805a59989f295c3a417609033f11"><code>560e812</code></a> 8.39.0</li>
<li><a href="https://github.com/eslint/eslint/commit/94ff9eba79c105215bf6fa64f2a9f3b30d5f7f3a"><code>94ff9eb</code></a> Build: changelog update for 8.39.0</li>
<li><a href="https://github.com/eslint/eslint/commit/60a6f2694deb4aa1c54de2a28d0357cddfd16644"><code>60a6f26</code></a> chore: upgrade <code>@​eslint/js</code><a href="https://github.com/8"><code>@​8</code></a>.39.0 (<a href="https://redirect.github.com/eslint/eslint/issues/17102">#17102</a>)</li>
<li><a href="https://github.com/eslint/eslint/commit/d5ba5c0a85e7a10777761f5d46c104ab7f25845b"><code>d5ba5c0</code></a> chore: package.json update for <code>@​eslint/js</code> release</li>
<li><a href="https://github.com/eslint/eslint/commit/6987dc59e46f4e345d0d6c20c1f2c6846bbd7acc"><code>6987dc5</code></a> docs: Fix formatting in Custom Rules docs (<a href="https://redirect.github.com/eslint/eslint/issues/17097">#17097</a>)</li>
<li><a href="https://github.com/eslint/eslint/commit/4ee92e5cbdeba6fea2147901ce926de16946958a"><code>4ee92e5</code></a> docs: Update README</li>
<li><a href="https://github.com/eslint/eslint/commit/3f7af9f408625dbc486af914706d34c4b483b5ba"><code>3f7af9f</code></a> feat: Implement <code>SourceCode#markVariableAsUsed()</code> (<a href="https://redirect.github.com/eslint/eslint/issues/17086">#17086</a>)</li>
<li><a href="https://github.com/eslint/eslint/commit/d8e9887c2c384d24d586d08ee9ae2ada79bd234c"><code>d8e9887</code></a> docs: Custom Rules cleanup/expansion (<a href="https://redirect.github.com/eslint/eslint/issues/16906">#16906</a>)</li>
<li><a href="https://github.com/eslint/eslint/commit/f57eff20f5789408e95061f1af5354bb9b4f4784"><code>f57eff2</code></a> ci: run tests on Node.js v20 (<a href="https://redirect.github.com/eslint/eslint/issues/17093">#17093</a>)</li>
<li><a href="https://github.com/eslint/eslint/commit/1fea2797801a82a2718814c83dad641dab092bcc"><code>1fea279</code></a> docs: Clarify how to add to tsc agenda (<a href="https://redirect.github.com/eslint/eslint/issues/17084">#17084</a>)</li>
<li>Additional commits viewable in <a href="https://github.com/eslint/eslint/compare/v8.37.0...v8.39.0">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=eslint&package-manager=npm_and_yarn&previous-version=8.37.0&new-version=8.39.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>


Patch:
diff --git a/package-lock.json b/package-lock.json
index 3009696..4cf9493 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -710,9 +710,9 @@
       }
     },
     "node_modules/@eslint/js": {
-      "version": "8.37.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.37.0.tgz",
-      "integrity": "sha512-x5vzdtOOGgFVDCUs81QRB2+liax8rFg3+7hqM+QhBG0/G3F1ZsoYl97UrqgHgQ9KKT7G6c4V+aTUCgu/n22v1A==",
+      "version": "8.39.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.39.0.tgz",
+      "integrity": "sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==",
       "dev": true,
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -1562,23 +1562,6 @@
         "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "node_modules/@typescript-eslint/scope-manager": {
-      "version": "5.57.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.57.1.tgz",
-      "integrity": "sha512-N/RrBwEUKMIYxSKl0oDK5sFVHd6VI7p9K5MyUlVYAY6dyNb/wHUqndkTd3XhpGlXgnQsBkRZuu4f9kAHghvgPw==",
-      "dev": true,
-      "dependencies": {
-        "@typescript-eslint/types": "5.57.1",
-        "@typescript-eslint/visitor-keys": "5.57.1"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
     "node_modules/@typescript-eslint/type-utils": {
       "version": "5.59.1",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.1.tgz",
@@ -1663,46 +1646,6 @@
         "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "node_modules/@typescript-eslint/types": {
-      "version": "5.57.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.57.1.tgz",
-      "integrity": "sha512-bSs4LOgyV3bJ08F5RDqO2KXqg3WAdwHCu06zOqcQ6vqbTJizyBhuh1o1ImC69X4bV2g1OJxbH71PJqiO7Y1RuA==",
-      "dev": true,
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "5.57.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.57.1.tgz",
-      "integrity": "sha512-A2MZqD8gNT0qHKbk2wRspg7cHbCDCk2tcqt6ScCFLr5Ru8cn+TCfM786DjPhqwseiS+PrYwcXht5ztpEQ6TFTw==",
-      "dev": true,
-      "dependencies": {
-        "@typescript-eslint/types": "5.57.1",
-        "@typescript-eslint/visitor-keys": "5.57.1",
-        "debug": "^4.3.4",
-        "globby": "^11.1.0",
-        "is-glob": "^4.0.3",
-        "semver": "^7.3.7",
-        "tsutils": "^3.21.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
     "node_modules/@typescript-eslint/utils": {
       "version": "5.59.1",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.1.tgz",
@@ -1803,23 +1746,6 @@
         "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "5.57.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.57.1.tgz",
-      "integrity": "sha512-RjQrAniDU0CEk5r7iphkm731zKlFiUjvcBS2yHAg8WWqFMCaCrD0rKEVOMUyMMcbGPZ0bPp56srkGWrgfZqLRA==",
-      "dev": true,
-      "dependencies": {
-        "@typescript-eslint/types": "5.57.1",
-        "eslint-visitor-keys": "^3.3.0"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
     "node_modules/acorn": {
       "version": "8.8.0",
       "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz",
@@ -2454,9 +2380,9 @@
       }
     },
     "node_modules/diff-sequences": {
-      "version": "29.3.1",
-      "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.3.1.tgz",
-      "integrity": "sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==",
+      "version": "29.4.3",
+      "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz",
+      "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==",
       "dev": true,
       "engines": {
         "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
@@ -2632,15 +2558,15 @@
       }
     },
     "node_modules/eslint": {
-      "version": "8.37.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.37.0.tgz",
-      "integrity": "sha512-NU3Ps9nI05GUoVMxcZx1J8CNR6xOvUT4jAUMH5+z8lpp3aEdPVCImKw6PWG4PY+Vfkpr+jvMpxs/qoE7wq0sPw==",
+      "version": "8.39.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.39.0.tgz",
+      "integrity": "sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og==",
       "dev": true,
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.2.0",
         "@eslint-community/regexpp": "^4.4.0",
         "@eslint/eslintrc": "^2.0.2",
-        "@eslint/js": "8.37.0",
+        "@eslint/js": "8.39.0",
         "@humanwhocodes/config-array": "^0.11.8",
         "@humanwhocodes/module-importer": "^1.0.1",
         "@nodelib/fs.walk": "^1.2.8",
@@ -2650,7 +2576,7 @@
         "debug": "^4.3.2",
         "doctrine": "^3.0.0",
         "escape-string-regexp": "^4.0.0",
-        "eslint-scope": "^7.1.1",
+        "eslint-scope": "^7.2.0",
         "eslint-visitor-keys": "^3.4.0",
         "espree": "^9.5.1",
         "esquery": "^1.4.2",
@@ -2747,9 +2673,9 @@
       }
     },
     "node_modules/eslint/node_modules/eslint-scope": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
-      "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz",
+      "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==",
       "dev": true,
       "dependencies": {
         "esrecurse": "^4.3.0",
@@ -2757,6 +2683,9 @@
       },
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
       }
     },
     "node_modules/eslint/node_modules/estraverse": {
@@ -3807,36 +3736,36 @@
       }
     },
     "node_modules/jest-diff": {
-      "version": "29.3.1",
-      "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.3.1.tgz",
-      "integrity": "sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw==",
+      "version": "29.5.0",
+      "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz",
+      "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==",
       "dev": true,
       "dependencies": {
         "chalk": "^4.0.0",
-        "diff-sequences": "^29.3.1",
-        "jest-get-type": "^29.2.0",
-        "pretty-format": "^29.3.1"
+        "diff-sequences": "^29.4.3",
+        "jest-get-type": "^29.4.3",
+        "pretty-format": "^29.5.0"
       },
       "engines": {
         "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
     "node_modules/jest-diff/node_modules/@jest/schemas": {
-      "version": "29.0.0",
-      "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz",
-      "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==",
+      "version": "29.4.3",
+      "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz",
+      "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==",
       "dev": true,
       "dependencies": {
-        "@sinclair/typebox": "^0.24.1"
+        "@sinclair/typebox": "^0.25.16"
       },
       "engines": {
         "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
     "node_modules/jest-diff/node_modules/@sinclair/typebox": {
-      "version": "0.24.51",
-      "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz",
-      "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==",
+      "version": "0.25.24",
+      "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz",
+      "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==",
       "dev": true
     },
     "node_modules/jest-diff/node_modules/ansi-styles": {
@@ -3852,21 +3781,21 @@
       }
     },
     "node_modules/jest-diff/node_modules/jest-get-type": {
-      "version": "29.2.0",
-      "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz",
-      "integrity": "sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==",
+      "version": "29.4.3",
+      "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz",
+      "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==",
       "dev": true,
       "engines": {
         "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
     "node_modules/jest-diff/node_modules/pretty-format": {
-      "version": "29.3.1",
-      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz",
-      "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==",
+      "version": "29.5.0",
+      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+      "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
       "dev": true,
       "dependencies": {
-        "@jest/schemas": "^29.0.0",
+        "@jest/schemas": "^29.4.3",
         "ansi-styles": "^5.0.0",
         "react-is": "^18.0.0"
       },
@@ -4084,16 +4013,16 @@
       }
     },
     "node_modules/jest-mock-extended": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/jest-mock-extended/-/jest-mock-extended-3.0.1.tgz",
-      "integrity": "sha512-RF4Ow8pXvbRuEcCTj56oYHmig5311BSFvbEGxPNYL51wGKGu93MvVQgx0UpFmjqyBXIcElkZo2Rke88kR1iSKQ==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/jest-mock-extended/-/jest-mock-extended-3.0.4.tgz",
+      "integrity": "sha512-2ynEZ7IEJNrhrgshklDMhrOdnmW4Nt+PhkyRqZxRgpwMo7JjmFWMzyp0+eSyk+H9KK1QjXI5xTZIw6x7cVDcRg==",
       "dev": true,
       "dependencies": {
         "ts-essentials": "^7.0.3"
       },
       "peerDependencies": {
         "jest": "^24.0.0 || ^25.0.0 || ^26.0.0 || ^27.0.0 || ^28.0.0 || ^29.0.0",
-        "typescript": "^3.0.0 || ^4.0.0"
+        "typescript": "^3.0.0 || ^4.0.0 || ^5.0.0"
       }
     },
     "node_modules/jest-pnp-resolver": {
@@ -5888,9 +5817,9 @@
       "dev": true
     },
     "node_modules/tree-sitter-cli": {
-      "version": "0.20.7",
-      "resolved": "https://registry.npmjs.org/tree-sitter-cli/-/tree-sitter-cli-0.20.7.tgz",
-      "integrity": "sha512-MHABT8oCPr4D0fatsPo6ATQ9H4h9vHpPRjlxkxJs80tpfAEKGn6A1zU3eqfCKBcgmfZDe9CiL3rKOGMzYHwA3w==",
+      "version": "0.20.8",
+      "resolved": "https://registry.npmjs.org/tree-sitter-cli/-/tree-sitter-cli-0.20.8.tgz",
+      "integrity": "sha512-XjTcS3wdTy/2cc/ptMLc/WRyOLECRYcMTrSWyhZnj1oGSOWbHLTklgsgRICU3cPfb0vy+oZCC33M43u6R1HSCA==",
       "dev": true,
       "hasInstallScript": true,
       "bin": {
@@ -6235,31 +6164,31 @@
       }
     },
     "node_modules/vscode-jsonrpc": {
-      "version": "8.0.2",
-      "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.2.tgz",
-      "integrity": "sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ==",
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz",
+      "integrity": "sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==",
       "engines": {
         "node": ">=14.0.0"
       }
     },
     "node_modules/vscode-languageserver": {
-      "version": "8.0.2",
-      "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.0.2.tgz",
-      "integrity": "sha512-bpEt2ggPxKzsAOZlXmCJ50bV7VrxwCS5BI4+egUmure/oI/t4OlFzi/YNtVvY24A2UDOZAgwFGgnZPwqSJubkA==",
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.1.0.tgz",
+      "integrity": "sha512-eUt8f1z2N2IEUDBsKaNapkz7jl5QpskN2Y0G01T/ItMxBxw1fJwvtySGB9QMecatne8jFIWJGWI61dWjyTLQsw==",
       "dependencies": {
-        "vscode-languageserver-protocol": "3.17.2"
+        "vscode-languageserver-protocol": "3.17.3"
       },
       "bin": {
         "installServerIntoExtension": "bin/installServerIntoExtension"
       }
     },
     "node_modules/vscode-languageserver-protocol": {
-      "version": "3.17.2",
-      "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.2.tgz",
-      "integrity": "sha512-8kYisQ3z/SQ2kyjlNeQxbkkTNmVFoQCqkmGrzLH6A9ecPlgTbp3wDTnUNqaUxYr4vlAcloxx8zwy7G5WdguYNg==",
+      "version": "3.17.3",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz",
+      "integrity": "sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==",
       "dependencies": {
-        "vscode-jsonrpc": "8.0.2",
-        "vscode-languageserver-types": "3.17.2"
+        "vscode-jsonrpc": "8.1.0",
+        "vscode-languageserver-types": "3.17.3"
       }
     },
     "node_modules/vscode-languageserver-textdocument": {
@@ -6268,9 +6197,9 @@
       "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q=="
     },
     "node_modules/vscode-languageserver-types": {
-      "version": "3.17.2",
-      "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz",
-      "integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA=="
+      "version": "3.17.3",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz",
+      "integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA=="
     },
     "node_modules/vscode-uri": {
       "version": "3.0.7",
@@ -6939,9 +6868,9 @@
       }
     },
     "@eslint/js": {
-      "version": "8.37.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.37.0.tgz",
-      "integrity": "sha512-x5vzdtOOGgFVDCUs81QRB2+liax8rFg3+7hqM+QhBG0/G3F1ZsoYl97UrqgHgQ9KKT7G6c4V+aTUCgu/n22v1A==",
+      "version": "8.39.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.39.0.tgz",
+      "integrity": "sha512-kf9RB0Fg7NZfap83B3QOqOGg9QmD9yBudqQXzzOtn3i4y7ZUXe5ONeW34Gwi+TxhH4mvj72R1Zc300KUMa9Bng==",
       "dev": true
     },
     "@humanwhocodes/config-array": {
@@ -7611,16 +7540,6 @@
         }
       }
     },
-    "@typescript-eslint/scope-manager": {
-      "version": "5.57.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.57.1.tgz",
-      "integrity": "sha512-N/RrBwEUKMIYxSKl0oDK5sFVHd6VI7p9K5MyUlVYAY6dyNb/wHUqndkTd3XhpGlXgnQsBkRZuu4f9kAHghvgPw==",
-      "dev": true,
-      "requires": {
-        "@typescript-eslint/types": "5.57.1",
-        "@typescript-eslint/visitor-keys": "5.57.1"
-      }
-    },
     "@typescript-eslint/type-utils": {
       "version": "5.59.1",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.1.tgz",
@@ -7666,27 +7585,6 @@
         }
       }
     },
-    "@typescript-eslint/types": {
-      "version": "5.57.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.57.1.tgz",
-      "integrity": "sha512-bSs4LOgyV3bJ08F5RDqO2KXqg3WAdwHCu06zOqcQ6vqbTJizyBhuh1o1ImC69X4bV2g1OJxbH71PJqiO7Y1RuA==",
-      "dev": true
-    },
-    "@typescript-eslint/typescript-estree": {
-      "version": "5.57.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.57.1.tgz",
-      "integrity": "sha512-A2MZqD8gNT0qHKbk2wRspg7cHbCDCk2tcqt6ScCFLr5Ru8cn+TCfM786DjPhqwseiS+PrYwcXht5ztpEQ6TFTw==",
-      "dev": true,
-      "requires": {
-        "@typescript-eslint/types": "5.57.1",
-        "@typescript-eslint/visitor-keys": "5.57.1",
-        "debug": "^4.3.4",
-        "globby": "^11.1.0",
-        "is-glob": "^4.0.3",
-        "semver": "^7.3.7",
-        "tsutils": "^3.21.0"
-      }
-    },
     "@typescript-eslint/utils": {
       "version": "5.59.1",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.1.tgz",
@@ -7746,16 +7644,6 @@
         }
       }
     },
-    "@typescript-eslint/visitor-keys": {
-      "version": "5.57.1",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.57.1.tgz",
-      "integrity": "sha512-RjQrAniDU0CEk5r7iphkm731zKlFiUjvcBS2yHAg8WWqFMCaCrD0rKEVOMUyMMcbGPZ0bPp56srkGWrgfZqLRA==",
-      "dev": true,
-      "requires": {
-        "@typescript-eslint/types": "5.57.1",
-        "eslint-visitor-keys": "^3.3.0"
-      }
-    },
     "acorn": {
       "version": "8.8.0",
       "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz",
@@ -8219,9 +8107,9 @@
       "dev": true
     },
     "diff-sequences": {
-      "version": "29.3.1",
-      "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.3.1.tgz",
-      "integrity": "sha512-hlM3QR272NXCi4pq+N4Kok4kOp6EsgOM3ZSpJI7Da3UAs+Ttsi8MRmB6trM/lhyzUxGfOgnpkHtgqm5Q/CTcfQ==",
+      "version": "29.4.3",
+      "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz",
+      "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==",
       "dev": true
     },
     "dir-glob": {
@@ -8345,15 +8233,15 @@
       "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
     },
     "eslint": {
-      "version": "8.37.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.37.0.tgz",
-      "integrity": "sha512-NU3Ps9nI05GUoVMxcZx1J8CNR6xOvUT4jAUMH5+z8lpp3aEdPVCImKw6PWG4PY+Vfkpr+jvMpxs/qoE7wq0sPw==",
+      "version": "8.39.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.39.0.tgz",
+      "integrity": "sha512-mwiok6cy7KTW7rBpo05k6+p4YVZByLNjAZ/ACB9DRCu4YDRwjXI01tWHp6KAUWelsBetTxKK/2sHB0vdS8Z2Og==",
       "dev": true,
       "requires": {
         "@eslint-community/eslint-utils": "^4.2.0",
         "@eslint-community/regexpp": "^4.4.0",
         "@eslint/eslintrc": "^2.0.2",
-        "@eslint/js": "8.37.0",
+        "@eslint/js": "8.39.0",
         "@humanwhocodes/config-array": "^0.11.8",
         "@humanwhocodes/module-importer": "^1.0.1",
         "@nodelib/fs.walk": "^1.2.8",
@@ -8363,7 +8251,7 @@
         "debug": "^4.3.2",
         "doctrine": "^3.0.0",
         "escape-string-regexp": "^4.0.0",
-        "eslint-scope": "^7.1.1",
+        "eslint-scope": "^7.2.0",
         "eslint-visitor-keys": "^3.4.0",
         "espree": "^9.5.1",
         "esquery": "^1.4.2",
@@ -8393,9 +8281,9 @@
       },
       "dependencies": {
         "eslint-scope": {
-          "version": "7.1.1",
-          "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
-          "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz",
+          "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==",
           "dev": true,
           "requires": {
             "esrecurse": "^4.3.0",
@@ -9181,30 +9069,30 @@
       }
     },
     "jest-diff": {
-      "version": "29.3.1",
-      "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.3.1.tgz",
-      "integrity": "sha512-vU8vyiO7568tmin2lA3r2DP8oRvzhvRcD4DjpXc6uGveQodyk7CKLhQlCSiwgx3g0pFaE88/KLZ0yaTWMc4Uiw==",
+      "version": "29.5.0",
+      "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz",
+      "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==",
       "dev": true,
       "requires": {
         "chalk": "^4.0.0",
-        "diff-sequences": "^29.3.1",
-        "jest-get-type": "^29.2.0",
-        "pretty-format": "^29.3.1"
+        "diff-sequences": "^29.4.3",
+        "jest-get-type": "^29.4.3",
+        "pretty-format": "^29.5.0"
       },
       "dependencies": {
         "@jest/schemas": {
-          "version": "29.0.0",
-          "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz",
-          "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==",
+          "version": "29.4.3",
+          "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz",
+          "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==",
           "dev": true,
           "requires": {
-            "@sinclair/typebox": "^0.24.1"
+            "@sinclair/typebox": "^0.25.16"
           }
         },
         "@sinclair/typebox": {
-          "version": "0.24.51",
-          "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz",
-          "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==",
+          "version": "0.25.24",
+          "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz",
+          "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==",
           "dev": true
         },
         "ansi-styles": {
@@ -9214,18 +9102,18 @@
           "dev": true
         },
         "jest-get-type": {
-          "version": "29.2.0",
-          "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz",
-          "integrity": "sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==",
+          "version": "29.4.3",
+          "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz",
+          "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==",
           "dev": true
         },
         "pretty-format": {
-          "version": "29.3.1",
-          "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.3.1.tgz",
-          "integrity": "sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==",
+          "version": "29.5.0",
+          "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+          "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
           "dev": true,
           "requires": {
-            "@jest/schemas": "^29.0.0",
+            "@jest/schemas": "^29.4.3",
             "ansi-styles": "^5.0.0",
             "react-is": "^18.0.0"
           }
@@ -9399,9 +9287,9 @@
       }
     },
     "jest-mock-extended": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/jest-mock-extended/-/jest-mock-extended-3.0.1.tgz",
-      "integrity": "sha512-RF4Ow8pXvbRuEcCTj56oYHmig5311BSFvbEGxPNYL51wGKGu93MvVQgx0UpFmjqyBXIcElkZo2Rke88kR1iSKQ==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/jest-mock-extended/-/jest-mock-extended-3.0.4.tgz",
+      "integrity": "sha512-2ynEZ7IEJNrhrgshklDMhrOdnmW4Nt+PhkyRqZxRgpwMo7JjmFWMzyp0+eSyk+H9KK1QjXI5xTZIw6x7cVDcRg==",
       "dev": true,
       "requires": {
         "ts-essentials": "^7.0.3"
@@ -10749,9 +10637,9 @@
       "dev": true
     },
     "tree-sitter-cli": {
-      "version": "0.20.7",
-      "resolved": "https://registry.npmjs.org/tree-sitter-cli/-/tree-sitter-cli-0.20.7.tgz",
-      "integrity": "sha512-MHABT8oCPr4D0fatsPo6ATQ9H4h9vHpPRjlxkxJs80tpfAEKGn6A1zU3eqfCKBcgmfZDe9CiL3rKOGMzYHwA3w==",
+      "version": "0.20.8",
+      "resolved": "https://registry.npmjs.org/tree-sitter-cli/-/tree-sitter-cli-0.20.8.tgz",
+      "integrity": "sha512-XjTcS3wdTy/2cc/ptMLc/WRyOLECRYcMTrSWyhZnj1oGSOWbHLTklgsgRICU3cPfb0vy+oZCC33M43u6R1HSCA==",
       "dev": true
     },
     "trough": {
@@ -10978,25 +10866,25 @@
       }
     },
     "vscode-jsonrpc": {
-      "version": "8.0.2",
-      "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.2.tgz",
-      "integrity": "sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ=="
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz",
+      "integrity": "sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw=="
     },
     "vscode-languageserver": {
-      "version": "8.0.2",
-      "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.0.2.tgz",
-      "integrity": "sha512-bpEt2ggPxKzsAOZlXmCJ50bV7VrxwCS5BI4+egUmure/oI/t4OlFzi/YNtVvY24A2UDOZAgwFGgnZPwqSJubkA==",
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-8.1.0.tgz",
+      "integrity": "sha512-eUt8f1z2N2IEUDBsKaNapkz7jl5QpskN2Y0G01T/ItMxBxw1fJwvtySGB9QMecatne8jFIWJGWI61dWjyTLQsw==",
       "requires": {
-        "vscode-languageserver-protocol": "3.17.2"
+        "vscode-languageserver-protocol": "3.17.3"
       }
     },
     "vscode-languageserver-protocol": {
-      "version": "3.17.2",
-      "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.2.tgz",
-      "integrity": "sha512-8kYisQ3z/SQ2kyjlNeQxbkkTNmVFoQCqkmGrzLH6A9ecPlgTbp3wDTnUNqaUxYr4vlAcloxx8zwy7G5WdguYNg==",
+      "version": "3.17.3",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz",
+      "integrity": "sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==",
       "requires": {
-        "vscode-jsonrpc": "8.0.2",
-        "vscode-languageserver-types": "3.17.2"
+        "vscode-jsonrpc": "8.1.0",
+        "vscode-languageserver-types": "3.17.3"
       }
     },
     "vscode-languageserver-textdocument": {
@@ -11005,9 +10893,9 @@
       "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q=="
     },
     "vscode-languageserver-types": {
-      "version": "3.17.2",
-      "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.2.tgz",
-      "integrity": "sha512-zHhCWatviizPIq9B7Vh9uvrH6x3sK8itC84HkamnBWoDFJtzBf7SWlpLCZUit72b3os45h6RWQNC9xHRDF8dRA=="
+      "version": "3.17.3",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz",
+      "integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA=="
     },
     "vscode-uri": {
       "version": "3.0.7",
diff --git a/src/compiler/imports.ts b/src/compiler/imports.ts
index 83262a6..0a72b08 100644
--- a/src/compiler/imports.ts
+++ b/src/compiler/imports.ts
@@ -67,6 +67,10 @@ export class Imports {
     return this.modules.get(name);
   }
 
+  public getModules(): IImport[] {
+    return [...this.modules.values()];
+  }
+
   public forEach(callbackfn: (value: IImport) => void): void {
     this.vars.forEach(callbackfn);
     this.types.forEach(callbackfn);
diff --git a/src/compiler/references.ts b/src/compiler/references.ts
index 5ef5c87..dab1a34 100644
--- a/src/compiler/references.ts
+++ b/src/compiler/references.ts
@@ -17,15 +17,21 @@ export class References {
     const checker = program.getTypeChecker();
 
     if (definitionNode) {
-      const refSourceTree = forest.getByUri(definitionNode.node.tree.uri);
+      const definitionSourceFile = forest.getByUri(
+        definitionNode.node.tree.uri,
+      );
 
-      if (refSourceTree) {
+      if (definitionSourceFile) {
         const imports: { [uri: string]: Imports } = {};
         forest.treeMap.forEach((sourceFile) => {
-          imports[sourceFile.uri] = checker.getAllImports(sourceFile);
+          if (sourceFile.writeable) {
+            imports[sourceFile.uri] = checker.getAllImports(sourceFile);
+          }
         });
 
-        const moduleNameNode = TreeUtils.getModuleNameNode(refSourceTree.tree);
+        const moduleNameNode = TreeUtils.getModuleNameNode(
+          definitionSourceFile.tree,
+        );
         switch (definitionNode.type) {
           case "Function":
             {
@@ -34,7 +40,7 @@ export class References {
                   definitionNode.node.parent,
                 )?.childForFieldName("name");
 
-                if (annotationNameNode && refSourceTree.writeable) {
+                if (annotationNameNode && definitionSourceFile.writeable) {
                   references.push({
                     node: annotationNameNode,
                     uri: definitionNode.node.tree.uri,
@@ -51,7 +57,7 @@ export class References {
                   : undefined);
               if (functionNameNode) {
                 const functionName = functionNameNode.text;
-                if (refSourceTree.writeable) {
+                if (definitionSourceFile.writeable) {
                   references.push({
                     node: functionNameNode,
                     uri: definitionNode.node.tree.uri,
@@ -65,11 +71,11 @@ export class References {
                 const localFunctions = letParent
                   ? this.findFunctionCalls(letParent, functionName)
                   : this.findFunctionCalls(
-                      refSourceTree.tree.rootNode,
+                      definitionSourceFile.tree.rootNode,
                       functionName,
                     );
 
-                if (localFunctions && refSourceTree.writeable) {
+                if (localFunctions && definitionSourceFile.writeable) {
                   references.push(
                     ...localFunctions.map((node) => {
                       return { node, uri: definitionNode.node.tree.uri };
@@ -78,12 +84,12 @@ export class References {
                 }
 
                 const isExposedFunction = TreeUtils.isExposedFunctionOrPort(
-                  refSourceTree.tree,
+                  definitionSourceFile.tree,
                   functionName,
                 );
                 if (isExposedFunction && !letParent) {
                   const moduleDeclarationNode = TreeUtils.findModuleDeclaration(
-                    refSourceTree.tree,
+                    definitionSourceFile.tree,
                   );
                   if (moduleDeclarationNode) {
                     const exposedNode = TreeUtils.findExposedFunctionNode(
@@ -91,7 +97,7 @@ export class References {
                       functionName,
                     );
 
-                    if (exposedNode && refSourceTree.writeable) {
+                    if (exposedNode && definitionSourceFile.writeable) {
                       references.push({
                         node: exposedNode,
                         uri: definitionNode.node.tree.uri,
@@ -181,7 +187,7 @@ export class References {
                 );
               if (portNameNode) {
                 const portName = portNameNode.text;
-                if (refSourceTree.writeable) {
+                if (definitionSourceFile.writeable) {
                   references.push({
                     node: portNameNode,
                     uri: definitionNode.node.tree.uri,
@@ -189,11 +195,11 @@ export class References {
                 }
 
                 const localCallsToPort = this.findFunctionCalls(
-                  refSourceTree.tree.rootNode,
+                  definitionSourceFile.tree.rootNode,
                   portName,
                 );
 
-                if (localCallsToPort && refSourceTree.writeable) {
+                if (localCallsToPort && definitionSourceFile.writeable) {
                   references.push(
                     ...localCallsToPort.map((node) => {
                       return { node, uri: definitionNode.node.tree.uri };
@@ -202,12 +208,12 @@ export class References {
                 }
 
                 const isExposedPort = TreeUtils.isExposedFunctionOrPort(
-                  refSourceTree.tree,
+                  definitionSourceFile.tree,
                   portName,
                 );
                 if (isExposedPort) {
                   const moduleDeclarationNode = TreeUtils.findModuleDeclaration(
-                    refSourceTree.tree,
+                    definitionSourceFile.tree,
                   );
                   if (moduleDeclarationNode) {
                     const exposedNode = TreeUtils.findExposedFunctionNode(
@@ -215,7 +221,7 @@ export class References {
                       portName,
                     );
 
-                    if (exposedNode && refSourceTree.writeable) {
+                    if (exposedNode && definitionSourceFile.writeable) {
                       references.push({
                         node: exposedNode,
                         uri: definitionNode.node.tree.uri,
@@ -307,7 +313,7 @@ export class References {
 
               if (typeOrTypeAliasNameNode) {
                 const typeOrTypeAliasName = typeOrTypeAliasNameNode.text;
-                if (refSourceTree.writeable) {
+                if (definitionSourceFile.writeable) {
                   references.push({
                     node: typeOrTypeAliasNameNode,
                     uri: definitionNode.node.tree.uri,
@@ -315,10 +321,10 @@ export class References {
                 }
 
                 const localFunctions = TreeUtils.findTypeOrTypeAliasCalls(
-                  refSourceTree.tree,
+                  definitionSourceFile.tree,
                   typeOrTypeAliasName,
                 );
-                if (localFunctions && refSourceTree.writeable) {
+                if (localFunctions && definitionSourceFile.writeable) {
                   references.push(
                     ...localFunctions.map((node) => {
                       return { node, uri: definitionNode.node.tree.uri };
@@ -327,12 +333,12 @@ export class References {
                 }
 
                 const isExposed = TreeUtils.isExposedTypeOrTypeAlias(
-                  refSourceTree.tree,
+                  definitionSourceFile.tree,
                   typeOrTypeAliasName,
                 );
                 if (isExposed) {
                   const moduleDeclarationNode = TreeUtils.findModuleDeclaration(
-                    refSourceTree.tree,
+                    definitionSourceFile.tree,
                   );
                   if (moduleDeclarationNode) {
                     const exposedNode =
@@ -341,7 +347,7 @@ export class References {
                         typeOrTypeAliasName,
                       );
 
-                    if (exposedNode && refSourceTree.writeable) {
+                    if (exposedNode && definitionSourceFile.writeable) {
                       references.push({
                         node: exposedNode,
                         uri: definitionNode.node.tree.uri,
@@ -424,7 +430,7 @@ export class References {
 
           case "Module":
             if (moduleNameNode) {
-              if (refSourceTree.writeable) {
+              if (definitionSourceFile.writeable) {
                 references.push({
                   node: moduleNameNode,
                   uri: definitionNode.node.tree.uri,
@@ -470,7 +476,7 @@ export class References {
             break;
 
           case "FunctionParameter":
-            if (refSourceTree.writeable) {
+            if (definitionSourceFile.writeable) {
               references.push({
                 node: definitionNode.node,
                 uri: definitionNode.node.tree.uri,
@@ -505,7 +511,7 @@ export class References {
             break;
 
           case "CasePattern":
-            if (refSourceTree.writeable) {
+            if (definitionSourceFile.writeable) {
               references.push({
                 node: definitionNode.node,
                 uri: definitionNode.node.tree.uri,
@@ -537,7 +543,7 @@ export class References {
             break;
 
           case "AnonymousFunctionParameter":
-            if (refSourceTree.writeable) {
+            if (definitionSourceFile.writeable) {
               references.push({
                 node: definitionNode.node,
                 uri: definitionNode.node.tree.uri,
@@ -568,14 +574,14 @@ export class References {
           case "UnionConstructor":
             if (definitionNode.node.firstChild && moduleNameNode) {
               const nameNode = definitionNode.node.firstChild;
-              if (refSourceTree.writeable) {
+              if (definitionSourceFile.writeable) {
                 references.push({
                   node: nameNode,
                   uri: definitionNode.node.tree.uri,
                 });
                 const unionConstructorCalls =
                   TreeUtils.findUnionConstructorCalls(
-                    refSourceTree.tree,
+                    definitionSourceFile.tree,
                     nameNode.text,
                   );
 
@@ -650,35 +656,23 @@ export class References {
                   ...this.getFieldReferences(
                     fieldName.text,
                     definitionNode,
-                    refSourceTree,
+                    definitionSourceFile,
                     program,
                   ),
                 );
 
-                for (const uri in imports) {
-                  if (uri === definitionNode.node.tree.uri) {
-                    continue;
-                  }
-
-                  const needsToBeChecked = forest
-                    .getByUri(uri)
-                    ?.resolvedModules?.get(moduleNameNode?.text ?? "");
-
-                  if (needsToBeChecked) {
-                    const treeToCheck = forest.getByUri(uri);
-
-                    if (treeToCheck && treeToCheck.writeable) {
-                      references.push(
-                        ...this.getFieldReferences(
-                          fieldName.text,
-                          definitionNode,
-                          treeToCheck,
-                          program,
-                        ),
-                      );
-                    }
-                  }
-                }
+                checker
+                  .getImportingModules(definitionSourceFile)
+                  .forEach((sourceFileToCheck) =>
+                    references.push(
+                      ...this.getFieldReferences(
+                        fieldName.text,
+                        definitionNode,
+                        sourceFileToCheck,
+                        program,
+                      ),
+                    ),
+                  );
               }
             }
             break;
diff --git a/src/compiler/typeChecker.ts b/src/compiler/typeChecker.ts
index bf35278..127a862 100644
--- a/src/compiler/typeChecker.ts
+++ b/src/compiler/typeChecker.ts
@@ -72,6 +72,10 @@ export interface TypeChecker {
     sourceFile: ISourceFile,
   ) => DefinitionResult;
   getAllImports: (sourceFile: ISourceFile) => Imports;
+  getImportingModules: (
+    sourceFile: ISourceFile,
+    directImportOnly?: boolean,
+  ) => ISourceFile[];
   getQualifierForName: (
     sourceFile: ISourceFile,
     module: string,
@@ -101,6 +105,7 @@ export interface TypeChecker {
 export function createTypeChecker(program: IProgram): TypeChecker {
   const forest = program.getForest();
   const imports = new Map<string, Imports>();
+  let importModuleGraph: Map<string, ISourceFile[]>;
 
   const diagnostics = new DiagnosticsCollection();
   const suggestionDiagnostics = new DiagnosticsCollection();
@@ -119,6 +124,7 @@ export function createTypeChecker(program: IProgram): TypeChecker {
     findDefinition,
     findDefinitionShallow,
     getAllImports,
+    getImportingModules,
     getQualifierForName,
     typeToString,
     getDiagnostics,
@@ -338,6 +344,49 @@ export function createTypeChecker(program: IProgram): TypeChecker {
     return allImports;
   }
 
+  function getImportingModules(
+    sourceFile: ISourceFile,
+    directImportOnly?: boolean,
+  ): ISourceFile[] {
+    if (!importModuleGraph) {
+      importModuleGraph = new Map<string, ISourceFile[]>();
+
+      forest.treeMap.forEach((sourceFile) => {
+        if (sourceFile.writeable) {
+          getAllImports(sourceFile)
+            .getModules()
+            .forEach((module) => {
+              const existingGraph = importModuleGraph.get(
+                module.fromModule.uri,
+              );
+
+              if (existingGraph) {
+                existingGraph.push(sourceFile);
+              } else {
+                importModuleGraph.set(module.fromModule.uri, [sourceFile]);
+              }
+            });
+        }
+      });
+    }
+
+    if (directImportOnly) {
+      return importModuleGraph.get(sourceFile.uri) ?? [];
+    }
+
+    const getAllDescendantImports = (source: ISourceFile): ISourceFile[] => {
+      const imports = importModuleGraph.get(source.uri) ?? [];
+
+      imports.slice(0).forEach((directImport) => {
+        imports.push(...getAllDescendantImports(directImport));
+      });
+
+      return imports;
+    };
+
+    return getAllDescendantImports(sourceFile);
+  }
+
   function findImport(
     sourceFile: ISourceFile,
     name: string,


Test patch:
diff --git a/test/referencesProviderTests/patternReferences.test.ts b/test/referencesProviderTests/patternReferences.test.ts
index bc8da94..8a93caa 100644
--- a/test/referencesProviderTests/patternReferences.test.ts
+++ b/test/referencesProviderTests/patternReferences.test.ts
@@ -1,6 +1,6 @@
 import { ReferencesProviderTestBase } from "./referencesProviderTestBase";
 
-describe("functionReferences", () => {
+describe("patternReferences", () => {
   const testBase = new ReferencesProviderTestBase();
 
   it(`let destructured patterns should have references`, async () => {
diff --git a/test/referencesProviderTests/recordFieldReferences.test.ts b/test/referencesProviderTests/recordFieldReferences.test.ts
new file mode 100644
index 0000000..78df41b
--- /dev/null
+++ b/test/referencesProviderTests/recordFieldReferences.test.ts
@@ -0,0 +1,188 @@
+import { ReferencesProviderTestBase } from "./referencesProviderTestBase";
+
+describe("recordFieldReferences", () => {
+  const testBase = new ReferencesProviderTestBase();
+
+  it(`record used in the same module`, async () => {
+    const source = `
+--@ Module.elm
+module Module exposing (foo)
+
+type alias Foo = { field : String }
+                   --^
+
+foo : Foo -> String
+foo arg  =
+    arg.field
+        --X
+
+update : Foo -> Foo
+update arg =
+    { arg | field = "" }
+            --X
+
+test : Foo
+test =
+    { field = "" }
+      --X
+
+destructure : Foo -> String
+destructure { field } =
+              --X
+    field
+    --X
+`;
+    await testBase.testReferences(source);
+  });
+
+  it(`record used in another module`, async () => {
+    const source = `
+--@ Module.elm
+module Module exposing (Foo)
+
+type alias Foo = { field : String }
+                   --^
+
+foo : Foo -> String
+foo arg  =
+    arg.field
+        --X
+
+update : Foo -> Foo
+update arg =
+    { arg | field = "" }
+            --X
+
+test : Foo
+test =
+    { field = "" }
+      --X
+
+destructure : Foo -> String
+destructure { field } =
+              --X
+    field
+    --X
+
+--@ Bar.elm
+module Bar exposing (..)
+
+import Module exposing (Foo)
+
+foo : Foo -> String
+foo arg  =
+    arg.field
+        --X
+
+update : Foo -> Foo
+update arg =
+    { arg | field = "" }
+            --X
+
+test : Foo
+test =
+    { field = "" }
+      --X
+
+destructure : Foo -> String
+destructure { field } =
+              --X
+    field
+    --X
+
+`;
+    await testBase.testReferences(source);
+  });
+
+  it(`record used in another module indirectly`, async () => {
+    const source = `
+--@ Module.elm
+module Module exposing (Foo)
+
+type alias Foo = { field : String }
+                   --^
+
+foo : Foo -> String
+foo arg  =
+    arg.field
+        --X
+
+update : Foo -> Foo
+update arg =
+    { arg | field = "" }
+            --X
+
+test : Foo
+test =
+    { field = "" }
+      --X
+
+destructure : Foo -> String
+destructure { field } =
+              --X
+    field
+    --X
+
+--@ Bar.elm
+module Bar exposing (Bar)
+
+import Module exposing (Foo)
+
+type alias Bar = { foo : Foo }
+
+foo : Foo -> String
+foo arg  =
+    arg.field
+        --X
+
+update : Foo -> Foo
+update arg =
+    { arg | field = "" }
+            --X
+
+test : Foo
+test =
+    { field = "" }
+      --X
+
+destructure : Foo -> String
+destructure { field } =
+              --X
+    field
+    --X
+
+--@ Indirect.elm
+module Indirect exposing (..)
+
+import Bar exposing (Bar)
+
+foo : Bar -> String
+foo arg  =
+    arg.foo.field
+           --X
+
+update : Bar -> Bar
+update arg =
+    let
+      foo = arg.foo
+    in
+    { arg | foo = { foo | field = "" } }
+                          --X
+
+test : Bar
+test =
+    { foo = { field = "" } }
+              --X
+
+destructure : Bar -> String
+destructure { foo } =
+    let
+      { field } = foo
+        --X
+
+    in
+    field
+`;
+    await testBase.testReferences(source);
+  });
+});