eslint-plugin-signal-naming-conventions
v1.0.1
Published
ESLint plugin enforcing configurable Angular signal naming conventions.
Maintainers
Readme
eslint-plugin-signal-naming-conventions
ESLint 10 plugin that enforces a configurable naming convention for Angular signals.
Installation
npm install --save-dev eslint-plugin-signal-naming-conventionsUsage
The plugin exports a built-in recommended flat config that enables signal-naming-conventions/signal-naming-convention.
Recommended (default):
const { defineConfig } = require('eslint/config');
const signalNamingConventions = require('eslint-plugin-signal-naming-conventions');
const tsParser = require('@typescript-eslint/parser');
module.exports = defineConfig([
{
files: ['**/*.ts'],
languageOptions: {
parser: tsParser,
ecmaVersion: 2022,
sourceType: 'module',
},
},
...signalNamingConventions.configs.recommended,
]);Optional manual override (advanced):
const { defineConfig } = require('eslint/config');
const signalNamingConventions = require('eslint-plugin-signal-naming-conventions');
const tsParser = require('@typescript-eslint/parser');
module.exports = defineConfig([
{
files: ['**/*.ts'],
languageOptions: {
parser: tsParser,
ecmaVersion: 2022,
sourceType: 'module',
},
plugins: {
'signal-naming-conventions': signalNamingConventions,
},
rules: {
'signal-naming-conventions/signal-naming-convention': ['error', { prefix: '$' }],
},
},
]);Rule: signal-naming-convention
Ensures variables and class properties initialized with Angular signal APIs use a configured prefix.
By default, the rule detects:
signal(...)computed(...)toSignal(...)- aliases imported from
@angular/core, such asimport { signal as s } from '@angular/core'
It applies to variable declarations and class properties. Destructuring, non-Identifier class keys, and declarations without initializers are ignored.
Options
{
"prefix": "$",
"functions": ["signal", "computed", "toSignal"],
"enforceForProperties": true
}prefix: string or string array. Defaults to"$".functions: signal factory function names to detect. Defaults to["signal", "computed", "toSignal"].enforceForProperties: whether to check class properties. Defaults totrue.
Examples
Invalid:
const count = signal(0);
const total = computed(() => count() + 1);
class Counter {
count = signal(0);
}Valid:
const $count = signal(0);
const $total = computed(() => $count() + 1);
class Counter {
$count = signal(0);
}Alias imports are supported:
import { signal as s } from '@angular/core';
const $count = s(0);Multiple prefixes:
const config = {
rules: {
'signal-naming-conventions/signal-naming-convention': ['error', { prefix: ['$', 'signal'] }],
},
};Custom detected functions:
const config = {
rules: {
'signal-naming-conventions/signal-naming-convention': [
'error',
{ functions: ['signal', 'computed', 'toSignal', 'rxSignal'] },
],
},
};Disable class property enforcement:
const config = {
rules: {
'signal-naming-conventions/signal-naming-convention': ['error', { enforceForProperties: false }],
},
};Autofix
Autofix prepends the first configured prefix to the local declaration name only:
const count = signal(0);becomes:
const $count = signal(0);The fixer does not rename references or perform cross-file changes.
Development
npm install
npm run lint
npm run build
npm test