0.13.1 • Published 30 days ago

@stylexjs/eslint-plugin v0.13.1

Weekly downloads
-
License
MIT
Repository
github
Last release
30 days ago

@stylexjs/eslint-plugin

The ESLint rule is a standalone ESLint plugin that mostly maintains an allowlist for valid styles and their valid values.

Installation

npm install --save-dev @stylexjs/eslint-plugin

Enable Flow Types

If you need to import this package in an environment where you need the Flow type definitions shipped with this package to work, please add the following options to your .flowconfig file:

module.system.node.resolve_dirname=flow_modules
module.system.node.resolve_dirname=node_modules

This will fix the missing types for eslint and estree.

Enabling the plugin and rules

Once you've installed the npm package you can enable the plugin and rules by opening your ESLint configuration file and adding the plugin and rules.

{
  "rules": {
    "@stylexjs/valid-styles": "error",
    "@stylexjs/sort-keys": "warn"
  },
  "plugins": ["@stylexjs"]
}

All the rules

@stylexjs/valid-styles

StyleX requires styles that are statically analyzable. This rule will detect invalid styles that StyleX cannot handle and provides basic type checking for style values.

Disallowed CSS properties and suggested fixes

Listed are common CSS properties that are not allowed in StyleX, along with their suggested replacements.

@stylexjs/sort-keys

This rule helps to sort the StyleX property keys according to property priorities.

stylex/stylex-valid-shorthands

This ESLint rule enforces the use of individual longhand CSS properties in place of multivalue shorthands when using stylex.create for reasons of consistency and performance. The rule provides an autofix to replace the shorthand with the equivalent longhand properties.

Disallowed: margin, padding with multiple values

Using multivalue shorthands that StyleX cannot safely split into equivalent longhands:

  • margin: '8px 16px'
  • padding: '8px 16px 8px 16px'

Fix: Replace with equivalent longhands. Note: this is autofixable.

Disallowed: font

Why: font is a shorthand that overrides multiple font settings at once.

Fix: Replace with individual font properties. Note: this is autofixable.

  • fontSize
  • fontFamily
  • fontStyle
  • fontWeight
Disallowed: border, borderTop, borderRight, borderBottom, borderLeft

Fix: Replace with individual sub-properties. Note: this is autofixable.

  • borderWidth
  • borderStyle
  • borderColor

Config options

This rule has a few custom config options that can be set.

{
  allowImportant: false,                       // Whether `!important` is allowed
  preferInline: false                          // Whether the expansion uses logical direction properties over physical
}

@stylexjs/stylex-enforce-extension

This rule ensures consistent naming for StyleX theme files that export variables using stylex.defineVars().

Not allowed

  • Exporting stylex.defineVars() in a file not ending in .stylex.js or .stylex.ts
  • Using the .stylex.js / .stylex.ts extension without exporting stylex.defineVars()
  • Mixing stylex.defineVars() with other exports in the same file

Instead...

  • Use .stylex.js or .stylex.ts for files that only export stylex.defineVars()
  • Export only theme vars from these files

Config options

{
  "themeFileExtension": ".stylex.js" // default, can be customized
}

stylex-no-unused

This rule flags unused styles created with stylex.create(...). If a style key is defined but never used, the rule auto-strips them from the create call.

stylex-no-legacy-contextual-styles

This rule flags usages of the original media query/pseudo class syntax that wraps multiple property values within a single @-rule or pseudo class like this:

const styles = stylex.create({
  root: {
    width: '100%',
    '@media (min-width: 600px)': {
      width: '50%',
    },
  },
});

This syntax is deprecated and should be replaced with the new syntax specified here

const styles = stylex.create({
  root: {
    width: {
      default: '100%',
      '@media (min-width: 600px)': '50%',
    },
  },
});
0.13.0

1 month ago

0.13.1

30 days ago

0.12.0

2 months ago

0.11.1

4 months ago

0.11.0

4 months ago

0.10.1

5 months ago

0.10.0-beta.2

7 months ago

0.10.0-beta.1

7 months ago

0.10.0

6 months ago

0.9.0

8 months ago

0.9.2

8 months ago

0.9.1

8 months ago

0.9.3

8 months ago

0.9.0-beta.1

8 months ago

0.8.0

9 months ago

0.7.5

12 months ago

0.7.4

12 months ago

0.7.3

12 months ago

0.7.0

12 months ago

0.6.1

1 year ago

0.6.0

1 year ago

0.5.0

1 year ago

0.5.1

1 year ago

0.5.0-alpha.4

1 year ago

0.5.0-alpha.3

1 year ago

0.5.0-alpha.2

1 year ago

0.5.0-alpha.1

1 year ago

0.4.1

1 year ago

0.4.0

1 year ago

0.3.0

2 years ago

0.2.0-beta.20

2 years ago

0.2.0-beta.21

2 years ago

0.2.0-beta.22

2 years ago

0.2.0-beta.23

2 years ago

0.2.0-beta.24

2 years ago

0.2.0-beta.25

2 years ago

0.2.0-beta.26

2 years ago

0.2.0-beta.27

2 years ago

0.2.0-beta.12

2 years ago

0.2.0-beta.13

2 years ago

0.2.0-beta.14

2 years ago

0.2.0-beta.15

2 years ago

0.2.0-beta.16

2 years ago

0.2.0-beta.17

2 years ago

0.2.0-beta.18

2 years ago

0.2.0-beta.19

2 years ago

0.2.0-beta.11

2 years ago

0.2.0-beta.10

2 years ago

0.2.0-beta.9

2 years ago

0.2.0-beta.8

3 years ago

0.1.0-beta.7

3 years ago

0.1.0-beta.6

3 years ago

0.1.0-beta.5

3 years ago

0.1.0-beta.4

3 years ago

0.1.0-beta.3

3 years ago

0.1.0-beta.2

3 years ago

0.1.0-beta.1

3 years ago