An ESLint plugin with custom rules and shareable configuration for Nette-specific JavaScript and TypeScript linting, including support for Latte template files.
npm install --save-dev @nette/eslint-plugin eslintFor TypeScript support, you will also need these additional dependencies:
npm install --save-dev typescript typescript-eslintFor Latte template support (HTML files with embedded JavaScript), you will also need:
npm install --save-dev eslint-plugin-html
This plugin provides custom rules and configurations to improve code quality:
- no-this-in-arrow-except: Prevents using
thisinside arrow functions with configurable exceptions - prefer-line-comments: Enforces line comments (
//) over block comments (/* */) for single-line comments
- Latte Processor: Processes Latte template files to lint JavaScript code within templates
- File Type Support:
.js.latte,.css.latte,.txt.latte,.lattefiles - n:syntax="off": Respects syntax disable attribute in HTML elements
Add @nette/eslint-plugin to your ESLint configuration.
// eslint.config.js
import nette from '@nette/eslint-plugin';
import { defineConfig } from 'eslint/config';
export default defineConfig([
{
extends: [nette.configs.recommended],
// ...your other config items
},
]);The eslint-plugin-html plugin is used to check JavaScript inside <script> tags in HTML pages. This package provides you with a preprocessor that allows you to use Latte tags inside JavaScript, for example:
<script>
let name = {$name};
</script>Use this configuration:
import nette from '@nette/eslint-plugin';
import pluginHtml from 'eslint-plugin-html';
import { defineConfig } from 'eslint/config';
export default defineConfig([
{
files: ['app/**/*.latte'],
plugins: {
html: pluginHtml, // Enables eslint-plugin-html
},
processor: '@nette/latte', // Enabled Latte preprocessor
},
]);Import from typescript entrypoint:
import nette from '@nette/eslint-plugin/typescript';
export default defineConfig([
{
extends: [nette.configs.typescript],
// ...your other config items
},
]);export default defineConfig([
{
extends: [nette.configs.customize({
browser: true, // Include browser globals (default: true)
typescript: true, // Include TypeScript support (default: false)
})],
// ...your other config items
},
]);import nette from '@nette/eslint-plugin';
import { defineConfig } from 'eslint/config';
export default defineConfig([
{
plugins: {
'@nette': nette
},
rules: {
'@nette/no-this-in-arrow-except': 'error',
'@nette/prefer-line-comments': 'error'
},
},
]);
Prevents using this in arrow functions with exceptions for specific cases. It has two modes:
-
Default mode (
allowNestedInFunction: false):- Allows
thisin arrow functions only when they are callbacks in class methods or directly passed to function calls
- Allows
-
Opt-in mode (
allowNestedInFunction: true):- Also allows
thisin arrow functions when nested within any regular function
- Also allows
Example configuration:
{
rules: {
'@nette/no-this-in-arrow-except': ['error', { allowNestedInFunction: true }]
}
}Enforces the use of line comments (//) instead of block comments (/* */) for single-line comments.
Exceptions are made for:
- Multi-line block comments
- JSDoc comments (block comments starting with
*)