diff --git a/modules/lang/web/+html.el b/modules/lang/web/+html.el
index 6cb724193..dfb57899e 100644
--- a/modules/lang/web/+html.el
+++ b/modules/lang/web/+html.el
@@ -63,6 +63,27 @@
(add-to-list 'web-mode-engines-alist '("elixir" . "\\.eex\\'"))
+ (let ((types '("javascript" "jsx")))
+ (setq web-mode-comment-formats
+ (cl-remove-if (lambda (item) (member (car item) types))
+ web-mode-comment-formats))
+ (dolist (type types)
+ (push (cons type "//") web-mode-comment-formats)))
+
+ (add-hook! 'web-mode-hook
+ (defun +web--fix-js-comments-h ()
+ "Fix comment handling in `web-mode' for JavaScript."
+ (when (member web-mode-content-type '("javascript" "jsx"))
+ ;; For some reason the default is to insert HTML comments even
+ ;; in JavaScript.
+ (setq-local comment-start "//")
+ (setq-local comment-end "")
+ ;; Needed since otherwise the default value generated by
+ ;; `comment-normalize-vars' will key off the syntax and think
+ ;; that a single "/" starts a comment, which completely borks
+ ;; auto-fill.
+ (setq-local comment-start-skip "// *"))))
+
(map! :map web-mode-map
(:localleader
:desc "Rehighlight buffer" "h" #'web-mode-buffer-highlight