Skip to main content
5 of 6
added 22 characters in body
theldoria
  • 1.9k
  • 1
  • 14
  • 25

This should do the trick:

(add-hook 'web-mode-hook #'(lambda ()
                             (unless (and (stringp buffer-file-name)
                                          (string-match "\\.js\\'" buffer-file-name))
                               (aggressive-indent-mode))))

It activates aggressive-indent-mode only if file extension is not js.

If you use (global-aggressive-indent-mode 1) you can disable it per this:

(add-hook 'web-mode-hook #'(lambda ()
                             (when (and (stringp buffer-file-name)
                                        (string-match "\\.js\\'" buffer-file-name))
                               (aggressive-indent-mode 0))))

And finally, to disable it in javascript sections use these advices:

(defun aggressive-indent-advice (org-fun &rest args)
  "Do not agressive-indent in javascript section of web-mode."
  (let ((agressive-indent t))
    (when (equal major-mode 'web-mode)
      (setq agressive-indent
            (not (member (get-text-property (point) 'part-side) '(javascript)))))
    (when agressive-indent
      (apply org-fun args))))
(advice-add 'aggressive-indent--keep-track-of-changes :around #'aggressive-indent-advice)
(advice-add 'aggressive-indent--indent-if-changed :around #'aggressive-indent-advice)
(advice-add 'aggressive-indent--softly-indent-defun :around #'aggressive-indent-advice)

Note that, depending on your need, you can use the former two hooks independently from web-mode to disable aggressive-indent. On the other hand, the depends on web-mode, but will also work for .js files in web-mode.

theldoria
  • 1.9k
  • 1
  • 14
  • 25