Without ESLint or Biome, code quality issues — unused variables, implicit any, unsafe type assertions, missing await, console.log in production — are caught only by the developer's own review discipline rather than automatically on every commit. ISO 25010:2011 §6.5.4 classifies absent static analysis as a maintainability defect. The practical effect: every code review must manually check for issues that a linter would flag in milliseconds, and issues that slip through become permanent residents of the codebase.
Low because absent linting does not cause immediate failures but means an entire category of preventable defects — unused variables, unsafe patterns, style violations — is caught only by manual review, if at all.
Set up ESLint with TypeScript support and wire it into CI. A minimal configuration:
npm install -D eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin
// eslint.config.mjs
import tseslint from '@typescript-eslint/eslint-plugin'
import tsparser from '@typescript-eslint/parser'
export default [
{
files: ['**/*.ts', '**/*.tsx'],
languageOptions: { parser: tsparser },
plugins: { '@typescript-eslint': tseslint },
rules: {
...tseslint.configs.recommended.rules,
'@typescript-eslint/no-explicit-any': 'error',
'@typescript-eslint/no-unused-vars': 'error',
'no-console': ['error', { allow: ['error', 'warn'] }],
},
},
]
Add to package.json:
{ "scripts": { "lint": "eslint src/ --max-warnings=0" } }
ID: code-quality-essentials.organization.eslint-configured
Severity: low
What to look for: Check for ESLint configuration files: eslint.config.js, eslint.config.mjs, .eslintrc.js, .eslintrc.cjs, .eslintrc.json, .eslintrc.yaml. Alternatively, check for Biome (biome.json) which serves as a combined linter and formatter. Verify that the configuration extends appropriate rulesets: eslint:recommended for base JavaScript, @typescript-eslint/recommended or @typescript-eslint/strict for TypeScript. Check whether a lint script is in package.json. Look for ESLint in devDependencies. A missing ESLint configuration means code quality issues (unused variables, implicit any, unsafe patterns) are caught only by the developer's judgment rather than automatically on every commit.
Pass criteria: Enumerate all relevant code locations. ESLint or Biome is configured, extends a TypeScript-aware ruleset, and is run via a lint script. The lint script runs in CI with at least 1 verified location.
Fail criteria: No ESLint or Biome configuration found. A partial implementation does not count as pass.
Skip (N/A) when: Never — linting applies to all JavaScript/TypeScript projects.
Cross-reference: Compare with code-quality-essentials.organization.naming-conventions — ESLint enforces naming rules programmatically while naming-conventions evaluates adherence manually.
Detail on fail: "No ESLint configuration found; code quality issues are not automatically caught during development or CI"
Remediation: Set up ESLint with TypeScript support:
npm install -D eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin
// eslint.config.mjs
import tseslint from '@typescript-eslint/eslint-plugin'
import tsparser from '@typescript-eslint/parser'
export default [
{
files: ['**/*.ts', '**/*.tsx'],
languageOptions: { parser: tsparser },
plugins: { '@typescript-eslint': tseslint },
rules: {
...tseslint.configs.recommended.rules,
'@typescript-eslint/no-explicit-any': 'error',
'@typescript-eslint/no-unused-vars': 'error',
'no-console': ['error', { allow: ['error', 'warn'] }],
},
},
]
Add to package.json:
{ "scripts": { "lint": "eslint src/ --max-warnings=0" } }