Files
doomemacs/modules/lang/javascript
Henrik Lissner bd0bee92cc feat!(javascript): add treesit support
BREAKING CHANGE: This commit removes a number of core packages and
features from this module and only replaces a handful of them, so that
we can lean more on LSP and tree-sitter. To be specific:

- We used to rely on `rjsx-mode` (derived from js2-mode) for total
  JS/JSX support (though imperfect; Emacs was starved for options at the
  time). This has now been replaced with `js-ts-mode` (built-in after
  Emacs 29), falling back to `js-mode` (very rudimentary, but a decent
  fallback).
- This also meant the removal of `js2-mode`, which `skewer-mode`,
  `js2-refactor`, and `xref-js2` depended on, so those were removed
  too, and have *somewhat* been replaced with LSP integration (offers
  jump-to-definition/references and *some* refactoring actions, but no
  replacement for skewer's functionality).
- Typescript support no longer relies on the jury-rigged, web-mode-derived
  major mode (because TSX support in the upstream `typescript-mode`
  isn't great). We now use `typescript-ts-mode` (built-in into Emacs
  29.1+), falling back to `typescript-mode`.
- JSX/TSX support now *requires* tree-sitter (and Emacs 29.1+), where
  `tsx-ts-mode` is available and outshines all the alternatives (at the
  time of writing).

Due to the absolute chaos that is webdev, this module sacrifices some of
the graceful-degradation I've implemented for other modules and creates
a hard requirement on tree-sitter and Emacs 29.1+ for JSX/TSX. It still
tries to degrade gracefully for plain JS and TS, but the module's doctor
and docs will actively recommend tree-sitter.

Close: #5278
Fix: #6172
Fix: #7042
Close: #8447
Co-authored-by: ribaricplusplus <ribaricplusplus@users.noreply.github.com>
2025-08-29 14:35:49 +02:00
..
2024-09-14 20:47:39 -04:00

:lang javascript

Description   unfold

This module adds JavaScript and TypeScript support to Doom Emacs.

  • JSX/TSX support (requires doom-module:+tree-sitter and Emacs 29.1+)
  • LSP Integration

    • Code completion (with doom-module::completion corfu (recommended) or doom-module::completion company)
    • Syntax checking (with doom-module::checkers syntax)
    • Jump-to-definitions and references support
  • Code formatting (with doom-module::editor format and prettier)
  • REPL support (with doom-package:nodejs-repl and/or doom-module::tools eval)

Module flags

+lsp
Enable LSP support for js-mode, js-ts-mode, typesript-mode, and ~typescript-ts-mode. Requires doom-module::tools lsp and a langserver (supports ts-ls and deno-ls).
+tree-sitter
Leverages tree-sitter for better syntax highlighting and structural text editing. Requires doom-module::tools tree-sitter. Requires Emacs 29.1+. Required for JSX/TSX support.

TODO Hacks

󱌣 This module's hacks haven't been documented yet. Document them?

TODO Changelog

This module does not have a changelog yet.

Installation

Enable this module in your doom! block.

This module requires NodeJS and one of NPM or Yarn in your $PATH.

  • MacOS: $ brew install node
  • Arch Linux: $ pacman --needed --noconfirm -S nodejs npm
  • openSUSE: $ zypper install nodejs npm

Formatter

Formatting is handled using the doom-module::editor format module via prettier.

TODO Usage

󱌣 This module has no usage documentation yet. Write some?

TODO Configuration

󱌣 This module has no configuration documentation yet. Write some?

Troubleshooting

There are no known problems with this module. Report one?

Frequently asked questions

This module has no FAQs yet. Ask one?

TODO Appendix

󱌣 This module has no appendix yet. Write one?