Skip to content

Releases: quick-lint/quick-lint-js

2.4.0 (2022-04-15)

04 Apr 03:45
Compare
Choose a tag to compare

Downloads

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 /> follows return
    (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.
Read more

2.3.1 (2022-03-24)

04 Apr 03:45
Compare
Choose a tag to compare

Downloads

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.)
Read more

2.3.0 (2022-02-24)

04 Apr 03:45
Compare
Choose a tag to compare

Downloads

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 a switch 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.
Read more

2.2.0 (2022-02-17)

04 Apr 03:45
Compare
Choose a tag to compare

Downloads

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 the await operator followed
    by a JSX element (rather than await less-than-compared to x, followed by
    jibberish).

Changed

  • Homebrew: Emacs Lisp files are now installed in
    <brew>/share/emacs/site-lisp/quick-lint-js (per brew audit's
    recommendation) instead of in share/emacs/site-lisp.

[E038...

Read more

2.1.0 (2022-02-09)

04 Apr 03:45
Compare
Choose a tag to compare

Downloads

Fixed

  • Curried arrow functions like a => b => { a; b; } no longer falsely reports
    E0057. (Thanks to Christian Mund for reporting.)
Read more

2.0.0 (2022-02-08)

04 Apr 03:45
Compare
Choose a tag to compare

Downloads

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 ('missing if 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
    always null.)
  • 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 for fisrt (if
    fisrt is not declared).
  • quick-lint-js no longer incorrectly reports E0176 (missing arrow operator
    for arrow function) if the extends 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).
Read more

1.0.0 (2021-12-13)

04 Apr 03:45
Compare
Choose a tag to compare

Downloads

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 declares x as a parameter instead of ignoring x
    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 use await as an operator without error.

Changed

  • E0013 is no longer reported for identifiers such as bird\u{360000}.
    E0207 is reported instead.

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.
Read more

0.7.1 (2021-12-06)

04 Apr 03:45
Compare
Choose a tag to compare

Beta release.

Downloads

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.)
Read more

0.7.0 (2021-12-05)

04 Apr 03:45
Compare
Choose a tag to compare

Beta release.

Downloads

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]...

Read more

0.6.0 (2021-11-20)

04 Apr 03:45
Compare
Choose a tag to compare

Beta release.

Downloads

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 configure g: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,
    and WeakRef 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 if x 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 file quick-lint-js.config instead.
Read more