@testgorilla/tgo-linting
v5.1.0
Published
Linting rules and code quality standards for TestGorilla projects
Readme
@testgorilla/tgo-linting
Linting rules and code quality standards for TestGorilla projects.
Installation
npm install @testgorilla/tgo-linting @angular-eslint/template-parser --save-devCompatibility
| tgo-linting | ESLint | angular-eslint | Angular |
| ----------- | --------------------- | -------------- | ------------------------------------------------ |
| 5.1+ | ^10.0.0 | 21.x | any (angular-eslint 21 bundles its own compiler) |
| 5.0 | ^9.0.0 \|\| ^10.0.0 | 21.x | any (angular-eslint 21 bundles its own compiler) |
| 4.x | ^8.57.0 \|\| ^9.0.0 | 20.x | any |
ESLint 9 support ended in 5.1.0. 5.0.0 kept the
^9.0.0 || ^10.0.0peer range so repos could adopt the preset before finishing their ESLint 10 migration. All consumers completed that migration alongside the Angular 21 upgrade, so 5.1.0 narrows the range to ESLint 10 only. Stay on 5.0.0 if you are still on ESLint 9 — and note that 5.0.0 also required aneslint-plugin-rxjs-xoverride to install cleanly on 9, which 5.1.0 no longer needs.
Upgrading to 5.1.0
5.1.0 restores the @eslint/js recommended baseline in the recommended() preset. Up to
5.0.0 the preset only spread the typescript-eslint configs, whose eslint-recommended slice
disables the core rules TypeScript already covers but never enables the rest — so core
rules such as no-prototype-builtins, no-duplicate-case, no-async-promise-executor,
no-unsafe-optional-chaining and no-misleading-character-class were silently inactive in
consumers. The same release cherry-picks @angular-eslint/template/no-any and
template/no-duplicate-attributes onto the HTML block.
No config change is needed, but expect new violations on first run after the bump. Dry-run
npx eslint . before merging the upgrade.
5.1.0 also drops ESLint 9: both the eslint peer range and the bundled @eslint/js
dependency are now ^10.0.0. @eslint/[email protected] itself declares an eslint: ^10.0.0
peer, so an ESLint 9 install would fail to resolve rather than degrade quietly.
Usage
This package requires ESLint flat config (eslint.config.js/.mjs) and ESLint 10.
Support for legacy .eslintrc.* configs and ESLint 8 was removed in 5.0.0; ESLint 9
support ended in 5.1.0.
Flat Config
Recommended approach:
// eslint.config.js
import tgoPlugin from '@testgorilla/tgo-linting';
export default [
tgoPlugin.configs.recommended,
// Your other configurations
];Manual configuration:
// eslint.config.js
import tgoPlugin from '@testgorilla/tgo-linting';
export default [
{
plugins: {
tgo: tgoPlugin,
},
rules: {
'tgo/require-data-testid': 'warn', // Example rule configuration
},
},
];Important Notes
- Template Parser Required: The
tgo/require-data-testidrule only works with HTML/Angular templates. You must configure@angular-eslint/template-parserfor.htmlfiles. - Angular Projects: If you're using
@angular-eslint, the template parser is usually already configured for HTML files in your overrides.
Rules
Available Rules
| Rule | Description |
| ------------------------- | ----------------------------------------------------------------------------- |
| tgo/require-data-testid | Ensures specific HTML elements have a data-testid attribute for E2E testing |
Rule Documentation
Detailed documentation for each rule, including examples and configuration options, can be found alongside the rule implementation:
- require-data-testid - Enforces data-testid attributes on specified elements
Adding New Rules
To add a new ESLint rule to this package:
Create the rule file in
src/rules/:// src/rules/your-rule-name.ts import { Rule } from 'eslint'; const rule: Rule.RuleModule = { meta: { type: 'problem', // or 'suggestion' or 'layout' docs: { description: 'Your rule description', category: 'Best Practices', recommended: false, }, schema: [], // JSON schema for rule options messages: { // Define error messages here }, }, create(context) { // Your rule implementation return { // AST node visitors }; }, }; export default rule;Add tests in
src/rules/your-rule-name.spec.ts:import { RuleTester } from '@typescript-eslint/rule-tester'; import rule from './your-rule-name'; const ruleTester = new RuleTester({ parser: '@angular-eslint/template-parser', }); ruleTester.run('your-rule-name', rule, { valid: [ // Test cases that should pass ], invalid: [ // Test cases that should fail ], });Export the rule in
src/rules/index.ts:import yourRuleName from './your-rule-name'; export const rules = { 'require-data-testid': requireDataTestId, 'your-rule-name': yourRuleName, };Add to recommended config (optional) in
src/configs/recommended.ts:rules: { 'tgo/require-data-testid': 'warn', 'tgo/your-rule-name': 'error', // or 'warn' }Document the rule in
src/rules/your-rule-name.md:- Describe what the rule does
- Provide configuration options
- Show correct and incorrect code examples
- Explain the rationale
Update this README by adding the new rule to the rules table above
Test your changes:
nx test tgo-linting nx build tgo-linting
Development
Building
nx build tgo-lintingTesting
nx test tgo-lintingLinting
nx lint tgo-lintingLicense
PROPRIETARY - © TestGorilla
