Skip to content

2.17.0 (2023-10-25)

Compare
Choose a tag to compare
@strager strager released this 26 Oct 01:01
· 478 commits to master since this release

Downloads

Known issues

Added

  • quick-lint-js now understands decorators.
  • quick-lint-js now understands accessor fields.
  • class C { myField, } now reports better diagnostics.
  • quick-lint-js now compiles correctly on big-endian architectures such as
    S/390 (Linux s390x).
  • Missing commas in array literals now reports E0712. (Implemented by
    koopiehoop.)
  • get *prop() and set *prop() in classes now report E0713 ("getters and
    setters cannot be generators"). (Implemented by koopiehoop.)
  • async get and async set in classes now report E0714 ("'async' keyword
    is not allowed on getters or setters"). (Implemented by koopiehoop.)
  • Multiple export default statements now report E0715 ("cannot use
    multiple export default statements in one module"). (Implemented by
    Ariel Don.)
  • Emacs: The Debian/Ubuntu package now installs the Emacs plugin. Manual
    installation of the .el files is no longer required.
  • CLI: The new --stdin-path CLI option allows users of the --stdin option
    (primarily text editors) to have quick-lint-js detect the language
    automatically via --language=default or --language=experimental-default.
  • TypeScript support (still experimental):
    • CLI: The new --language=experimental-default option auto-detects the
      language based on the file's extension (.ts, .tsx, .d.ts, or .js).
    • Emacs: Flymake plugin users can now opt into TypeScript support. See the
      Flymake configuration instructions.
    • Class method overload signatures are now parsed.
    • E0398 is now reported when using both abstract and static on a
      single class property.
    • , is now allowed after interface fields. (Previously only ; or a newline
      was allowed.)
    • if (cond); now reports E0064 ("missing body for 'if' statement").
      (Implemented by Samir Hamud.)
    • Type predicates are now supported in function types (e.g.
      (param) => param is Type).
    • declare fields are now parsed inside classes.
    • declare global blocks are now parsed.

Fixed

  • E0072 is no longer falsely reported if function has a newline after it.
  • E0196 is no longer falsely reported if the shadowing variable is declared
    in the head of a for loop. For example, quick-lint-js no longer warns about
    let x; for (let x = 0;;);.
  • Emacs: .el files are now installed in the correct place on Arch Linux, btw.
  • Emacs: The Flymake plugin now reliably clears out diagnostics after issues are
    fixed. Sticky diagnostics are no more.
  • TypeScript support (still experimental):
    • A newline after public, protected, private, or readonly inside a
      class is now interpreted correctly.
    • <T>(T: T) => {} (a generic arrow function with the same name for a
      run-time parameter and a generic parameter) no longer falsely reports
      E0034 ("redeclaration of variable").
    • A namespace with the same name as an interface or type alias no longer
      falsely reports E0034 ("redeclaration of variable").
    • declare class and function with the same name no longer falsely reports
      E0034 ("redeclaration of variable").
    • (a?, ...b) => ReturnType in a TypeScript type no longer falsely reports
      E0379 ("optional parameter cannot be followed by a required parameter").
    • LSP: A file named a.tsxbanana.ts is no longer recognized as a
      TypeScript JSX file. It is now recognized as a non-JSX TypeScript
      file.
    • Nested module declarations no longer falsely report E0361. E0361's
      message has been changed:
      • Before: "module with string name is only allowed at the top level"
      • After: "TypeScript 'declare module' with string name is not allowed in
        namespaces"