Skip to main content

eslint-plugin-tramvai

Set of eslint rules specific to tramvai apps. Should be used primarily as an extension to @tinkoff/eslint-config

Installation

Install necessary packages first

npm i --save-dev @tinkoff/eslint-config @tinkoff/eslint-config-react @tinkoff/eslint-plugin-tramvai

Add recommended settings to .eslintrc:

{
"extends": [
"@tinkoff/eslint-config/app",
"@tinkoff/eslint-config-react",
"plugin:@tinkoff/tramvai/recommended"
]
}

Or add plugin manually:

{
"extends": [
"@tinkoff/eslint-config/app",
"@tinkoff/eslint-config-react"
],
"plugins": [
"@tinkoff/tramvai"
],
"rules": {
"@tinkoff/tramvai/bundle-chunk-name": "warn"
}
}

Rules

bundle-chunk-name

In a tramvai app, in order to work properly with the bundle system it is necessary to put a special comment for dynamic imports. This rule checks that dynamic imports of bundles are marked with a proper control comment webpackChunkName: [name].

The rule also provides autofix in order to add add/fix control comment automatically.

Example of the wrong code:

createApp({
bundles: {
'tramvai/bundle-1': () => import('./bundles/bundle1'),
'tramvai/bundle-2': () => import(/* webpackChunkName: "randomValue" */ './bundles/bundle2'),
},
});

Example of the right code after autofix for the code above:

createApp({
bundles: {
'tramvai/bundle-1': () => import(/* webpackChunkName: "bundle-1" */ './bundles/bundle1'),
'tramvai/bundle-2': () => import(/* webpackChunkName: "bundle-2" */ './bundles/bundle2'),
},
});

Options:

  • propertyNames: defines array of object properties which will be analyzed. By default it equals to ["bundles"].

no-lambda-fn-in-actions

In order to save context of executable actions, action function itself should be a declered by function declaration.

The rule bans arrow function in fn prop of declareAction argument and provides autofix.

Example of the wrong code:

export const yourAction = declareAction({
name: 'yourAction',
fn: () => {
/// your code
}
})

Example of the right code after autofix for the code above:

export const yourAction = declareAction({
name: 'yourAction',
fn () {
/// your code
}
})