This document chronicles quick-lint-js' releases. This document's format is based on Keep a Changelog.
quick-lint-js' version numbers are arbitrary. quick-lint-js does not adhere to Semantic Versioning.
Unreleased
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
Improve error on 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.
Optimized
- Parsing identifier is now optimized for ARM systems, including Apple Silicon.
- Diagnostic message translations consume less space in executables and also take less time to process.
- Expression ASTs are now garbage-collected during parsing, reducing peak memory usage (and as a side effect making parsing faster).
0.6.0 (2021-11-20)
Beta release.
Added
- Various new diagnostics (implemented by Himanshu and Matheus 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
, 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 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.
- 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. - 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.
0.5.0 (2021-10-12)
Beta release.
Added
- Various new errors (implemented by Himanshu).
quick-lint-js.config
now supports the literally-anything global group. Use this option to disable all use-of-undeclared-variable warnings.- If quick-lint-js crashes, it will link to a page to report crashes.
- VS Code: The plugin now works on Windows on ARM (64-bit).
- VS Code: The plugin now works on Linux on ARM (32-bit and 64-bit).
- The CLI and LSP server now compile on FreeBSD (amd64). However, we don't provide FreeBSD pre-built executables.
- Neovim: nvim-lspconfig is now supported by quick-lint-js' plugin (implemented by tiagovla).
- VS Code: Contributors can now enable performance tracing (implemented by Jimmy Qiu).
Fixed
- LSP, VS Code: Filesystem change watching failures no longer crash. These failures can happen on Windows for directories on network shares, for example.
- LSP: Unknown messages no longer crash the LSP server. This makes the LSP server compatible with more clients, such as Neovim's built-in client.
break await
andbreak yield
no longer incorrectly reports errors (fixed by Himanshu).for (var x = ++y in []) {}
now parses correctly as valid JavaScript.- Vim: The plugin no longer crashes if a filename contains a newline character (or certain other control characters).
- LSP, VS Code: Config file changes are now recognized properly if any path component contains a symbolic link (Linux and macOS).
- quick-lint-js no longer warns about variables named
__dirname
,__filename
,exports
,module
, orrequire
by default. - Parsing certain code patterns containing
await/
no longer takes excessive memory and time. - Various crashes on invalid code have been fixed.
- LSP, VS Code: Some memory leaks have been fixed.
- Arch Linux: building should no longer fail with "The install of the quick-lint-js target requires changing an RPATH from the build tree".
0.4.0 (2021-09-09)
Beta release.
Changed
- CLI: The
--stdin
option (and-
) no longer search for configuration files in the current working directory. Use the--path-for-config-search
option to approximate the old behavior. - Emacs: For scratch buffers, the Flycheck and Flymake plugins no longer search for configuration files.
- Vim: For unnamed buffers, the ALE plugin no longer searches for configuration
files in the current working directory's parent and ancestors. Name the buffer
using the
:file
command if you want a configuration file to take effect. - VS Code: The plugin has been rewritten. Performance should be better, but stability and compatibility might suffer. For example, VS Code on Apple silicon (AArch64 CPUs) has not been tested and will likely no longer work. Please report compatibility issues.
Added
- Various new errors (implemented by Himanshu)
- CLI:
--path-for-config-search
allows customizing where configuration files are found for--stdin
- Global variables for several popular libraries are now recognized by default, including jQuery, Jasmine, and Jest
- Syntax and schema errors in
quick-lint-js.config
no longer crash quick-lint-js. Instead, these errors are highlighted similar to errors in JavaScript files. - VS Code:
quick-lint-js.config
is now used when linting opened JavaScript files.
Fixed
- Building quick-lint-js with AddressSanitizer on Fedora no longer fails in
collect-copyright
- Building quick-lint-js no longer fails if a directory called
brew
exists anywhere in$PATH
- Various crashes given invalid JavaScript no longer happen (implemented by wagner riffel and David Vasileff)
for (const x of xs)
no longer incorrectly reports E205 (missing initializer in const declaration) (fixed by Himanshu)- Windows:
quick-lint-js.config
files are now recognized if the containing directory contains non-ASCII characters - Fix SSE2 corruption on 32-bit Windows builds with MSVC.
0.3.0 (2021-07-02)
Beta release.
Security
- Vim plugin: Version 0.2.0 executed
node_modules/.bin/quick-lint-js
without validating that the program is really quick-lint-js. The plugin now conservatively ignoresquick-lint-js
innode_modules
by default.
Added
- New JS syntax:
.?
, class fields,import.meta
, top-levelawait
,#privateProperties
- Translations: Swedish (implemented by Kim "Linden")
- Emacs plugin (implemented by wagner riffel)
- Neovim plugin
- Errors and warnings are now documented on the website
- Various new errors and error message improvements (implemented by AidenThing, Daniel La Rocque, Erlliam Mejia, Himanshu, Lee Wannacott, Matheus Sousa)
- Shell completion for the CLI (Bash, Fish, Zsh) (implemented by Shivam Mehta)
--stdin
CLI option allows reading JavaScript from standard input instead of a file (implemented by wagner riffel)- Partially implemented: Global variables can be configured using a
quick-lint-js.config
file
Fixed
- Using browser variables such as
document
andwindow
no longer reports undesired undeclared variable warnings with
statements andeval
no longer cause spurious undeclared variable warnings (implemented by Himanshu)++a[0];
no longer reports an assignment-to-const-variable error ifa
was declared withconst
(implemented by Himanshu)'undefined' === typeof foo ? 3 : 4
no longer reports a warning thatfoo
is undeclared (implemented by Himanshu)- Building tests with GCC 11.1.1 no longer fails due to
-Werror
- Various crashes given invalid JavaScript no longer happen
- Building the VS Code plugin now works on Windows (implemented by Jimmy Qiu)
0.2.0 (2021-04-05)
Beta release.