eslint-plugin-html-compat
Version:
ESLint plugin to check HTML element and attribute compatibility using browserslist and @mdn/browser-compat-data
203 lines (150 loc) โข 4.55 kB
Markdown
# eslint-plugin-compat-html
[](https://badge.fury.io/js/eslint-plugin-compat-html)
[](https://opensource.org/licenses/MIT)
ESLint plugin to check HTML element and attribute compatibility using browserslist and @mdn/browser-compat-data.
## โจ Features
- ๐ **Accurate compatibility checking** using @mdn/browser-compat-data
- ๐ฏ **Browser targeting** with browserslist integration
- โ๏ธ **JSX and HTML support** for React and vanilla HTML projects
- ๐งช **Experimental feature detection** (e.g., `attributionsourceid`)
- โ๏ธ **Configurable browser targets**
- ๐ **Detailed error reporting** with unsupported browser lists
## ๐ Installation
```bash
npm install --save-dev eslint-plugin-compat-html
```
## ๐ Usage
### Basic Configuration
Add to your ESLint configuration:
```json
{
"plugins": ["compat-html"],
"rules": {
"compat-html/html-compat": "error"
}
}
```
### Recommended Configuration
```json
{
"extends": ["plugin:compat-html/recommended"]
}
```
### Custom Browser Targets
```json
{
"rules": {
"compat-html/html-compat": ["error", {
"browserslistConfig": ["> 1%", "last 2 versions", "not dead"]
}]
}
}
```
### Legacy Browser Support
```json
{
"rules": {
"compat-html/html-compat": ["error", {
"browserslistConfig": ["ie 11", "> 1%"]
}]
}
}
```
### Ignoring Specific Browsers
```json
{
"rules": {
"compat-html/html-compat": ["error", {
"browserslistConfig": ["> 1%", "last 2 versions"],
"ignoreBrowsers": ["ie 11", "opera_mini"]
}]
}
}
```
## ๐ง Configuration Options
| Option | Type | Default | Description |
|--------|------|---------|-------------|
| `browserslistConfig` | `string[]` | Project's browserslist | Custom browser targets |
| `ignoreBrowsers` | `string[]` | `[]` | List of browsers to ignore in compatibility checks |
## ๐ Examples
### Modern HTML Elements
```jsx
// โ Will warn if targeting IE 11
<dialog open>
<p>This is a modal dialog</p>
<button>Close</button>
</dialog>
// โ Will warn for older browsers
<details>
<summary>Click to expand</summary>
<p>Hidden content</p>
</details>
// โ
Widely supported
<div className="container">
<h1>Title</h1>
<p>Content</p>
</div>
```
### Experimental Attributes
```jsx
// โ Will warn for all browsers except Safari 14.1+
<a href="https://example.com" attributionsourceid="source123">
Link with attribution
</a>
// โ
Standard attributes work everywhere
<a href="https://example.com" target="_blank" rel="noopener">
Standard link
</a>
```
### Form Elements
```jsx
// โ Will warn for IE 11
<input type="color" />
<input type="date" />
// โ
Widely supported
<input type="text" />
<input type="email" />
```
## ๐ฏ Supported Elements & Attributes
The plugin checks compatibility for:
- **HTML5 semantic elements**: `<article>`, `<section>`, `<nav>`, `<aside>`, etc.
- **Interactive elements**: `<dialog>`, `<details>`, `<summary>`
- **Form input types**: `color`, `date`, `datetime-local`, `range`, etc.
- **Experimental attributes**: `attributionsourceid`, `popover`, etc.
- **Global attributes**: `contenteditable`, `draggable`, `hidden`, etc.
## ๐ ๏ธ Development
### Building
```bash
npm run build
```
### Testing
```bash
npm test
```
### Type Checking
```bash
npm run typecheck
```
### Linting
```bash
npm run lint
```
## ๐ค Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request
## ๐ License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## ๐ Acknowledgments
- [@mdn/browser-compat-data](https://github.com/mdn/browser-compat-data) for comprehensive browser compatibility data
- [browserslist](https://github.com/browserslist/browserslist) for browser targeting
- [ESLint](https://eslint.org/) for the plugin architecture
## ๐ Browser Support Data
This plugin uses the latest @mdn/browser-compat-data, which includes:
- All major browsers (Chrome, Firefox, Safari, Edge, IE)
- Mobile browsers (Chrome Mobile, Firefox Mobile, Safari iOS)
- Other browsers (Opera, Samsung Internet, etc.)
- Experimental and deprecated features