0.0.39 ā€¢ Published 12 months ago

eslint-plugin-conarti-fsd v0.0.39

Weekly downloads
-
License
ISC
Repository
github
Last release
12 months ago

eslint-plugin-conarti-fsd

Feature-sliced design methodology plugin.

Attention: the plugin is being actively developed and is in beta. The names of rules and configurations may change in new versions. If you find a bug, please open an issue or pull request. Feel free to contribute

Features

  • Works with any framework

  • Support for any aliases out of the box

import { AppButton } from "~/shared/ui/app-button";
import { AppButton } from "@/shared/ui/app-button";
import { AppButton } from "@shared/ui/app-button";
import { AppButton } from "$shared/ui/app-button";
import { AppButton } from "$@#$%%shared/ui/app-button";
  • Checks for absolute and relative paths
// file: src/widgets/TheHeader/ui/TheHeader.stories.tsx

import { TheHeader } from './TheHeader'; // valid
import { TheHeader } from 'src/widgets/TheHeader'; // error: should relative
import { TheHeader } from 'widgets/TheHeader'; // error: should relative
import { useBar } from '../../../shared/hooks'; // error: should absolute
  • Checks for imports from public api and fix them
// file: src/features/search-articles/...

import { addCommentFormActions, addCommentFormReducer } from 'entities/Article/model/file.ts'; // error
// fix: import { addCommentFormActions, addCommentFormReducer } from 'entities/Article';
  • Sort imports
import axios from "axios";                           // 1) external libs
import { Header } from "widgets/header";             // 2.1) Layers: widgets
import { Zero } from "widgets/zero";                 // 2.1) Layers: widget 
import { LoginForm } from "features/login-form";     // 2.2) Layers: features
import { globalEntities } from "entities";           // 2.4) Layers: entities
import { authModel } from "entities/auth";           // 2.4) Layers: entities
import { Cart } from "entities/cart";                // 2.4) Layers: entities 
import { One } from "entities/one";                  // 2.4) Layers: entities 
import { Two } from "entities/two";                  // 2.4) Layers: entities
import { debounce } from "shared/lib/fp";            // 2.5) Layers: shared
import { Button } from "shared/ui";                  // 2.5) Layers: shared
import { Input } from "shared/ui";                   // 2.5) Layers: shared
import { data } from "../fixtures";                  // 3) parent
import { getSmth } from "./lib";                     // 4) sibling

Installation

You'll first need to install ESLint:

npm i eslint --save-dev

Next, install eslint-plugin-conarti-fsd and dependencies:

npm install -D eslint-plugin-conarti-fsd eslint-plugin-import
# or by yarn
yarn add -D eslint-plugin-conarti-fsd eslint-plugin-import

Usage

Add conarti-fsd to the plugins section of your .eslintrc configuration file. You can omit the eslint-plugin- prefix:

{
  "plugins": [
    "conarti-fsd"
  ]
}

Then enable rules:

{
  "extends": [
    "plugin:conarti-fsd/recommended"
  ]
}

Customization

You can use warnings instead of errors for specific rules. Or turn off certain rules:

{
  "rules": {
    "conarti-fsd/layers-slices": "warn",
    "conarti-fsd/absolute-relative": "off",
    "conarti-fsd/public-api": "warn",
    "import/order": "warn"
  }
}

If you don't want to use the 'import/order' rule, you can choose not to install the 'eslint-plugin-import' package. And also you will have to configure all the rules separately, without using the config. Recommended settings:

{
  "rules": {
    "conarti-fsd/layers-slices": ["error", { 
      "allowTypeImports": true
    }],
    "conarti-fsd/absolute-relative": "error",
    "conarti-fsd/public-api": "error"
  }
}

Rules

šŸ”§ Automatically fixable by the --fix CLI option. šŸ’” Suggestion fix (no automatic fix)

NameDescriptionšŸ”§
conarti-fsd/layers-slicesChecks layer imports
conarti-fsd/absolute-relativeChecks for absolute and relative paths
conarti-fsd/public-apiCheck for module imports from public apišŸ’”
import/orderSort imports using 'eslint-plugin-import'šŸ”§
0.0.39

12 months ago

0.0.37

1 year ago

0.0.38

12 months ago

0.0.30

1 year ago

0.0.31

1 year ago

0.0.32

1 year ago

0.0.33

1 year ago

0.0.34

1 year ago

0.0.35

1 year ago

0.0.36

1 year ago

0.0.28

1 year ago

0.0.29

1 year ago

0.0.20

1 year ago

0.0.21

1 year ago

0.0.22

1 year ago

0.0.11

1 year ago

0.0.23

1 year ago

0.0.12

1 year ago

0.0.24

1 year ago

0.0.13

1 year ago

0.0.25

1 year ago

0.0.14

1 year ago

0.0.26

1 year ago

0.0.15

1 year ago

0.0.27

1 year ago

0.0.16

1 year ago

0.0.17

1 year ago

0.0.18

1 year ago

0.0.19

1 year ago

0.0.10

1 year ago

0.0.8-beta1

1 year ago

0.0.9

1 year ago

0.0.8

1 year ago

0.0.7

1 year ago