This PR re-implements lexing identifiers with a fast path for the most common case - identifiers which are pure ASCII characters, using the new `Source` / `SourcePosition` APIs.
Lexing identifiers is a hot path, and accounts for the majority of the time the Lexer spends. The performance bump from this change is (if I do say so myself!) quite decent.
I've spent a lot of time tuning the implementation, which gained a further 10-15% on the Lexer benchmarks compared to my first, simpler attempt. Some of the design decisions, if they look odd, are likely motivated by gains in performance.
### Techniques
This implementation uses a few different strategies for performance:
* Search byte-by-byte, not char-by-char.
* Process batches of 32 bytes at a time to reduce bounds checks.
* Mark uncommon paths `#[cold]`.
### Structure
The implementation is built in 3 layers:
1. ASCII characters only.
2. ASCII and Unicode characters.
3. `\` escape sequences (and all the above).
`identifier_name_handler` starts at the top layer, and is optimized for consuming ASCII as fast as possible. Each "layer" is considered more uncommon than the previous, and dropping down a layer is a de-opt.
I'm assuming that 95%+ of JavaScript code does not include either Unicode characters or escapes in identifiers, so the speed of the fast path is prioritised.
That said, once a Unicode character is encountered, the next layer does expect to find further Unicode characters, rather than de-opting over and over again. If an identifier *starts* with a Unicode character, it enters the code straight on the 2nd layer, so is not penalised by going through a `#[cold]` boundary. Lexing Unicode is never going to be as fast as ASCII, but still I felt it was important not to penalise it unnecessarily, so as not to be Anglo-centric.
### ASCII search macro
The main ASCII search is implemented as a macro. I found that, for reasons I don't understand, it's significantly faster to have all the code in a single function, even compared to multiple functions marked `#[inline]` or `#[inline(always)]`. The fastest implementation also requires some code to be repeated twice, which is nicer to do with a macro.
This macro, and the `ByteMatchTable` types that go with it, are designed to be re-usable. Next step will be to apply them for whitespace and strings, which should be fairly simple.
Searching in batches of 32 bytes is also designed to be forward-compatible with SIMD.
### Bye bye `AutoCow`
`AutoCow` is removed. Instead, a string-builder is only created if it's needed, when a `\` escape is first encountered. The string builder is also more efficient than `AutoCow` was, as it copies bytes in chunks, rather than 1-by-1.
This won't make much difference for identifiers, as escapes are so rare anyway, but this same technique can be used for strings, where they're more common.
closes#1803
This string is currently unsafe, but I want to get miri working before
introducing more changes.
I want to make a progress from memory leak to unsafe then to safety.
It's harder to do the steps in one go.
In the lexer, most `BYTE_HANDLER`s immediately consume the current char
with `lexer.consume_char()`.
Byte handlers are only called if there's a certain value (or range of
values) for the next char. This is their entire purpose. So in all cases
we know for sure that we're not at EOF, and that the next char is a
single-byte ASCII character.
The compiler, however, doesn't seem to be able to "see through" the
`BYTE_HANDLERS[byte](self)` call and understand these invariants. So it
produces very verbose ASM for `lexer.consume_char()`.
This PR replaces `lexer.consume_char()` in the byte handlers with an
unsafe `lexer.consume_ascii_char()` which skips on to next char with a
single `inc` instruction.
The difference in codegen can be seen here:
https://godbolt.org/z/1ha3cr9W5 (compare the 2 x
`core::ops::function::FnOnce::call_once` handlers).
Downside is that this does introduce a lot of unsafe blocks, but in my
opinion they're all pretty trivial to validate.
---------
Co-authored-by: Boshen <boshenc@gmail.com>
Bumps the dependencies group with 1 update:
[env_logger](https://github.com/rust-cli/env_logger).
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-cli/env_logger/blob/main/CHANGELOG.md">env_logger's
changelog</a>.</em></p>
<blockquote>
<h2>[0.10.1] - 2023-11-10</h2>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="36623f573b"><code>36623f5</code></a>
chore: Release env_logger version 0.10.1</li>
<li><a
href="8a033d8438"><code>8a033d8</code></a>
chore: Fix packaging</li>
<li><a
href="9df7e6c081"><code>9df7e6c</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-cli/env_logger/issues/241">#241</a>
from ChrisDenton/simple-insert</li>
<li><a
href="46ccdd94f5"><code>46ccdd9</code></a>
perf: Replace <code>HashMap</code> with a <code>Vec</code></li>
<li><a
href="bdc96a421f"><code>bdc96a4</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-cli/env_logger/issues/249">#249</a>
from atouchet/v10</li>
<li><a
href="983837c47b"><code>983837c</code></a>
Update links and remove broken badge</li>
<li><a
href="dcd220dfaf"><code>dcd220d</code></a>
Update listed version number</li>
<li><a
href="36b1508ea1"><code>36b1508</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-cli/env_logger/issues/260">#260</a>
from y-yagi/2018-edition</li>
<li><a
href="6f64347c6a"><code>6f64347</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-cli/env_logger/issues/282">#282</a>
from epage/syntax</li>
<li><a
href="b29735781a"><code>b297357</code></a>
chore: Update docs and examples to 2018 edition</li>
<li>Additional commits viewable in <a
href="https://github.com/rust-cli/env_logger/compare/v0.10.0...v0.10.1">compare
view</a></li>
</ul>
</details>
<br />
[](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 show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps the dependencies group with 4 updates:
[regex](https://github.com/rust-lang/regex),
[ropey](https://github.com/cessen/ropey),
[thiserror](https://github.com/dtolnay/thiserror) and
[codspeed-criterion-compat](https://github.com/CodSpeedHQ/codspeed-rust).
Updates `regex` from 1.10.1 to 1.10.2
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/regex/blob/master/CHANGELOG.md">regex's
changelog</a>.</em></p>
<blockquote>
<h1>1.10.2 (2023-10-16)</h1>
<p>This is a new patch release that fixes a search regression where
incorrect
matches could be reported.</p>
<p>Bug fixes:</p>
<ul>
<li>[BUG <a
href="https://redirect.github.com/rust-lang/regex/issues/1110">#1110</a>](<a
href="https://redirect.github.com/rust-lang/regex/issues/1110">rust-lang/regex#1110</a>):
Revert broadening of reverse suffix literal optimization introduced in
1.10.1.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="5f1f1c8b6d"><code>5f1f1c8</code></a>
1.10.2</li>
<li><a
href="1a54a829ba"><code>1a54a82</code></a>
deps: bump regex-automata to 0.4.3</li>
<li><a
href="61242b1e0e"><code>61242b1</code></a>
regex-automata-0.4.3</li>
<li><a
href="50fe7d177d"><code>50fe7d1</code></a>
changelog: 1.10.2</li>
<li><a
href="eb950f65e6"><code>eb950f6</code></a>
automata/meta: revert broadening of reverse suffix optimization</li>
<li><a
href="e7bd19dd3e"><code>e7bd19d</code></a>
regex-lite-0.1.5</li>
<li><a
href="0086dec69a"><code>0086dec</code></a>
lite: fix stack overflow test</li>
<li><a
href="4ae14720e9"><code>4ae1472</code></a>
tests: fix compilation of doctests on 32-bit architectures</li>
<li><a
href="cd79881df4"><code>cd79881</code></a>
regex-lite-0.1.4</li>
<li><a
href="466e42ca2b"><code>466e42c</code></a>
lite: fix stack overflow in NFA compiler</li>
<li>See full diff in <a
href="https://github.com/rust-lang/regex/compare/1.10.1...1.10.2">compare
view</a></li>
</ul>
</details>
<br />
Updates `ropey` from 1.6.0 to 1.6.1
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/cessen/ropey/blob/master/CHANGELOG.md">ropey's
changelog</a>.</em></p>
<blockquote>
<h2>[1.6.1] - 2023-10-18</h2>
<ul>
<li>Fixed test code that was incorrect on some platforms / with some
configurations.</li>
<li>Minor documentation improvements.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d41ee247f2"><code>d41ee24</code></a>
Prepare for release v1.6.1.</li>
<li><a
href="c185ec562e"><code>c185ec5</code></a>
Expose tree constants for internal testing.</li>
<li><a
href="dfb0a78635"><code>dfb0a78</code></a>
Merge pull request <a
href="https://redirect.github.com/cessen/ropey/issues/91">#91</a> from
blinxen/master</li>
<li><a
href="e629850c3a"><code>e629850</code></a>
[tests] Run search_char_idx_02 and search_line_break_idx_04 only in
debug mode</li>
<li><a
href="387ea30b35"><code>387ea30</code></a>
Merge pull request <a
href="https://redirect.github.com/cessen/ropey/issues/86">#86</a> from
tshepang/patch-1</li>
<li><a
href="9e257b06c4"><code>9e257b0</code></a>
Revert "missing comma"</li>
<li><a
href="1af8c3983b"><code>1af8c39</code></a>
missing comma</li>
<li><a
href="7393572984"><code>7393572</code></a>
missing comma (for readability)</li>
<li><a
href="f1292371ca"><code>f129237</code></a>
Merge pull request <a
href="https://redirect.github.com/cessen/ropey/issues/81">#81</a> from
Johan-Mi/master</li>
<li><a
href="3485d8c9d3"><code>3485d8c</code></a>
Remove unused lifetimes</li>
<li>See full diff in <a
href="https://github.com/cessen/ropey/compare/v1.6.0...v1.6.1">compare
view</a></li>
</ul>
</details>
<br />
Updates `thiserror` from 1.0.49 to 1.0.50
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/dtolnay/thiserror/releases">thiserror's
releases</a>.</em></p>
<blockquote>
<h2>1.0.50</h2>
<ul>
<li>Improve diagnostic when a #[source], #[from], or #[transparant]
attribute refers to a type that has no std::error::Error impl (<a
href="https://redirect.github.com/dtolnay/thiserror/issues/258">#258</a>,
thanks <a
href="https://github.com/de-vri-es"><code>@de-vri-es</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="a7d220d791"><code>a7d220d</code></a>
Release 1.0.50</li>
<li><a
href="4088d169ed"><code>4088d16</code></a>
Ignore module_name_repetitions pedantic clippy lint</li>
<li><a
href="ebebf77fe0"><code>ebebf77</code></a>
Format ui tests with rustfmt</li>
<li><a
href="ff0a0a5859"><code>ff0a0a5</code></a>
Source and From attributes only have single-ident path</li>
<li><a
href="7cec716420"><code>7cec716</code></a>
Remove reliance on Spanned for Member</li>
<li><a
href="c9fe739272"><code>c9fe739</code></a>
Touch up PR 258</li>
<li><a
href="4850c6f80f"><code>4850c6f</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/thiserror/issues/258">#258</a>
from de-vri-es/as-dyn-error-span</li>
<li><a
href="a49f7c603d"><code>a49f7c6</code></a>
Change span of <code>as_dyn_error()</code> to point compile error at
attribute.</li>
<li><a
href="f4eac7ef7b"><code>f4eac7e</code></a>
Ignore needless_raw_string_hashes clippy lint</li>
<li>See full diff in <a
href="https://github.com/dtolnay/thiserror/compare/1.0.49...1.0.50">compare
view</a></li>
</ul>
</details>
<br />
Updates `codspeed-criterion-compat` from 2.2.0 to 2.3.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/CodSpeedHQ/codspeed-rust/releases">codspeed-criterion-compat's
releases</a>.</em></p>
<blockquote>
<h2>v2.3.0</h2>
<h2>What's Changed</h2>
<ul>
<li>fix(ci): change the version of the codspeed action to main by <a
href="https://github.com/art049"><code>@art049</code></a> in <a
href="https://redirect.github.com/CodSpeedHQ/codspeed-rust/pull/18">CodSpeedHQ/codspeed-rust#18</a></li>
<li>feat(cargo-codspeed): add <code>--features vendored-openssl</code>
by <a href="https://github.com/Boshen"><code>@Boshen</code></a> in <a
href="https://redirect.github.com/CodSpeedHQ/codspeed-rust/pull/14">CodSpeedHQ/codspeed-rust#14</a></li>
<li>chore(cargo-codspeed): set verbosity to normal by <a
href="https://github.com/Boshen"><code>@Boshen</code></a> in <a
href="https://redirect.github.com/CodSpeedHQ/codspeed-rust/pull/15">CodSpeedHQ/codspeed-rust#15</a></li>
<li>chore: bump rust toolchain to 1.73 by <a
href="https://github.com/art049"><code>@art049</code></a> in <a
href="https://redirect.github.com/CodSpeedHQ/codspeed-rust/pull/21">CodSpeedHQ/codspeed-rust#21</a></li>
<li>feat(criterion): allow explicit lifetime usage with compat by <a
href="https://github.com/art049"><code>@art049</code></a> in <a
href="https://redirect.github.com/CodSpeedHQ/codspeed-rust/pull/22">CodSpeedHQ/codspeed-rust#22</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/Boshen"><code>@Boshen</code></a> made
their first contribution in <a
href="https://redirect.github.com/CodSpeedHQ/codspeed-rust/pull/14">CodSpeedHQ/codspeed-rust#14</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/CodSpeedHQ/codspeed-rust/compare/v2.2.0...v2.3.0">https://github.com/CodSpeedHQ/codspeed-rust/compare/v2.2.0...v2.3.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="518659da83"><code>518659d</code></a>
Release 2.3.0</li>
<li><a
href="dd3763fea9"><code>dd3763f</code></a>
feat(criterion): allow explicit lifetime usage with compat</li>
<li><a
href="1621b664db"><code>1621b66</code></a>
chore(cargo-codspeed): set verbosity to normal</li>
<li><a
href="87506ab5ca"><code>87506ab</code></a>
chore: update readme</li>
<li><a
href="7b43e1eb7c"><code>7b43e1e</code></a>
feat(cargo-codspeed): add --features <code>vendored-openssl</code></li>
<li>See full diff in <a
href="https://github.com/CodSpeedHQ/codspeed-rust/compare/v2.2.0...v2.3.0">compare
view</a></li>
</ul>
</details>
<br />
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 show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps the dependencies group with 4 updates:
[num-traits](https://github.com/rust-num/num-traits),
[proc-macro2](https://github.com/dtolnay/proc-macro2),
[syn](https://github.com/dtolnay/syn) and
[similar](https://github.com/mitsuhiko/similar).
Updates `num-traits` from 0.2.16 to 0.2.17
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-num/num-traits/blob/master/RELEASES.md">num-traits's
changelog</a>.</em></p>
<blockquote>
<h1>Release 0.2.17 (2023-10-07)</h1>
<ul>
<li><a
href="https://redirect.github.com/rust-num/num-traits/pull/286">Fix a
doc warning about custom classes with newer rustdoc.</a></li>
</ul>
<p><strong>Contributors</strong>: <a
href="https://github.com/robamu"><code>@robamu</code></a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="0a27d8c95a"><code>0a27d8c</code></a>
Merge <a
href="https://redirect.github.com/rust-num/num-traits/issues/289">#289</a></li>
<li><a
href="34e309a918"><code>34e309a</code></a>
Release 0.2.17</li>
<li><a
href="ef36d69f7c"><code>ef36d69</code></a>
Merge <a
href="https://redirect.github.com/rust-num/num-traits/issues/286">#286</a></li>
<li><a
href="d9d94f8a51"><code>d9d94f8</code></a>
Bugfix for text codeblock in documentation.</li>
<li>See full diff in <a
href="https://github.com/rust-num/num-traits/compare/num-traits-0.2.16...num-traits-0.2.17">compare
view</a></li>
</ul>
</details>
<br />
Updates `proc-macro2` from 1.0.67 to 1.0.69
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/dtolnay/proc-macro2/releases">proc-macro2's
releases</a>.</em></p>
<blockquote>
<h2>1.0.69</h2>
<ul>
<li>Fix Span::source_text() bug causing panics or incorrect source text
(<a
href="https://redirect.github.com/dtolnay/proc-macro2/issues/410">#410</a>)</li>
</ul>
<h2>1.0.68</h2>
<ul>
<li>Fix panic in Span::source_text() when source contains multibyte
characters (<a
href="https://redirect.github.com/dtolnay/proc-macro2/issues/408">#408</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="937bbcdcc1"><code>937bbcd</code></a>
Release 1.0.69</li>
<li><a
href="42dc36efce"><code>42dc36e</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/proc-macro2/issues/412">#412</a>
from dtolnay/sourcetext</li>
<li><a
href="6461c2dd60"><code>6461c2d</code></a>
Add out-of-order call to source_text test</li>
<li><a
href="c4c3251c57"><code>c4c3251</code></a>
Explain source_text implementation approach</li>
<li><a
href="31b14c30f2"><code>31b14c3</code></a>
Cache byte offsets computed from a char index</li>
<li><a
href="0e154618a1"><code>0e15461</code></a>
Make FileInfo mut in source_text to allow amortization of char
indices</li>
<li><a
href="90b8e1eb01"><code>90b8e1e</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/proc-macro2/issues/411">#411</a>
from dtolnay/sourcetext</li>
<li><a
href="137ae0a341"><code>137ae0a</code></a>
Fix source_text treating span.lo as byte offset not char index</li>
<li><a
href="4c0bd28a61"><code>4c0bd28</code></a>
Add regression test for issue 410</li>
<li><a
href="12eddc03a4"><code>12eddc0</code></a>
Reword explanation of SourceMap initial value</li>
<li>Additional commits viewable in <a
href="https://github.com/dtolnay/proc-macro2/compare/1.0.67...1.0.69">compare
view</a></li>
</ul>
</details>
<br />
Updates `syn` from 2.0.37 to 2.0.38
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/dtolnay/syn/releases">syn's
releases</a>.</em></p>
<blockquote>
<h2>2.0.38</h2>
<ul>
<li>Fix <em>"method 'peek' has an incompatible type for
trait"</em> error when defining <code>bool</code> as a custom
keyword (<a
href="https://redirect.github.com/dtolnay/syn/issues/1518">#1518</a>,
thanks <a
href="https://github.com/Vanille-N"><code>@Vanille-N</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="43632bfb6c"><code>43632bf</code></a>
Release 2.0.38</li>
<li><a
href="abd2c214b4"><code>abd2c21</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/syn/issues/1518">#1518</a>
from Vanille-N/master</li>
<li><a
href="6701e6077e"><code>6701e60</code></a>
Absolute path to <code>bool</code> in
<code>custom_punctuation.rs</code></li>
<li><a
href="7313d24239"><code>7313d24</code></a>
Resolve single_match_else pedantic clippy lint in code generator</li>
<li><a
href="67ab64f3c0"><code>67ab64f</code></a>
Include unexpected token in the test failure message</li>
<li><a
href="137ae33486"><code>137ae33</code></a>
Check no remaining token after the first literal</li>
<li><a
href="258e9e8a11"><code>258e9e8</code></a>
Ignore single_match_else pedantic clippy lint in test</li>
<li><a
href="92fd50ee8c"><code>92fd50e</code></a>
Test docs.rs documentation build in CI</li>
<li>See full diff in <a
href="https://github.com/dtolnay/syn/compare/2.0.37...2.0.38">compare
view</a></li>
</ul>
</details>
<br />
Updates `similar` from 2.2.1 to 2.3.0
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/mitsuhiko/similar/blob/main/CHANGELOG.md">similar's
changelog</a>.</em></p>
<blockquote>
<h2>2.3.0</h2>
<ul>
<li>Added support for <code>Change::value_ref</code> and
<code>Change::value_mut</code>.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="47f46257d4"><code>47f4625</code></a>
2.3.0</li>
<li><a
href="3319f77693"><code>3319f77</code></a>
Downgrade msrv lock file</li>
<li><a
href="d21e126057"><code>d21e126</code></a>
Use Cargo.lock.msrv</li>
<li><a
href="86f68a6394"><code>86f68a6</code></a>
Make clippy happy</li>
<li><a
href="e85ddb0d18"><code>e85ddb0</code></a>
Added value_ref and value_mut</li>
<li><a
href="de455873da"><code>de45587</code></a>
Spelling and grammar fixes (<a
href="https://redirect.github.com/mitsuhiko/similar/issues/49">#49</a>)</li>
<li><a
href="9f76d88c3d"><code>9f76d88</code></a>
fix some english things (<a
href="https://redirect.github.com/mitsuhiko/similar/issues/48">#48</a>)</li>
<li><a
href="e575b88ca1"><code>e575b88</code></a>
Update GitHub Actions CI (<a
href="https://redirect.github.com/mitsuhiko/similar/issues/47">#47</a>)</li>
<li><a
href="ae815d13ea"><code>ae815d1</code></a>
Remove mention of Hunt–McIlroy / Hunt–Szymanski</li>
<li>See full diff in <a
href="https://github.com/mitsuhiko/similar/compare/2.2.1...2.3.0">compare
view</a></li>
</ul>
</details>
<br />
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 show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
closes#949closes#950closes#951
All minifier tests are disable from this PR.
We are going to fix the compilation errors first, then the behavioral
errors.
Bumps the dependencies group with 3 updates:
[rayon](https://github.com/rayon-rs/rayon),
[insta](https://github.com/mitsuhiko/insta) and
[unicode-width](https://github.com/unicode-rs/unicode-width).
Updates `rayon` from 1.7.0 to 1.8.0
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rayon-rs/rayon/blob/master/RELEASES.md">rayon's
changelog</a>.</em></p>
<blockquote>
<h1>Release rayon 1.8.0 / rayon-core 1.12.0 (2023-09-20)</h1>
<ul>
<li>The minimum supported <code>rustc</code> is now 1.63.</li>
<li>Added <code>ThreadPoolBuilder::use_current_thread</code> to use the
builder thread as
part of the new thread pool. That thread does not run the pool's main
loop,
but it may participate in work-stealing if it yields to rayon in some
way.</li>
<li>Implemented <code>FromParallelIterator<T></code> for
<code>Box<[T]></code>, <code>Rc<[T]></code>, and
<code>Arc<[T]></code>, as well as
<code>FromParallelIterator<Box<str>></code> and
<code>ParallelExtend<Box<str>></code> for
<code>String</code>.</li>
<li><code>ThreadPoolBuilder::build_scoped</code> now uses
<code>std:🧵:scope</code>.</li>
<li>The default number of threads is now determined using
<code>std:🧵:available_parallelism</code> instead of the
<code>num_cpus</code> crate.</li>
<li>The internal logging facility has been removed, reducing bloat for
all users.</li>
<li>Many smaller performance tweaks and documentation updates.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="21e1ae1e12"><code>21e1ae1</code></a>
Release rayon 1.4.0 / rayon-core 1.8.0</li>
<li><a
href="a0e5833b76"><code>a0e5833</code></a>
Merge <a
href="https://redirect.github.com/rayon-rs/rayon/issues/785">#785</a> <a
href="https://redirect.github.com/rayon-rs/rayon/issues/790">#790</a> <a
href="https://redirect.github.com/rayon-rs/rayon/issues/791">#791</a></li>
<li><a
href="9f7357befb"><code>9f7357b</code></a>
Merge <a
href="https://redirect.github.com/rayon-rs/rayon/issues/792">#792</a></li>
<li><a
href="998f134242"><code>998f134</code></a>
Removed outdated documentation</li>
<li><a
href="c7d963a9c2"><code>c7d963a</code></a>
Use crossbeam_deque::Injector instead of crossbeam_queue::SegQueue</li>
<li><a
href="2e889293a8"><code>2e88929</code></a>
Micro-optimize the WorkerThread::steal loop</li>
<li><a
href="66559fe9ce"><code>66559fe</code></a>
Remove the lifetime constraint from the scope OP</li>
<li><a
href="09428ec11d"><code>09428ec</code></a>
Merge <a
href="https://redirect.github.com/rayon-rs/rayon/issues/746">#746</a></li>
<li><a
href="ed6a5f75c4"><code>ed6a5f7</code></a>
Update ci/compat-Cargo.lock</li>
<li><a
href="96ba9ef188"><code>96ba9ef</code></a>
inline more Counter methods</li>
<li>Additional commits viewable in <a
href="https://github.com/rayon-rs/rayon/compare/rayon-core-v1.7.0...rayon-core-v1.8.0">compare
view</a></li>
</ul>
</details>
<br />
Updates `insta` from 1.31.0 to 1.32.0
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/mitsuhiko/insta/blob/master/CHANGELOG.md">insta's
changelog</a>.</em></p>
<blockquote>
<h2>1.32.0</h2>
<ul>
<li>Added <code>--profile</code> parameter support to <code>cargo insta
test</code>.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="845ee36cf4"><code>845ee36</code></a>
1.32.0</li>
<li><a
href="5b34e7eaad"><code>5b34e7e</code></a>
Added changlog entry</li>
<li><a
href="bee0ff41af"><code>bee0ff4</code></a>
cargo-insta: reduce visibility of all items (<a
href="https://redirect.github.com/mitsuhiko/insta/issues/407">#407</a>)</li>
<li><a
href="6e22d67092"><code>6e22d67</code></a>
cargo-insta: edit reject message (<a
href="https://redirect.github.com/mitsuhiko/insta/issues/404">#404</a>)</li>
<li><a
href="7e9315ede7"><code>7e9315e</code></a>
test-stable requires 1.61</li>
<li><a
href="84cddf9c70"><code>84cddf9</code></a>
Fix incorrect --profile command</li>
<li><a
href="20656ad902"><code>20656ad</code></a>
cargo-insta: allow passing --profile (<a
href="https://redirect.github.com/mitsuhiko/insta/issues/402">#402</a>)</li>
<li>See full diff in <a
href="https://github.com/mitsuhiko/insta/compare/1.31.0...1.32.0">compare
view</a></li>
</ul>
</details>
<br />
Updates `unicode-width` from 0.1.10 to 0.1.11
<details>
<summary>Commits</summary>
<ul>
<li><a
href="8942487195"><code>8942487</code></a>
Publish 0.1.11 (Unicode 15.1)</li>
<li><a
href="34fdd6b66e"><code>34fdd6b</code></a>
Add ignore file</li>
<li><a
href="24651a204d"><code>24651a2</code></a>
Merge pull request <a
href="https://redirect.github.com/unicode-rs/unicode-width/issues/33">#33</a>
from chrisduerr/unicode_15_1</li>
<li><a
href="30e33bdb2c"><code>30e33bd</code></a>
Fixup script</li>
<li><a
href="8872449ab3"><code>8872449</code></a>
Create rust.yml</li>
<li><a
href="a859939f91"><code>a859939</code></a>
Update to Unicode 15.1</li>
<li><a
href="f5a9b4efa5"><code>f5a9b4e</code></a>
Merge pull request <a
href="https://redirect.github.com/unicode-rs/unicode-width/issues/32">#32</a>
from linkmauve/patch-1</li>
<li><a
href="78cfe571e0"><code>78cfe57</code></a>
Use Iterator::sum() instead of fold()</li>
<li>See full diff in <a
href="https://github.com/unicode-rs/unicode-width/compare/v0.1.10...v0.1.11">compare
view</a></li>
</ul>
</details>
<br />
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 show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
closes#273closes#814
HIR is removed from this PR, with the minifier being commented out.
HIR is a wonderful idea for compiling to lower languages, but after
sitting on it for a few months I found that it only adds confusion and
uncertainties to both myself and future contributors.
It also adds too much burden to maintainers if we plan to support more
downstream tools.
1 AST is the only way.
related: #688 .
There are some unfinished things that need to be finalised by Boshen.
1. Official icon and description for the package.
2. Publishing strategy ( It's probably not a good idea to use
`package.json` as a probe to publish extension, as there's too much
vscode configuration coupled to it, a git tag like `vscode_v0.0.x` might
be worth considering ).
3. License for the extension.