1.0.5 โ€ข Published 10 months ago

@mknelsen/stylelint-no-unused-css-selectors v1.0.5

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months ago

@mknelsen/stylelint-no-unused-selectors

npm version license

A Stylelint plugin that detects and flags unused CSS selectors in your HTML, Vue, and other template files, helping you keep your codebase clean and optimized.

๐ŸŒŸ Features

  • Detects unused CSS selectors in HTML, Vue, and other templating languages.
  • Supports nested CSS selectors and dynamic class bindings in Vue.
  • Allows you to configure patterns of selectors to ignore (e.g., framework-specific classes).
  • Works seamlessly with popular frameworks and setups like Vue.js, Nuxt, and others.

๐Ÿ“ฆ Installation

Install the plugin as a development dependency using NPM or Yarn:

npm install @mknelsen/stylelint-no-unused-selectors --save-dev
# or
yarn add @mknelsen/stylelint-no-unused-selectors --dev

๐Ÿš€ Usage

To use this plugin, add it to your Stylelint configuration:

Basic Configuration

In your .stylelintrc.json, add the plugin to the plugins array:

{
  "plugins": ["@mateusk/stylelint-no-unused-selectors"],
  "rules": {
    "custom/selector-no-unused": [
      "severity": "warning",
      {
        "ignore": ["^\\.v-", "^#app$", "^\\.some-pattern"]
      }
    ]
  }
}

The following options are available:

  • severity: The severity level of the rule. Can be one of "error", "warning", or "off". Defaults to "error".
  • ignore: An array of regular expressions that match selectors to ignore.

Example Vue Component

This plugin is capable of detecting selectors used dynamically in Vue components:

<script setup>
const isActive = ref(true);
</script>

<template>
  <div :class="{ 'my-class': isActive }"></div>
</template>

<style scoped>
.my-class {
  color: red;
}

/* This selector would be flagged as unused */
.unused-class {
  color: blue;
}
</style>

โš™๏ธ Configuration Options

Ignored Selectors

You can specify patterns for selectors that should not be flagged as unused, even if they are not detected in the template:

{
  "rules": {
    "custom/selector-no-unused": [
      "severity": "warning",
      {
        "ignore": ["^\\.v-", "^#app$", "^\\.some-pattern"]
      }
    ]
  }
}

This is especially useful for ignoring framework-specific selectors that may be applied globally or dynamically.

๐Ÿงช Examples

Basic HTML Example

<!DOCTYPE html>
<html>
  <head>
    <style>
      .used {
        color: green;
      }
      .unused {
        color: red;
      }
    </style>
  </head>
  <body>
    <div class="used">Hello, World!</div>
  </body>
</html>

If you run Stylelint on this file, it will flag .unused as an unused CSS selector.

Nested selectors

.container {
  display: flex;
  .item {
    margin: 5px;
    &.active {
      color: blue;
    }
  }
}

The plugin correctly recognizes nested CSS selectors and will not incorrectly flag .item.active if it is dynamically added via Vue.

๐Ÿ› ๏ธ Development & Contribution

Contributions are welcome! If youโ€™d like to contribute, please:

  1. Fork this repository.
  2. Create a new branch (git checkout -b feature/your-feature).
  3. Commit your changes (git commit -am 'Add a new feature').
  4. Push to your branch (git push origin feature/your-feature).
  5. Create a pull request.

๐Ÿ“œ License

This project is licensed under the MIT License - see the LICENSE file for details.

๐Ÿท๏ธ Changelog

See Releases for the version history of this project.

1.0.5

10 months ago

1.0.4

10 months ago

1.0.3

10 months ago

1.0.0

10 months ago