Releases: quick-lint/quick-lint-js
Releases · quick-lint/quick-lint-js
2.4.0 (2022-04-15)
Added
- Missing parentheses around a self-invoked arrow function are now reported as
E0211. (Implemented by Sarah Schulte.) - E0179 is now reported if a JSX element such as
<div />
followsreturn
(implemented by Rob Miner).
Fixed
<div> <> </> </div>
(a JSX fragment inside a JSX element) no longer reports
a syntax error.
Changed
- Windows builds (x86, x64, ARM, and ARM64) are now built with MinGW's C and C++
runtime libraries instead of Microsoft's. This fixes a compliance issue with
GPLv3.
2.3.1 (2022-03-24)
Added
- Windows: The 32-bit x86 builds are now code-signed.
- Windows: Tab-completion now works in PowerShell. (Completion needs to be
installed manually.) (Implemented by Tony
Sathre.)
Fixed
- The executable files shared between the npm packages and the static builds are
now identical. (Previously, the files sometimes differed because they were
code-signed independently. Code signing is non-deterministic.)
2.3.0 (2022-02-24)
Added
- An incomplete
class
now reports E0199 instead of failing with the
catch-all E0054. (Thanks to Dave Churchill for reporting.) - Statements before the first
case
in aswitch
now report E0198
(implemented by Himanshu). - When building from source, you can tell quick-lint-js to use your copy of
third-party dependencies instead of quick-lint-js' bundled
dependencies:-DQUICK_LINT_JS_USE_BUNDLED_BOOST=OFF
: Use your own copy of Boost.-DQUICK_LINT_JS_USE_BUNDLED_GOOGLE_BENCHMARK=OFF
: Use your own copy of Google Benchmark (benchmarks only).-DQUICK_LINT_JS_USE_BUNDLED_GOOGLE_TEST=OFF
: Use your own copy of Google Test (tests only).-DQUICK_LINT_JS_USE_BUNDLED_SIMDJSON=OFF
: Use your own copy of simdjson.
2.2.0 (2022-02-17)
Fixed
x && <Element/>
no longer falsely reports E0026 (missing operand for
operator). (Thanks to Piotr Dąbrowski for reporting.)- In top-level code,
await <x/>
is now parsed as theawait
operator followed
by a JSX element (rather thanawait
less-than-compared tox
, followed by
jibberish).
Changed
- Homebrew: Emacs Lisp files are now installed in
<brew>/share/emacs/site-lisp/quick-lint-js
(perbrew audit
's
recommendation) instead of inshare/emacs/site-lisp
.
[E038...
2.1.0 (2022-02-09)
Fixed
- Curried arrow functions like
a => b => { a; b; }
no longer falsely reports
E0057. (Thanks to Christian Mund for reporting.)
2.0.0 (2022-02-08)
Added
- quick-lint-js now supports JSX syntax in both .js and .jsx files.
- New diagnostics for JSX: E0019, E0181, E0182, E0183,
E0186, E0187, E0189, E0191, E0192, E0193 if (...) {...} else (...) {...}
now reports E0184 ('missingif
after
else
') (implemented by Himanshu).if (x = "")
now reports E0188 ('=
changes variables; to compare, use
===
instead').if (a == "X" || "Y")
now reports E0190 ('missing comparison;===
does
not extend to the right side of||
').async (param1, param2) {}
now reports E0176 ('missing arrow operator for
arrow function'). (E0176 was previously reported only for non-async
arrow functions.)let x = 'nah'; if (y) { let x = 'yah'; }
now reports E0196 ('new
variable shadows existing variable'). This warning is reported only when an
assignment (instead of a new variable declaration) was intended.console.log(“hello world”);
now reports E0197 (''“' is not allowed for
strings; use " instead').-1 ** 2
now reports E0194 (missing parentheses around left-hand side of
**
).typeof 10 ** 7
now reports E0195 (missing parentheses around operand of
typeof
).
Fixed
- LSP: When responding to unsupported methods with error code -32601,
quick-lint-js now includes the request ID. (Previously, the"id"
field was
alwaysnull
.) - CLI: If a crash occurs due to E0054 or E0203, the CLI no longer
crashes (e.g. with an illegal instruction error). - quick-lint-js no longer ignores elements of assigned arrays. For example,
[fisrt, second] = s.split(' ');
will now report E0057 forfisrt
(if
fisrt
is not declared). - quick-lint-js no longer incorrectly reports E0176 (missing arrow operator
for arrow function) if theextends
clause for a class is parenthesized
and contains commas (e.g.class A extends (B, C) {}
). - quick-lint-js no longer incorrectly reports E0016, E0038, E0060,
or E0207 in tagged template literals. (These errors are still reported for
untagged template literals and for string literals.)
Changed
- Assigning to an imported variable now reports E0185 ('assignment to
imported variable') instead of E0003 ('assignment to const variable')
(implemented by Matheus de Sousa).
1.0.0 (2021-12-13)
Added
- Windows: Clang-cl is now able to compile quick-lint-js for Windows.
- E0176 is now reported if the desired arrow function has more than zero
parameters. - E0178 is now reported if the arrow function appears in top-level code or
inside a non-async function.
Fixed
- Arch Linux: The quick-lint-js package now installs correctly if you have
another Vim plugin package installed. The installation error was: "error: failed
to commit transaction (conflicting files)" (typeof x)=>{}
and similar code now reports E0151 (invalid function
parameter) instead of E0019 (invalid binding in let statement).([(x,)] => {})
now declaresx
as a parameter instead of ignoringx
entirely. (It still produces E0180).\u0
at the end of a file now reports E0016 (expected hexadecimal digits
in Unicode escape sequence) instead of E0038 (unclosed identifier escape
sequence)"\u{00a0:"
now reports only one error (E0038 (unclosed identifier escape
sequence)) instead of two (E0038 and E0040 (unclosed string literal)).- After reporting E0178, the arrow function is parsed as if it was async,
allowing the body to useawait
as an operator without error.
Changed
Optimized
- The Windows .exe is 51% smaller (2.30 MiB -> 1.14 MiB) by making a hash table
used for translations compile-time-only. See the patch
here.
0.7.1 (2021-12-06)
Beta release.
Added
- npm: The npm package now installs on Windows when using the x86 (32-bit)
version of Node.js. - E0036 is now reported in more situations.
Fixed
- npm: The npm package now installs on macOS Apple silicon when using the
AArch64 (native) version of Node.js. (The package previously worked only on
macOS Intel, or when using x86_64 Node.js with Rosetta.)
0.7.0 (2021-12-05)
Beta release.
Security
- The source archive (
quick-lint-js-*.tar.gz
) is now signed with our GPG key. - Arch Linux: The release package on AUR now verifies that the source archive is
signed with our GPG key.
Added
- New diagnostics: E0053, E0179
- Improve error reporting of
console.("hello")
and similar code. - Reported errors now include a link to the website for a detailed explanation
(implemented by Amir). - CLI: New
--diagnostic-hyperlinks
option (implemented by Amir). - CLI: Fish and Zsh completions for the
--output-format
option now include
documentation for each value (implemented by Amir).
Fixed
- Reporting E0144 no longer also reports E0057.
- Variables can be named according to Unicode 14 (previously Unicode 13).
void 0?a:b=c
no longer reports E0020.- Vim: The Debian package, the Arch Linux package, and the Homebrew package now
install the coc.nvim plugin and the plugin documentation. - Neovim: Fixed with newer versions of nvim-lspconfig
(since commit
97da7ed12e
published November 25, 2021).
Optimized
- Identifier parsing is now SIMD-optimized for ARM systems, including Apple
silicon. See the patch
here. - Diagnostic message translations consume less space in executables and also
take less time to process. See the patch
here. - Expression ASTs are now garbage-collected during parsing, reducing peak memory
usage (and as a side effect making parsing faster). See the patch
here.
[E0278]...
0.6.0 (2021-11-20)
Beta release.
Added
- Various new diagnostics (implemented by Himanshu and Matheus de
Sousa). - VS Code: The new
quick-lint-js.logging
setting allows you to show
quick-lint-js' internal log messages in an Output window. - VS Code: Apple silicon (e.g. M1) (ARM64) is now supported.
- VS Code: Linux ARM (32-bit) is now supported.
- Vim: Improved performance for ALE versions v2.5.0 and newer (and v3.0.0 and
newer). You should configureg:ale_lint_on_text_changed
to'always'
for
the best experience. - Vim: Improved performance of the ALE plugin by using the LSP server by
default. - The macOS and Windows binaries are now code-signed.
- Emacs (Eglot): You no longer need to type
M-x eglot
in order to start
linting. Apply this fix by adding(eglot-ensure)
to your init
file. - quick-lint-js now understands the
AggregateError
,FinalizationRegistry
,
andWeakRef
ECMAScript global variables by default. - The macOS and Windows executables now include embedded code signatures. These
signatures are made with a self-signed certificate. - The Linux executables are now signed with a GPG signature (
.asc
files). - Vim: coc.nvim is now supported.
- quick-lint-js has a new mascot, Dusty. Say hello! (Artwork by Jenny
"Jennipuff" Wheat). - Translations: German (implemented by Nico Sonack)
Fixed
- macOS: quick-lint-js no longer hangs if a file is changed in your home
directory or project directory. - Various crashes on invalid code have been fixed.
- quick-lint-js consumes less memory for pathological code patterns.
- VS Code: The extension no longer tries to load an ARM64 DLL on Windows x64.
- The npm package and the manual builds are now much smaller and faster. (They
were previously compiled in debug, unoptimized mode.) delete x
no longer reports a warning ifx
is a global variable.- JSX: Instead of reporting a bunch of errors, quick-lint-js now tells you that
JSX syntax is not yet supported. - FreeBSD: Fixed build.
- E0073, E0094, E0104, E0106, E0111, and E0119 now point
to a more helpful place (implemented by strager and Amir). for (let x = a in b; c; d) {}
now reports E0108 instead of reporting
E0173, E0110, and E0110 again.
Changed
- Error codes now have four decimal digits instead of three. For example, E001
is now called E0001. - LSP benchmarks have been rewritten. The new benchmarks should produce more
stable numbers and be fairer to linters with a high start-up time such as
Flow.
Removed
- quick-lint-js no longer looks for files named
.quick-lint-js.config
. To
configure quick-lint-js, name your filequick-lint-js.config
instead.