marcoroth/stimulus-lsp

Diagnostic: Warn if `removeEventListener` is not called in `disconnect()`

Opened this issue · 0 comments

When writing Stimulus controllers you might find yourself adding and removing event listeners in the connect and disconnect lifecycle methods.

We should add a diagnostic to the controller, if the event listener gets added but not removed in disconnect.

Don't:

import { Controller } from "@hotwired/stimulus"

export default class extends Controller {
  connect() {
    document.addEventListener("event", () => { })
  }
}

Do:

import { Controller } from "@hotwired/stimulus"

export default class extends Controller {
  connect() {
    document.addEventListener("event", () => { })
  }

  disconnect() {
    document.removeEventListener("event", () => { })
  }
}

or, alternatively:

import { Controller } from "@hotwired/stimulus"

export default class extends Controller {
  initialize() {
    // So the event listener only gets added once
    document.addEventListener("event", () => { })
  }
}